PHP2Shell: PHP Engine's 9.2 CVEs Are Live, and nginx Had Its Own Three 9.2s the Same Week
All PHP runtimes below 8.2.35, 8.3.36, 8.4.27, or 8.5.12 are exposed to unauthenticated RCE, and public scanning started within minutes of the patch release; shared hosting makes the memory disclosure a tenant-to-tenant risk. The fix is a runtime upgrade, not a WordPress or WAF change, and sites that stayed exposed until patching should rotate secrets.
PHP2Shell is a pair of CVEs in PHP's engine, CVE-2026-109618 and CVE-2026-109619, rated 9.2. They turn allocation failures during multipart request parsing and cleanup into an unauthenticated remote code execution chain, plus a memory leak that can expose passwords, tokens, API keys, and certificates by URL-encoding freed memory into a PHPSESSID cookie. WordPress, Drupal, and Joomla are all in the demonstration targets, but the bugs are in PHP itself, so core, theme, plugin, or WAF updates cannot reach them.
The disclosure timeline broke early: CVE numbers leaked on Oct 20 with an incorrect 10.0 score, a Calif researcher's PoC video spread, and Chainguard published patched images about six hours before the official release. The PHP Foundation says a known OOM issue from its 2024 external audit stayed unfixed for months because every fix route touched compatibility, DoS surface, or third-party extensions, and the team decides by consensus. An Aug 11, 2026 RCE report from Ryan A, with independent reports from OpenAI and Wiz, made it the top priority.
The same patch week included two separate issues: nginx fixed three CVSS 9.2 memory bugs in 1.30.6 and 1.31.7, and Node.js fixed a Brotli decoder out-of-bounds write. A Go x509 certificate-chain issue is frequently miscalled RCE but is actually a MITM-capable missing intermediate-CA check. Immediate mitigation is version-specific: upgrade PHP to 8.2.35, 8.3.36, 8.4.27, or 8.5.12, use memory_limit=-1 and a smaller post_max_size for 109618, restart workers, and inspect logs for signs of exploitation.
A leaked PoC video and a wrong 10.0 score expanded the attack window as much as the vulnerabilities themselves; Dutch government services went offline before a patch existed because after public disclosure, inaction was riskier than downtime.
The PHP Foundation's postmortem puts the decade-long gap on process and staffing, not detection: the 2024 external audit surfaced the OOM issue, but consensus-based security decisions with no clear exploitation path let it sit until external RCE reports forced a priority change.
Wiz's claim that one researcher in one week reproduced what used to take a team months is the concrete reason exploit complexity is no longer a valid risk-assessment defense.
The memory disclosure path has a wider blast radius than the RCE path on shared hosts: victims get no crash or error, and an oversized PHPSESSID cookie is the only clue that another tenant's memory just crossed the request.