Skip to main content

Horizons Consulting

Critical PHP Vulnerabilities: What Enterprise IT Teams Must Verify

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.

Exploitation status: what changed after the patch

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.

What the two vulnerabilities actually are

Both flaws are in how the PHP runtime handles memory during request processing, and both can lead to remote code execution. 

VulnerabilityWhat goes wrongSeverity
CVE-2026-109618An 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-109619Request-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

Not every deployment carries the same risk

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. 

A third issue, disclosed 23 October

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.

Which PHP versions are affected

PHP branchStatusAction
8.5Fixed in 8.5.12Apply the security update
8.4Fixed in 8.4.27Apply the security update
8.3Fixed in 8.3.36Apply the security update
8.2Fixed in 8.2.35Patch now, then plan the upgrade — 8.2 reaches end of life on 31 December 2026
7.4, 8.0, 8.1No official release, but the PHP security team published minimal source backportsApply your distribution’s fix, or the source backport if you build from source. Check your LTS vendor first
5.4 to 7.3End of life, no fix from the PHP projectUpgrade, 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.

Where PHP tends to hide

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. 

Why a PHP flaw becomes an infrastructure problem

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. 

Who owns updating the PHP runtime?

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.

Legacy application dependencies

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 and hybrid estates

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. 

Third-party software

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. 

Six checks to make now

The aim is to move from awareness to verified remediation. Each step below ends with what you should be able to evidence afterwards.

1. Identify every affected installation

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. 

2. Prioritize by exposure, starting with mod_php

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.

3. Assign remediation ownership explicitly

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.

4. Apply the fix, then make sure it is running

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.

5. Validate the fix and the application

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. 

6. Look for signs of compromise, starting 17 October

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.

Remediation checklist

AreaWhat to verifyEvidence to keep
InventoryAll PHP workloads identified, including third-party productsApplication and software inventory
Exposuremod_php and internet-facing systems prioritizedRisk assessment and remediation order
OwnershipA named owner per affected systemAssigned tickets, owner records
PatchingCorrect fix deployed, workers restarted, images rebuiltVendor advisories, change records, deployment logs
ValidationPatched runtime confirmed live, application testedVersion checks, scan results, test evidence
Compromise reviewTelemetry reviewed from 17 October onwardReview findings, incident records

If a critical application cannot be patched today

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: 

  • CVE-2026-109618: set `memory_limit=-1`, enforced where applications cannot override it. 
  • CVE-2026-109619: set `session.upload_progress.enabled=0`. On PHP 8.5, also set `fatal_error_backtraces=0`. 
  • Both: these must be set in php.ini, the FPM pool configuration, or server config, not through `ini_set()` or `.user.ini`, which applications can override. Restart every PHP worker afterwards or the change does not take effect on running processes. 

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.

What this reveals about infrastructure visibility

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.

Cloud governance has to reach application dependencies

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. 

Modernization is a security decision

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. 

What you should be able to confirm when this is over

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: 

  1. Have we identified every affected PHP installation, including inside third-party products? 
  2. Have we applied the fixes, or documented and approved the exceptions? 
  3. Can we demonstrate the corrected runtime is live in production? 
  4. Have we reviewed exposed systems for compromise, going back to 17 October? 
  5. Do we know who owns remediation when the next critical CVE lands? 


Only the first four are about PHP. The fifth is the one that determines how the next one goes.
 

Can your team answer those five questions today?

 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.