Fast facts for teams responding right now.
Patch to PHP 8.5.12, 8.4.27, 8.3.36 or 8.2.35. Source backports exist for 7.4, 8.0 and 8.1. Apache mod_php is the highest-risk deployment. Successful exploitation was confirmed in the wild on 24 October, and investigations should look back to 17 October, when the first attempt was recorded.
Security updates have been available since October 21, 2026. For enterprise IT teams, the challenge is not just applying the patches. It is confirming that every affected system has been identified, updated, and verified.
On 21 October 2026, the PHP development team released emergency updates for two vulnerabilities, CVE-2026-109618 and CVE-2026-109619, both scored 9.2 under CVSS v4.0. Together, they are being called PHP2Shell, and either can allow an unauthenticated attacker to execute code on an affected server. They sit in the PHP runtime itself rather than in any particular application or plugin, which is what makes the scope awkward: the flaw is beneath your software, not inside it.
For most enterprises, the immediate work is straightforward in principle and difficult in practice. Find the affected installations, patch them, confirm the patch is live. The difficulty is that PHP tends to run in places that are not on anyone’s list of PHP applications inside a vendor appliance’s admin interface, behind a monitoring dashboard, under a customer portal built by a contractor in 2016 and untouched since.
You cannot patch what nobody has inventoried, and you cannot close a vulnerability you cannot prove is closed. That is the part this article is about.
This is worth stating plainly because it moved quickly. In the first days after disclosure, security teams observed scanning, fingerprinting, and exploit attempts that did not work. On October 24, 2026, security researcher Adel Karimi reported successful remote code execution against honeypot servers running PHP 8.4.26 under Apache mod_php. The demonstrated attack chain was consistent with CVE-2026-109618. This particular observation did not independently demonstrate exploitation of CVE-2026-109619.
There is an earlier date that matters more for your investigation scope. Amazon Threat Intelligence recorded an exploitation attempt against its MadPot honeypot on 17 October, four days before the vulnerabilities were public. Amazon recommends that organizations begin compromise investigations from 17 October rather than from the disclosure date.
On October 26, 2026, CISA added CVE-2026-109618 and CVE-2026-109619 to its Known Exploited Vulnerabilities (KEV) catalog, following its October 21 alert urging immediate patching. This confirms that both vulnerabilities warrant urgent remediation. Enterprise IT teams should prioritize affected systems, verify that security updates are running, and investigate potential compromise.
Both flaws are in how the PHP runtime handles memory during request processing, and both can lead to remote code execution.
| Vulnerability | What goes wrong | Severity |
|---|---|---|
| CVE-2026-109618 | An out-of-memory condition can interrupt PHP while request data is only partly initialized. Cleanup may then treat invalid data as valid, corrupting memory. | Critical – 9.2 |
| CVE-2026-109619 | Request-owned state can survive after its memory is freed. A later request hitting the same worker may use it before initialization resets it. | Critical – 9.2 |
This is the most useful triage information available, and it is missing from most of the coverage. Every PHP installation serving web requests is affected by mod_php, PHP-FPM, php-cgi, FrankenPHP, and LiteSpeed, but PHP considers Apache mod_php the highest risk because a single unauthenticated request can trigger the demonstrated exploit before any application code runs.
The consequence is worth sitting with. If exploitation happens before your application executes, then your authentication, your input validation, and your application-layer controls are not in the path. Neither, in many configurations, is a WAF rule written against application behaviour. The confirmed in-the-wild exploitation landed against mod_php.
Rapid7’s analysis notes that PHP-FPM appears harder to exploit for CVE-2026-109618 because a failed worker startup terminates the worker and interrupts that particular sequence, and no complete FPM exploit has been reported for it. That is a reason to patch mod_php hosts first. It is not a reason to leave FPM hosts unpatched.
On 23 October, the PHP Security Team published an informational advisory about a separate issue, CVE-2026-115560, involving session handling. It is not fixed by the 21 October updates, and it does not affect every deployment: it requires an application to change its session serialization handler at runtime, with session upload progress still enabled.
Until a fix ships, the recommendation is to set `session.upload_progress.enabled=0`. Conveniently, that is also one of the partial mitigations for CVE-2026-109619, so teams applying it get coverage on both. Review this advisory separately rather than assuming the October patches handled all three CVEs.
| PHP branch | Status | Action |
|---|---|---|
| 8.5 | Fixed in 8.5.12 | Apply the security update |
| 8.4 | Fixed in 8.4.27 | Apply the security update |
| 8.3 | Fixed in 8.3.36 | Apply the security update |
| 8.2 | Fixed in 8.2.35 | Patch now, then plan the upgrade — 8.2 reaches end of life on 31 December 2026 |
| 7.4, 8.0, 8.1 | No official release, but the PHP security team published minimal source backports | Apply your distribution’s fix, or the source backport if you build from source. Check your LTS vendor first |
| 5.4 to 7.3 | End of life, no fix from the PHP project | Upgrade, or confirm a commercial LTS vendor is supporting you. Treat as unremediated until proven otherwise |
One trap worth knowing about. Many Linux distributions backport security fixes without changing the version number, so `php -v` can report an apparently vulnerable version on a system that is patched, and a vulnerability scanner will flag it. The reverse is also true: a reported version tells you nothing definitive about a vendor-managed install. Verify against your OS or software vendor’s advisory, not the version string. Red Hat’s bulletin is the reference point for Enterprise Linux estates, and Google Cloud has published guidance for cloud workloads.
The organization’s main website is usually the first place anyone checks and rarely the place that causes trouble. Look also at customer-facing portals and business applications, older internal tools and admin dashboards, workloads on Azure and other cloud virtual machines, container images and self-managed hosting, third-party products with embedded PHP components, and anything maintained by an external vendor.
Not every one of those is exposed to the same degree. Exposure depends on the runtime, the deployment configuration, whether untrusted requests can reach it, and whether a fix is installed. That distinction is what separates a useful risk assessment from a list of every host that has PHP on it.
A vulnerability in a business application becomes an infrastructure concern the moment that application has a route to sensitive systems, internal networks, or operational data. Which, for most customer portals, it does.
Take a common arrangement. A customer portal runs on a cloud-hosted virtual machine. The cloud infrastructure team manages the server. An application team maintains the portal. A third-party vendor wrote the software originally and still ships updates for it.
In our experience, this question produces a pause, and then three teams each explaining why it is reasonably someone else’s. That pause is the vulnerability. The technical flaw gets patched in an afternoon once somebody owns it; the ownership gap is what leaves a system exposed for six weeks.
Three conditions make it worse, and all three are common.
Older applications often pin to PHP versions that are no longer supported upstream. Updating may require regression testing, compatibility work, or a vendor who is slow to respond. These are real constraints, and they tend to attach to exactly the applications the business cannot take offline.
Cloud environments accumulate workloads across teams, subscriptions and business units. An organization can have genuinely strong cloud security controls and still be running an unpatched application runtime inside a virtual machine, because platform security and workload security are different responsibilities that are easy to assume overlap more than they do.
Some products ship PHP without advertising it as a dependency. Finding those means contacting suppliers, reading their advisories, and confirming which release contains the fix. A software inventory built only from internally developed applications will miss them entirely.
The aim is to move from awareness to verified remediation. Each step below ends with what you should be able to evidence afterwards.
Start with an inventory across cloud virtual machines, on-premises servers, containers, application platforms and third-party products. Use configuration management records, software inventories, vulnerability scanners and dependency data together, because no single one of them is complete.
Do not let a single server-level command stand in for the environment. A host can carry several PHP installations at different versions, and a container host tells you nothing about what is inside the images it runs.
Evidence: every relevant installation identified, its effective patch status known, and an owner assigned to each.
Internet-facing systems processing untrusted requests come first, and within those, Apache mod_php deployments come first again for the reason set out above. Then work through applications handling sensitive data, supporting critical operations, performing administrative functions, or holding connections into other systems.
Internal applications are not safe by virtue of being internal. They are a second hop for an attacker who has already landed somewhere else.
Evidence: a remediation order that reflects deployment type, exposure, and business criticality, not just an alphabetical asset list.
For each affected workload, name the application owner, the infrastructure owner, the team applying the fix, the person approving the production change, and the team verifying it afterwards. Third-party applications need a named contact at the supplier.
Define the escalation path now for anything that cannot be patched in the required window, because that conversation goes better before the deadline than after it.
Evidence: every affected system has a named owner, an agreed action, and a documented status.
For upstream installations, move to the patched release for your branch. For vendor-managed packages, follow the supplier advisory and confirm the backport addresses both CVEs.
Two failure modes account for most of the “we patched it” systems that turn out not to be patched. Updating a container base image achieves nothing while the running workload still uses the old image, so rebuild and redeploy. And installing a package on a server can leave existing PHP worker processes running the old code in memory, so restart or replace them through a controlled change.
If a system shows signs of compromise, talk to your incident responders before patching. Remediation destroys evidence.
Evidence: the corrected code is running in production, not merely present on disk.
Confirm the effective runtime version or vendor patch status, the service state, and the deployment record. Then check the application still works for business-critical systems, that means authentication, forms, integrations, and scheduled jobs, not just a page load.
Re-run authenticated vulnerability scans where you can. Expect scanners to keep flagging vendor-backported versions by version number; resolve those with vendor evidence rather than suppressing them, because a suppression rule outlives the person who understood why it was added.
Evidence: the fix is effective, the application functions, and remaining findings have been investigated and documented.
Patching stops future exploitation of the flaw. It does nothing about an attacker who was already there, and with a confirmed pre-disclosure attempt on 17 October, that is not a hypothetical concern for internet-facing mod_php hosts.
Review web server, application, endpoint and network telemetry for unexpected processes spawned by PHP or the web server, unusual commands, unfamiliar files in web directories, new accounts, and outbound connections you cannot explain. Scope the review from 17 October 2026 onward, per Amazon’s guidance, rather than from the patch date.
Evidence: the review is complete, anything suspicious has been investigated, and any incident response actions are recorded.
| Area | What to verify | Evidence to keep |
|---|---|---|
| Inventory | All PHP workloads identified, including third-party products | Application and software inventory |
| Exposure | mod_php and internet-facing systems prioritized | Risk assessment and remediation order |
| Ownership | A named owner per affected system | Assigned tickets, owner records |
| Patching | Correct fix deployed, workers restarted, images rebuilt | Vendor advisories, change records, deployment logs |
| Validation | Patched runtime confirmed live, application tested | Version checks, scan results, test evidence |
| Compromise review | Telemetry reviewed from 17 October onward | Review findings, incident records |
Some applications depend on an unsupported runtime, need vendor sign-off, or fail compatibility testing against the patched release. Those constraints are real, and they need managing rather than wishing away.
PHP is explicit that updating is the only complete fix, and nothing below changes that. But the project did document partial mitigations, and for a team whose change window is three days out, they are the most useful thing in the advisory:
Alongside those, CISA recommends taking PHP systems offline if you cannot update them or if you are running PHP 8.1 or earlier, and CERT-EU recommends isolating internet-facing applications from public networks until they are patched. A container or cgroup memory limit can act as an availability boundary but PHP does not treat it as a mitigation. WAF rules cover only traffic that actually routes through the WAF.
For any exception, record the system, its exposure, why remediation cannot proceed, a named risk owner, the compensating controls and a remediation deadline. Temporary risk reduction should support the patching plan, not quietly replace it.
Strip away the specifics, and PHP2Shell is asking every organization the same question: how much do you actually know about the software running across your estate?
Enterprises accumulate applications, cloud environments, vendor platforms, and business services continuously, and ownership fragments as they do. Applications keep running after their dependencies age out of support, after their original owners move on, and after the patching process that once covered them stopped being clear to anyone. None of that is visible on a normal Tuesday. A critical vulnerability makes it visible immediately, because suddenly somebody needs accurate answers within hours.
A well-governed cloud platform gives you consistent policy, access control, logging, and infrastructure standards. What it does not do is update the application runtimes inside customer-managed workloads. For Azure estates, that distinction is worth being precise about: a well-designed Azure landing zone supports workload visibility, clear ownership, and consistent operational practice, which is most of what you need to answer a question like this quickly. It does not patch PHP for you.
Unsupported runtimes make urgent remediation slow, and slow remediation is how a patchable flaw becomes an incident. The goal is not to replace every ageing application on principle. It is to know which dependencies would make the next emergency unmanageable, and to have a realistic plan for those specific ones.
Vulnerability management does not end when a vendor ships a fix. It ends when you understand your exposure, have remediated it, and can show your work.
Five questions are worth putting to your team once the dust settles:
Only the first four are about PHP. The fifth is the one that determines how the next one goes.
Critical vulnerabilities expose gaps in workload visibility, patch ownership, and infrastructure governance long before they expose data. Horizons Consulting helps enterprise IT teams assess and strengthen their Microsoft Azure foundations, architecture, governance, security, workload visibility, and the operational ownership that makes incident response work. We build alongside your internal team and hand over documentation they can run from.
Or read more about our Microsoft Azure services and Azure Landing Zone Design & Implementation.