L5 · ShitstormPHP · RCE · leaked earlyphp2shell

PHP2Shell: the patch and the exploit flushed at the same time

PHP2Shell: two critical PHP core RCEs leak a day before the patch, and nearly every PHP back to 5.4 is in the bowl

CVE-2026-109618 and CVE-2026-109619 (both CVSS 9.2) give remote code execution in PHP itself. A proof-of-concept video leaked the evening before release, so the patch and the exploit arrived together.

Disclosed
Oct 21, 2026
Public disclosure date
Severity
CVSS 9.2 × 2
2 CVEs tracked here
Splash zone
PHP-FPM, mod_php, php-cgi, FrankenPHP, LiteSpeed: nearly every PHP back to 5.4
php
In the wild
Disputed
Attempts seen by watchTowr and Cloudflare; no confirmed breach yet

The one-sentence version

Make PHP run out of memory at exactly the wrong moment, or poke a worker that still holds a previous request's freed state (session.upload_progress is the confirmed way in), and the next thing PHP executes is your bytes.

What happened

Two bugs in PHP’s own engine, not in some framework or plugin. Nearly every PHP release back to 5.4 is affected by at least one of them. Apache mod_php is the highest-risk setup, but PHP-FPM, php-cgi, FrankenPHP and LiteSpeed are all in scope.

The disclosure was planned for October 22. On the evening of October 20 a proof-of-concept video from Calif, one of the reporting teams, went public by accident, and PHP pushed its releases out on October 21 at 14:00 UTC. So for once, defenders and attackers started the race at the same time.

Is it exploited? It depends on whom you ask. Patchstack’s partners and watchTowr saw real attack attempts within hours. Cloudflare saw early attempts too. Sophos had no reports of exploitation, and nobody had confirmed a successful break-in at the time of writing. We grade by the worst credible case: public PoC + default configuration + basically the whole web = L5.

Common misreading

Turning off session.upload_progress is not a fix. It only cuts the confirmed path to CVE-2026-109619. The out-of-memory bug, CVE-2026-109618, does not need it.

What’s in the bowl

CVE-2026-109618CVSS 9.2

Half-built request on out-of-memory

If PHP runs out of memory at the wrong moment, it can bail out while internal request data is only partly initialised. This path does not need session.upload_progress.

In plain poop: the toilet gets installed with only half its bolts, and someone sits down anyway.

CVE-2026-109619CVSS 9.2

Stale request state used after free

Request-owned global state survives after its memory is released, and a later request on the same worker uses it. session.upload_progress is the confirmed trigger.

In plain poop: you flushed it, but it came back up in the next person's stall, and now it runs your server.

Are you standing in it?

Run php -v on each box, then type the version or pick the closest match.

Fixed versions (Oct 21, 2026)
BranchSafe fromStatus
PHP 8.58.5.12Supported, patched
PHP 8.48.4.27Supported, patched
PHP 8.38.3.36Security fixes only, patched
PHP 8.28.2.35Security fixes only, patched. EOL Dec 31, 2026
PHP 8.1 and oldernoneEnd of life. Distro / LTS vendors and source backports for 7.4–8.1 only

Can’t patch tonight? Plug the hole

php.ini
; PHP2Shell interim hardening (partial!)
; blocks the confirmed CVE-2026-109619 session path only
session.upload_progress.enabled = Off

Then reload PHP-FPM / Apache. php.net is clear that upgrading is the only complete fix: this does nothing for CVE-2026-109618. Capping request body size at your proxy also raises the bar.

Crime-scene timeline

  1. Oct 20, 2026

    The details escape the bathroom

    A Hacker News post says disclosure is due Oct 22. Around 20:00 UTC Calif accidentally publishes a proof-of-concept video. PHP posts an advance notice the same day.

  2. Oct 21, 03:02 UTC

    Cloudflare switches on default WAF rules

  3. Oct 21, 07:34 UTC

    Patchstack hosting partners report exploitation incidents

    Its 13:57 UTC telemetry update shows probing, with no hard evidence of breaches.

  4. Oct 21, 14:00 UTC

    PHP ships 8.5.12, 8.4.27, 8.3.36 and 8.2.35

    Linux distributions and LTS vendors got the patches in advance.

  5. Oct 21, 14:19 UTC

    watchTowr sees active exploitation attempts

    watchTowr also reproduces CVE-2026-109618. Sophos says no in-the-wild exploitation has been reported.

Who said what

We list each claim and who made it. Primary sources (the vendor, the researcher, the registry) are marked. Where reports disagree, we grade by the worst credible case.

  • php.net newsPrimaryAdvance notice Oct 20, releases Oct 21. Updating is the only complete fix
  • PatchstackPrimaryHeadline says attacks are ongoing; later telemetry shows probing, no confirmed breach
  • SophosPrimaryPoC public; no in-the-wild exploitation reported; PoC claims not verified
  • The Hacker NewsCredits Wiz Research, Calif and OpenAI Codex Security; Gemini team helped on the fix
  • HuntressCoined “php2shell”; leaked before the release
  • JFrog Security ResearchTechnical deep-dive on both CVEs
  • OpenAI php2shell-checkerVersion check by URL headers or local php -v; same fixed versions as php.net, misses distro backports