Engineering & compliance

PHP2Shell: A Patch Plan for Cyber Essentials and UK GDPR

PHP shipped fixes for two critical flaws on 21 October. Installing them is the urgent part, but it isn't the whole job: there's a 14-day Cyber Essentials deadline, an NCSC checklist, and, if anyone got in, a breach decision with a 72-hour clock.

Guide cover: a patch plan for the PHP2Shell vulnerabilities
By Ritesh Agarwal8 min read

Direct answer

Every website or application running PHP needs the 21 October 2026 security update: PHP 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or your vendor's patched package. The two flaws, CVE-2026-109618 and CVE-2026-109619 (“PHP2Shell”), let an attacker run code on the server without logging in, and the NCSC has asked organisations to act now. Cyber Essentials requires critical fixes within 14 days of release, so the deadline is 4 November 2026. Check the version that actually serves traffic, because some hosts and package sources were late with the fix. If you find signs of compromise on a system holding personal data, start a breach assessment straight away: the ICO's 72-hour window starts when you become aware.

PatchFixed build, restartedThe package version that serves traffic, not just what apt reported.
ProveEvidence by 4 NovInventory, versions and dates you can show an assessor.
AssessBreach or not?Check for compromise, then decide whether the ICO needs to know.

Executive summary

  1. Both flaws are in PHP itself, so a fully updated WordPress, WooCommerce or Laravel site is still exposed on an unpatched server.
  2. “Updated” isn't the same as “fixed”: the PPA Laravel Forge uses was still serving the unfixed 8.3.35 hours after release.
  3. Since April 2026, missing Cyber Essentials' 14-day window for critical updates is an automatic fail.
  4. If a compromised server held customer data, you may have 72 hours to report it to the ICO.

What happened

The PHP security team gave advance notice on Tuesday 20 October and released the fixes the next afternoon, a little before the scheduled 3pm BST. By then the CVE IDs had leaked, and Cloudflare had already reported early attacks against PHP sites that morning. php.net · Sansec timeline

PHP branchFixed inNote
8.5 / 8.48.5.12 / 8.4.27
8.38.3.368.3.35 is not fixed
8.28.2.35End of life on 31 December 2026, so plan the next upgrade now
8.1 and olderNo official releaseDistro backports only (Ubuntu 22.04: 8.1.2-1ubuntu2.28)

This guide is about the deadlines and obligations around the patch. For how the two bugs work, which server setups are most at risk, and update commands for Ubuntu, Forge, cPanel and Plesk, see our technical PHP2Shell guide.

What the NCSC is asking

The NCSC's alert, “Critical security issue affecting PHP”, boils down to five steps: NCSC alert

  1. Find every PHP installation, starting with internet-facing systems. Don't only look for old versions; all of them may be affected.
  2. Include suppliers and appliances that bundle PHP, and apply their updates as they arrive.
  3. Update, then harden using the PHP team's guidance. If you can't update yet, apply the temporary mitigations.
  4. Take the system offline if you can neither update nor mitigate in time.
  5. Check for compromise and backdoors before patching a system that's been exposed. If you're unsure, bring in an NCSC-assured Cyber Incident Response provider.

The alert also recommends the NCSC's free Early Warning service, which flags threat activity it sees on your network. It's worth signing up if you haven't.

Who patches what

If your site runs PHP and nobody has installed the fixed package and restarted PHP, it's exposed. Who should be doing that depends on your hosting:

Shared cPanel or Plesk hostingYour host patches; you ask for proof

cPanel and Plesk ship their own PHP builds, so the fix arrives when the vendor rebuilds and your host installs it. Ask for the package version and install time in writing.

Managed WordPressAsk, don't assume

Good managed hosts patch quickly, but “we're aware” isn't “we've fixed it”. WordPress maintenance mode doesn't help, because PHP handles the request before WordPress runs.

VPS via Forge, Ploi or similarYou own the patch

Forge installs PHP from Ondřej Surý's Ubuntu PPA, which was late with the fix. Install the newest build, check the version, mitigate if it's still 8.3.35, and check again later.

Agency-managed sitesYour agency owns the list

Ask for each site's server, PHP version, patch time and any interim measures. A good agency will send this without being asked.

That's what we hit on a client's Forge server on release day. The newest build the PPA offered was still short of 8.3.36, so we added the mitigation as a conf.d drop-in, restarted PHP-FPM and checked every site. It's a stop-gap until the fixed package lands:

The interim drop-in, and the evidence worth keepingbash
# Interim mitigation for PHP-FPM 8.3 (repeat per installed version / SAPI)
echo 'session.upload_progress.enabled = 0' | sudo tee /etc/php/8.3/fpm/conf.d/99-php2shell.ini
sudo systemctl restart php8.3-fpm
php-fpm8.3 -i | grep session.upload_progress.enabled   # expect: Off

# Evidence worth keeping: the version that serves traffic, and when it changed
php-fpm8.3 -v
grep ' upgrade php8.3' /var/log/dpkg.log | tail -5
Mitigation is not a fix. php.net says the interim settings reduce exposure to specific attack paths but don't make an installation safe. Keep checking until the version serving traffic is the fixed build.

Cyber Essentials: 14 days

Since April 2026, two security-update questions in the “Danzell” question set are automatic fails: A6.4 for operating systems and firmware, and A6.5 for applications. Both require high-risk or critical updates to be installed within 14 days of release. IASME: changes to Cyber Essentials for April 2026

PHP rates both flaws critical (CVSS v4.0 9.2), so for in-scope servers the window closes on Wednesday 4 November 2026. Two things to watch:

  • When the fix reached you. If your PHP comes from a distro or PPA that published later than PHP itself, note the date the fixed package became available. That's your answer if an assessor asks why you patched on day nine.
  • Who's responsible. On a VPS, patching PHP is your job. On shared or managed hosting it's the provider's, but you should still have their written confirmation.

Our evidence checklist

We don't close an emergency patch for a client until five things are true and written down:

Five checks per PHP serverClose by 4 Nov 2026
IInventory
Every server, container and staging copy that runs PHP, including the forgotten ones.
VVersion
The package version serving traffic: FPM or module, not just the CLI.
RRestart
Workers restarted, and no process still running the old binary.
MMitigation
Upload progress off where it isn't needed, and request limits at the proxy.
CCompromise check
Logs reviewed for the exploit pattern from 20 October onwards.
All five · closedFile the evidence with your Cyber Essentials records.
V or R missing · openMitigate now and check package sources daily.
C fails · incidentStop patching in place, preserve evidence and assess the breach.

For the compromise check, look for multipart requests followed by memory-limit errors, bursts of HTTP 500s, unusually large PHPSESSID cookies and unexplained PHP worker restarts. This is our working checklist, not an official IASME or NCSC tool.

If you were compromised: UK GDPR and the ICO

Code execution on a web server usually means the attacker could read the database credentials in the application's config, and on a shop, booking or membership site that means customer data. If you find evidence of compromise:

  1. Assess the risk to people. If a personal data breach is likely to pose a risk to individuals' rights and freedoms, report it to the ICO as soon as possible and, where feasible, within 72 hours of becoming aware. ICO: report a personal data breach
  2. Tell the people affected without undue delay if the risk to them is high.
  3. Record the decision either way. You're expected to document breaches, including the ones you decide not to report.
  4. Rotate every secret the server held, such as database passwords, API keys and payment-provider keys, and treat the server as untrusted until it's rebuilt or cleaned.

Fines can reach £17.5 million or 4% of global turnover, but for most small businesses the bigger cost is customer trust, and a late or missing report makes both worse. If you're a processor, such as an agency or host acting for a client, tell the controller without undue delay so they can make the 72-hour decision. Our guide to UK GDPR when your development team works abroad explains who's the controller and who's the processor.

If you run an agency

Most clients don't know which PHP version their website runs, and they shouldn't have to. They do need you to tell them, plainly, well inside the 14 days. Send each client a short note: whether their site was exposed, when it was patched, what interim measures were in place, and whether you saw anything suspicious. And if you're a client whose supplier has gone quiet, our guide to taking over a website from another agency covers getting control back safely.

Our ruleA server isn't patched until the version serving traffic says so, and the evidence is filed.

Frequently asked questions

What is the Cyber Essentials deadline for PHP2Shell?
Under the rules introduced in April 2026, high-risk and critical security updates must be installed within 14 days of release, and failing that question fails the assessment. PHP published the fixes on 21 October 2026, so for in-scope servers the practical deadline is 4 November 2026. If your package source shipped the fix later, record when it became available to you and raise it with your certification body.
Do I have to report a PHP2Shell compromise to the ICO?
Only if it's a personal data breach that's likely to pose a risk to people's rights and freedoms. In that case UK GDPR requires you to tell the ICO without undue delay and, where feasible, within 72 hours of becoming aware. A server running a shop, membership site or CRM usually holds personal data, so treat a compromise as a possible breach until the logs show otherwise. Record your assessment even if you decide not to report.
My site is on shared hosting. Who has to patch PHP?
Your host patches PHP on shared and managed plans, but your site and its data are still your responsibility. Ask the host, in writing, for the exact package version and when it was installed, and keep the reply. You can't apply the interim mitigations yourself with .user.ini or ini_set(), because they have to take effect before the request is parsed.
Does the NCSC want PHP2Shell incidents reported?
The NCSC alert asks organisations to find every PHP installation, update or mitigate, and check exposed systems for signs of compromise. If you're unsure whether you've been breached, it recommends an NCSC-assured Cyber Incident Response provider. It also points to its free Early Warning service.
Will PHP2Shell cost us our Cyber Essentials certification?
Certification is assessed at a point in time, but since April 2026 the 14-day update questions are automatic fails, and Cyber Essentials Plus tests a sample of devices. An internet-facing PHP server left unpatched past the window is exactly what those checks catch. Patch it, keep the evidence described above, and you'll have an answer when you're asked.

Primary sources

Published 21 Oct 2026Reviewed 21 Oct 2026Reviewer Appycodes Editorial Team

Technical and operational guidance, not legal advice. Confirm breach-reporting decisions with your data protection lead or a qualified adviser, and certification questions with your Cyber Essentials certification body.

Our clients

UK · Europe · Worldwide

Selected case studies

What we built, how it works and the results for our clients.

Creoate product interface01
B2B commerce

Eight years behind a wholesale marketplace

Next.js storefront, Python ingestion pipelines, DynamoDB data layer and AWS infrastructure.

8+ yearsdevelopment and support
Ontick product interface02
Event technology

Ticketing owned by the event team

Multi-organiser commerce, Stripe instalments and two native apps in one connected platform.

£2M+ticket sales processed
Easyship product interface03
Global logistics

Helping shippers compare their options

Rate, tax and duty calculators, server-rendered courier pages and a custom MongoDB CMS.

550+couriers in the calculator
TEFL.ie product interface04
Education & training

Connecting course sales to the classroom

WordPress and WooCommerce, a Moodle LMS, Stripe deposits and Zoho CRM, tied together with Zapier automation.

Since 2017development and support
All White Laser product interface05
Medical aesthetics

From equipment finance to clinic support

A lead-to-billing system on GoCardless Direct Debit, provider certification, and a React Native app for machine owners.

9 yrsdevelopment and support
Decofetch product interface06
Luxury commerce

A custom home for designer furniture

Server-rendered Next.js commerce over a Laravel API, bespoke operations tooling and re-architected AWS infrastructure.

0→livemarketplace development
BA Engine Room product interface07
AI operations

Connecting discovery, contracts and delivery

Discovery briefs, e-signed contracts, Stripe deposits, delivery milestones and time tracking in one operational system.

0→1custom platform development
PlusHeat product interface08
Home services

Helping customers choose their boiler cover

Custom plan configuration, postcode-qualified lead journeys, CRM synchronisation and campaign landing pages.

5 yrswebsite development and support
Léonia product interface09
Beauty commerce

Shopify shaped around a beauty brand

Custom theme, customer accounts, loyalty rewards, referrals and gift-with-purchase offers.

5 yrsShopify development and support
Shutters 365 product interface10
Home improvement

From window measurements to a priced order

A seven-step product builder with live previews, sample orders and supplier tools.

7-stepproduct configurator
Bloc Ads Manager product interface11
Advertising

From targeted ads to venue check-ins

Campaign creation, audience targeting, in-app ads and reporting linked to venue check-ins.

check-inscampaign attribution
Bloc product interface12
Social events

Four years across the app and operations

Mobile app, backend, advertising tools, a digital marketplace and website.

4+ yrssupport across five codebases
Zonely product interface13
Social mobile

Two apps, one real-time conversation marketplace

Customer and buddy apps with per-minute billing, wallets, moderation and admin tools.

2 appsfor iOS and Android
Player Profile Hub product interface14
Grassroots football

Helping grassroots players get discovered

Verified profiles, video highlights, coach discovery and safeguarding on web and mobile.

0→1custom platform development
DeepSpatial product interface15
Geospatial AI

Connecting clients, investors and emerging talent

Corporate and investor pages, the Xploor talent platform and ongoing releases on AWS Amplify.

2 yrsdevelopment and support
Yippee Malta product interface16
Travel

A booking journey the tour team owns

A multilingual website connected to the booking API, with deposits, coupons and affiliate tracking.

6languages across the booking journey
Professional Energy product interface17
Energy brokerage

Tenders, contracts and accounts brought together

Supplier tenders, contract management, brokerage accounting and client records.

100+suppliers per tender

Need PHP2Shell patched and documented this week?

Same-day PHP patching, compromise checks and the evidence your Cyber Essentials assessor will ask for.