CVE-2026-109619
PHP RCE via stale global state (PHP2Shell)
PHP fixed CVE-2026-109619 on 21 October 2026. Internal state owned by one request can survive after its memory is freed. A later request on the same worker can use it, a use-after-free that can lead to unauthenticated remote code execution. Fixed in 8.2.35, 8.3.36, 8.4.27 and 8.5.12. CVSS 4.0 9.2. CISA urges immediate patching. Amazon reports exploitation in the wild, with a first attempt on 17 October. Not in CISA KEV.
By ThreatWire Desk · Published 21 Oct 2026 · Updated 22 Oct 2026
- CVSS
- 9.2
- Vector
- CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
- Class
- RCE
- Status
- Active Exploitation
- KEV
- Not in CISA KEV
- 0-day
- No
- Vendor
- PHP Group
- Products
- PHP, php-src
- Affected
- PHP 8.2 before 8.2.35, 8.3 before 8.3.36, 8.4 before 8.4.27 and 8.5 before 8.5.12 (supported branches listed by PHP). Component: PHP core request lifecycle, including error state, fatal error backtraces (PHP 8.5) and session upload progress. PHP 8.1 and older are end of life.
- Fixed
- PHP 8.2.35, 8.3.36, 8.4.27 and 8.5.12 (21 October 2026). PHP also published minimal source backports for PHP 7.4, 8.0 and 8.1.
- Published
- 21 Oct 2026
- Updated
- 22 Oct 2026
The status above is the claim. Links do not upgrade it.
CVE-2026-109619 is a flaw in PHP core. PHP calls it "RCE via stale global state". It was fixed on 21 October 2026.
A PHP worker keeps some global state between requests. Some of it points to memory owned by one request. If that state is not reset, the memory is freed while the pointer stays. A later request on the same worker can use it before normal setup. This is a use-after-free.
A fatal error, including one from running out of memory, can skip the reset. A late warning can also refill error state after cleanup.
PHP confirmed two paths. The first is fatal error backtraces in PHP 8.5, when fatal_error_backtraces is on. It is the basis of the confirmed mod_php exploit. The second is the session upload progress feature, which is on by default. That RCE was validated against mod_php and FPM. The FPM path needs a suitable application operation.
The confirmed impact is unauthenticated remote code execution, plus memory disclosure, with the web worker's rights. The attacker's requests must reach the same worker.
PHP rates it CVSS 4.0 9.2. The full vector is in the CVSS field. NVD published its entry on 21 October and added its own CVSS 3.1 score of 9.8.
Fixed versions are 8.2.35, 8.3.36, 8.4.27 and 8.5.12. PHP also shared minimal source backports for 7.4, 8.0 and 8.1.
PHP says there is no complete configuration workaround. As stopgaps, it suggests fatal_error_backtraces=0 on PHP 8.5 and session.upload_progress.enabled=0, then a restart of every worker. Each only removes one known path.
Credits go to Wiz, Ryan at Calif.io and OpenAI, per the CVE record. The fix was built by Arnaud Le Blanc, Ilija Tovilo, Jakub Zelenka and Nora Dossche.
On 21 October, CISA issued an alert urging immediate patching. It calls the flaws "php2shell" and says they affect all PHP installations serving web requests. CISA says systems that cannot be updated, or that run PHP 8.1 or older, should go offline until patched. The UK NCSC issued a similar alert.
Vendor fixes are out from Debian, Ubuntu, Red Hat, the Docker official php images and cPanel. Researchers say the flawed code dates back to PHP 5.4, so treat older PHP as exposed. See the vendor list and full checklist.
Exploitation update, 22 October: Amazon said on October 21 that its MadPot honeypots logged a PHP2Shell exploit attempt on October 17, four days before disclosure. It does not know how the attacker got the details early, or which of the two CVEs was targeted. Amazon now says PHP2Shell is being broadly exploited in the wild. ELLIO and VulnCheck saw attempts from 08:36 UTC on October 21. No confirmed compromise is public. Read the full story.
The CVE is not in the CISA KEV catalog (catalog 2026.10.21). Cloudflare reported attack attempts before the release. CISA had observed no exploitation at publication. Detailed research write-ups are now public. ThreatWire has not verified or run any exploit code. A research repository published before the advisory, ikow/php2shell-poc, targets session upload progress. Its chains need extra app conditions, such as an LFI or a deserialization gadget. They do not match PHP's description, so ThreatWire does not count it as a confirmed PoC. ThreatWire has not run it. Read the full explainer. The twin flaw is CVE-2026-109618.
Sources
- Vendor advisory
- PHP security advisory, 21 Oct 2026 (news archive)
- Related advisory GHSA-w8hw-w9fx-j79w (CVE-2026-109618)
- PHP 8 ChangeLog
- Amazon Threat Intelligence, PHP2Shell exploitation prior to public disclosure in MadPot (21 Oct 2026)
- PHP Foundation, Today's PHP security release (21 Oct 2026)
- CVE.org record
- NVD entry (CVSS 3.1 9.8 by NVD)
- CISA alert, Critical Vulnerabilities in PHP Require Immediate Patching (21 Oct 2026)
- CISA KEV catalog
- UK NCSC alert
- oss-security, PHP security team post
- Debian security tracker
- Ubuntu CVE page
- Wiz Research, PHP2Shell write-up
- Cloudflare, protections against php2shell
- ELLIO, PHP2Shell attacks before the patch
- VulnCheck, PHP2Shell vulnerabilities
- The Hacker News, Someone tried to exploit PHP2Shell 4 days before disclosure
Related on ThreatWire
- NewsPHP2Shell was probed 4 days before disclosure: Amazon logged an attempt on Oct 17
- NewsPHP2Shell: PHP fixes two critical RCE flaws, CVE-2026-109618 and CVE-2026-109619
- CVE recordCVE-2026-109618: PHP RCE via out-of-memory corruption (PHP2Shell)
- CVE recordCVE-2026-108097: Drupal core Field UI remote code execution (SA-CORE-2026-014)
- CVE recordCVE-2026-92392: curl and libcurl HTTP/2 upload use-after-free
- CVE recordCVE-2026-82531: Smarty template cache code injection via extends inheritance