arrow_back All posts
Application Security

PHP2Shell: Inside CVE-2026-109618 and CVE-2026-109619, the Unauthenticated PHP RCE Flaws

ComplyArmor Team · October 24, 2026 · 8 min read

Most critical CVEs are scoped to one application you chose to install. PHP2Shell isn't. CVE-2026-109618 and CVE-2026-109619, disclosed by the PHP team on October 21, 2026, sit in PHP's own memory handling — underneath every application written in the language. Rated 9.2 on CVSS v4.0, both allow unauthenticated remote code execution on any PHP install that serves web requests, which is to say, a large share of the internet.

Key takeaways

What's actually broken

Both CVEs come from the same underlying class of problem: PHP's request lifecycle assumes a request ends cleanly. When it doesn't — an out-of-memory condition interrupts processing, or an unusual code path frees memory a request still thought it owned — PHP's cleanup logic can end up acting on data that's partly initialized or already gone. An attacker who can reliably trigger that abnormal ending gets a memory-corruption primitive, and from there, a path to arbitrary code execution, all without ever authenticating to the application running on top of PHP.

That's the part that makes PHP2Shell different from an ordinary application CVE. A vulnerable plugin or outdated library is a problem scoped to the sites that installed it. A vulnerable PHP runtime is a problem scoped to every site running that runtime — WordPress, Laravel, a bespoke internal tool, a vendor appliance that happens to be written in PHP and that nobody on your team thinks of as "a PHP app" at all.

Affected versions and fixes

ItemDetail
CVE IDsCVE-2026-109618, CVE-2026-109619
SeverityCVSS v4.0 9.2 (sources vary between "Critical" and "High" framing)
Affected scopePHP installations serving web requests, with public reporting describing the underlying issue as present back to PHP 5; highest risk in mod_php deployments
Fixed releasesPHP 8.2.35, 8.3.36, 8.4.27, 8.5.12
Legacy branchesMinimal source backports issued for PHP 7.4, 8.0, 8.1 — all past official end-of-life; further backports depend on your distribution or LTS vendor
Exploitation statusIn-the-wild exploitation attempts and honeypot activity reported within days of disclosure; reports vary on scale

Why "we'll catch it at the next pentest" doesn't work here

How continuous monitoring actually helps here

This is the exact scenario our Smart PTaaS continuous model is built for. Instead of a once-a-year engagement that happens to land before or after a disclosure like this, the platform re-checks exposed services and runtime fingerprints on a recurring cycle — so a newly disclosed, widely deployed flaw gets matched against your actual live assets within the same window attackers are already probing, not whenever the next scheduled test happens to fall.

What to do this week

  1. Inventory every PHP runtime you operate — including versions bundled inside containers, appliances, and vendor products you didn't build yourself.
  2. Upgrade to 8.2.35, 8.3.36, 8.4.27, or 8.5.12 as applicable to your branch, treating this as urgent given the unauthenticated, pre-application-code risk profile.
  3. Flag anything still on an end-of-life branch (7.4, 8.0, 8.1 or older) for isolation or accelerated migration — a source backport on an unsupported branch is a stopgap, not a long-term fix.
  4. Check mod_php deployments first. The PHP team called this configuration the highest-risk path; prioritize it ahead of PHP-FPM or other process-isolated setups if you're triaging under time pressure.
  5. Don't wait for the next scheduled test to confirm the fix landed. Verify the patched version is actually live on every exposed instance, not just staged for deployment.

Frequently asked questions

What is PHP2Shell?

PHP2Shell is the name given to two critical PHP core vulnerabilities, CVE-2026-109618 and CVE-2026-109619, disclosed on October 21, 2026. Both stem from PHP leaving its internal memory in a corrupted state when a request ends abnormally, which can let an unauthenticated attacker achieve remote code execution. Because the bug lives in PHP itself rather than in any one application, it affects every PHP installation that serves web requests.

Which PHP versions are affected by CVE-2026-109618 and CVE-2026-109619?

Public reporting describes the underlying issue as present in PHP versions going back to PHP 5. Fixed releases are PHP 8.2.35, 8.3.36, 8.4.27 and 8.5.12. Minimal source backports were also issued for PHP 7.4, 8.0 and 8.1, though those branches are past end-of-life and no longer receive ongoing support from the PHP project — only specific distributions or LTS vendors may backport further.

Is PHP2Shell being actively exploited?

Reports differ in how far exploitation has gone, but multiple security vendors have described in-the-wild exploitation attempts and honeypot activity following disclosure. Given the flaws are unauthenticated and affect widely deployed infrastructure, treat active exploitation as the operating assumption rather than wait for full consensus.

Why is PHP2Shell worse than a typical application vulnerability?

Most RCE disclosures are scoped to one application or library you chose to run. PHP2Shell sits in the PHP runtime itself, underneath every application written in the language. The PHP team has flagged mod_php deployments as highest risk, where the exploit can fire before any application code runs at all — meaning your own code, framework, or WAF rules may never get a chance to matter.

How does continuous monitoring help against a flaw like this?

A point-in-time pentest tells you what was true on the day it ran. PHP2Shell was disclosed with patches already available, and the exploitation window opened within days. Continuous scanning re-checks exposed services and runtime versions on a recurring cycle, so a newly disclosed, widely deployed flaw like this gets caught and flagged against your actual live assets in the days after disclosure, not whenever the next annual engagement happens to fall.

What should I do about PHP2Shell this week?

Inventory every PHP runtime you operate, including versions bundled inside containers, appliances, and vendor products you didn't build yourself. Upgrade to 8.2.35, 8.3.36, 8.4.27 or 8.5.12 as applicable. For anything still on an end-of-life branch, isolate it, put it behind a WAF rule if one exists, and prioritize migration — a source backport on an unsupported branch is a stopgap, not a fix you can rely on long-term.

PHP2Shell is a runtime-level flaw with an application-level blast radius, disclosed with an exploitation window measured in days. That's not a problem a once-a-year report can keep up with — it's exactly the gap continuous, expert-verified monitoring exists to close.

arrow_back All posts Check your exposure to PHP2Shell arrow_forward