Daily Top · Vulnerabilities / Web Runtime

PHP2Shell is in the interpreter. Updating WordPress does not patch it.

PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 closed CVE-2026-109618 and CVE-2026-109619 on 21 October. CISA and the UK NCSC say take unpatched internet-facing PHP offline. Amazon’s MadPot saw an attempt on 17 October. Neither CVE is on KEV.

RWP Ventures · 2026-10-22 · event 2026-10-21 · 12 min read · priority 9.3

Bottom line up front

CONFIRMED On 21 October 2026 the PHP project shipped 8.5.12, 8.4.27, 8.3.36, and 8.2.35. They close CVE-2026-109618 (RCE via out-of-memory corruption, GHSA-w8hw-w9fx-j79w) and CVE-2026-109619 (RCE via stale global state, GHSA-6wmf-4rv5-p3rp). PHP rates each CVSS v4.0 9.2. Both are in the interpreter, not in WordPress, Drupal, Magento, Laravel, or any plugin. CISA’s same-day alert named the pair php2shell, said they affect all PHP installations serving web requests, and told operators who cannot patch — or who still run PHP 8.1 or earlier — to take those systems offline. The UK NCSC said the same. CISA’s Known Exploited Vulnerabilities catalog this morning is still 2026.10.21 / 1754. Neither CVE is on it.

Do not collapse five facts.

  1. This is not yesterday’s Plex2Shell. [Plex Media Server](/posts/2026-10-21-plex2shell-kev-assume-compromise/) is a four-CVE chain on KEV, due Friday for the file write. PHP2Shell is two bugs in php-src. A CMS or plugin update does not change the runtime under it.
  2. CISA’s 21 October alert and Amazon’s 21 October 22:36 UTC MadPot post are not the same claim. CISA, at publication: has not observed exploitation. Amazon, hours later: a MadPot attempt on 17 October from anonymized infrastructure, more attempts 02:00–08:00 UTC on 21 October before the embargo lifted, and after the patch “PHP2Shell is now being broadly exploited in the wild.” Amazon also wrote it is unclear whether those attempts would have succeeded on real-world systems. Huntress, 21 October: no in-the-wild hits on partner systems. Treat sensor traffic as REPORTED exploitation pressure, not a victim census.
  3. php -v on Ubuntu is not the close. Distro packages keep the old upstream number. Ubuntu 24.04’s fixed php8.3 is 8.3.6-0ubuntu0.24.04.13. Ubuntu 22.04’s fixed php8.1 is 8.1.2-1ubuntu2.28. Compare the package to the vendor advisory, then restart every worker. A package on disk with the old process still mapped is the unpatched interpreter.
  4. A WAF is not the patch. Cloudflare put default WAF rules live at 03:02 UTC on 21 October, including Free, and still told customers to patch. CISA: a WAF may help until the update. PHP: there are no complete mitigations. memory_limit=-1, session.upload_progress.enabled=0, and PHP 8.5 fatal_error_backtraces=0 close named paths. They do not make an install safe.
  5. This is not a PLC event. PHP on a plant historian web UI or a vendor portal is an IT/web runtime. A hit is not confirmed OT process impact.

The operator sentence: inventory every process that serves HTTP through PHP, patch or backport it, restart the workers, and do not close the ticket because WordPress is current.

What happened

PHP’s security team posted an advance notice on 20 October: two critical issues, both CVSS v4.0 9.2, release scheduled 21 October 14:00 UTC. The CVE identifiers had already leaked. PHP brought the drop forward a day.

On 21 October PHP published the advisory and the four point releases. GitHub security advisories GHSA-w8hw-w9fx-j79w and GHSA-6wmf-4rv5-p3rp landed around 13:34 UTC, ahead of the announced 14:00 window. CISA’s alert followed the same calendar day. Canada’s Cyber Centre published AL26-026. JVN published JVNVU99905564 on 22 October.

CISA catalog check this morning: version 2026.10.21, dateReleased 2026-10-21T14:04:39Z, count 1754. Newest rows are still the 20 October six (Plex, SiteGuard, Siemens). No PHP CVE. No BOD 26-04 due date.

Amazon Threat Intelligence (CJ Moses, 21 October, 22:36 UTC window):

Cloudflare, same day: attack traffic after the leak, payload mutation against its rules, WAF live 03:02 UTC. Disclosers named in that post: Calif.io, Wiz, OpenAI, Quarkslab. CVE.org credit on 109618 includes Ryan at Calif.io, Wiz, and OpenAI.

Unit 42 (21 October): Cortex Xpanse counted over 22.6 million exposed instances potentially vulnerable. That is an exposure telemetry figure, not a compromise count and not a confirmed-vulnerable census.

Why it matters

The bug class is worse than a CMS CVE because the request never has to reach application code.

PHP validated unauthenticated RCE over HTTP against Apache mod_php with default input and memory limits, before any application-specific code runs. PHP-FPM, php-cgi, FrankenPHP, and LiteSpeed are in the affected set. PHP rates mod_php highest. For 109618, FPM is susceptible on source analysis; PHP has not demonstrated a complete FPM exploit for that CVE. For 109619, session-upload-progress RCE was validated on mod_php and FPM.

Three operational reasons this is the daily.

First, the inventory is the interpreter, including the copy you do not think you run. PHP is bundled in appliances, panels, containers, and “the WordPress box.” CISA: prevalence may not be directly observable. php -v on the jump host is not an inventory of every FPM pool, every mod_php vhost, every official Docker image, and every vendor UI that embeds PHP.

Second, the remaining clock is not KEV. FCEB agencies do not yet have a BOD 26-04 due date. CISA still told everyone to patch now and to take unpatchable or EOL PHP offline. That is an emergency-alert posture, not a catalog row. Do not wait for KEV to start the work.

Third, the version string will lie. Ubuntu, Debian, RHEL module streams, and AlmaLinux shipped backports under old upstream numbers. Remi’s volunteer repo was explicitly out on release day — PHP told those users to switch to distro packages or source. A scanner that only matches 8.3.6 will mark patched Ubuntu 24.04 hosts as vulnerable, or worse, will mark unpatched upstream 8.3.6 as fine.

Who / what is affected

Technical context

High-level, from the PHP advisories. This is not an exploit recipe.

CVE-2026-109618 — RCE via OOM corruption. PHP uses longjmp() for out-of-memory errors. In some contexts, request memory is reachable before it is fully initialized. If an allocation fails there, cleanup can read or branch on invalid state. PHP describes multipart parsing tricks that reach OOM while staying inside apparent post_max_size / memory_limit (undeclared content-length, header amplification, empty-file metadata). Apache mod_php always runs request shutdown, including after a failed startup, and automatic body parsing can hit the limit before application code. The patch replaces OOM longjmp() with a delayed soft OOM at the next VM safe point and a hard _exit() past a second threshold. CWE-416, also CWE-755 / 824 / 1325 / 1419. CVSS v4.0 9.2 AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H.

CVE-2026-109619 — RCE via stale global state. Worker-global error, session, object, or extension state can keep pointing at request-owned memory after that heap is freed. A later request on the same worker can consume it before normal initialization. Confirmed consumers: session upload progress (enabled by default; no session_start() required) and, on PHP 8.5, fatal error backtraces. A producer plus a consumer across two requests is required. CWE-416. Same 9.2 vector.

Partial stopgaps PHP lists, each incomplete:

ATT&CK (defensive mapping, not attribution): T1190 exploit public-facing application; execution as the PHP worker account (T1059). Follow-on webshells or miners are not confirmed in the public victim record as of this writing. CISA’s hunt hint is PHP workers launching shells or downloading tools.

Threat / exploitation status

ClaimStatusEvidence
Two unauthenticated RCEs in php-src; fixed in 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35CONFIRMEDPHP 21 Oct advisory; GHSA pair; CVE.org
Highest demonstrated risk: mod_php, before application codeCONFIRMEDPHP GHSA-w8hw-w9fx-j79w
CISA emergency alert; take unpatched / EOL PHP offlineCONFIRMEDCISA 21 Oct; UK NCSC 21 Oct
On KEV as of catalog 2026.10.21 / 1754CONFIRMED absentJSON feed this morning
CISA observed exploitation at alert publicationCONFIRMED noCISA: “has not observed exploitation… as of the time of publication”
MadPot attempt 17 Oct; more 21 Oct 02:00–08:00 UTC; “broadly exploited” after patchREPORTED (Amazon)AWS Security Blog 21 Oct. Success on production: UNKNOWN per Amazon
Cloudflare / watchTowr / others saw attack or honeypot traffic 21 OctREPORTEDCloudflare blog; watchTowr FAQ. Not a victim census
Huntress partner-base exploitationCONFIRMED none as of 21 OctHuntress blog and 21:27 UTC update
Named public breach / ransomware useUNKNOWNNo confirmed victim in this retrieval
Actor identityUNKNOWNAmazon: anonymized infrastructure, multiple actors assessed
OT process impactUNKNOWNNo evidence in this retrieval

What defenders should do

  1. Inventory PHP that serves HTTP, not “the WordPress estate.” Check FPM pools, mod_php, containers, panels, appliances, and vendor web UIs. Package queries: dpkg -l 'php' / rpm -qa 'php'. Running binaries: php -v and php-fpm -v after the restart.
  2. Patch, then restart. Upstream: 8.5.12, 8.4.27, 8.3.36, 8.2.35. Distro: the advisory package (Ubuntu USN-8948, Debian DSA-6574-1 / DLA-4848-1, RHEL RHSB-2026-013, AlmaLinux 21 Oct streams, Oracle ELSA-2026-87070 and siblings). **Reload Apache / restart every php*-fpm.** A package upgrade without a restart leaves the old interpreter in memory.
  3. Do not trust the three-part version on distro hosts. Match the package revision to the vendor notice. Ubuntu 24.04 staying on 8.3.6 after .13 is expected.
  4. EOL PHP: vendor backport or upgrade the branch. If neither is possible, CISA and NCSC: take it offline. PHP’s 7.4 / 8.0 / 8.1 source trees are for people who build from source, not a substitute for a supported package.
  5. Remi users: PHP said rpms.remirepo.net would not have updates on 21 October. Move to distro packages or source.
  6. WAF is a buffer. Keep Cloudflare / other WAF rules on. Do not close the change record on a WAF hit count.
  7. Hunt, especially internet-facing mod_php. CISA: PHP worker processes spawning shells or downloading tools. Amazon: unexpected process execution or file modification on web app servers. Review logs around 17 October onward, not only 21 October. MadPot source IPs Amazon published for hunting (honeypot-facing, not a complete actor set): 103.216.220.92 (17 Oct), 31.223.184.166, 37.19.200.5, 134.209.159.64, 103.114.163.188, 95.217.98.37 (21 Oct).
  8. If you were internet-facing and unpatched through 21 October, do not treat “now patched” as clean. Rotate credentials the worker could read (app secrets, database passwords, API keys in memory or .env). That is prudent hygiene under REPORTED mass scanning, not a confirmed-compromise assertion.
  9. Do not wait for KEV. Catalog is still 1754. The federal clock has not started. The internet-facing clock started when the advisory did.

RWP is not publishing exploit code, PoC repositories, or a how-to for the OOM or session-progress paths.

RWP assessment

High confidence that the two CVEs are unauthenticated RCE in php-src, that the four 21 October releases close the documented paths, that CISA and NCSC issued take-offline guidance, and that neither CVE is on KEV catalog 2026.10.21 / 1754.

High confidence that updating an application (WordPress, Magento, a custom app) without updating and restarting PHP does not remediate.

Moderate confidence in “broad exploitation.” Amazon, Cloudflare, and watchTowr independently report attack or honeypot traffic. Amazon’s 17 October MadPot attempt is a primary telemetry claim. Amazon itself will not say those attempts worked on real systems. Huntress saw none on partners. No public named victim. Sensor fire is not a breach ledger.

Low confidence in actor identity and in any ransomware overlay. None is in the current record.

Confidence that this is not OT process impact: high. No evidence in this retrieval that a controller, safety system, or physical process was affected.

This outranked the rest of the window because yesterday’s Daily Top explicitly deferred PHP until the 14:00 UTC release. That release, the CISA/NCSC alerts, distro packages, and Amazon’s overnight MadPot write-up are the material increment. Plex remains due Friday; it is not a new development. SafePay AA26-293A is a joint TTP pack on already-patched edge CVEs. No new KEV row overnight.

What we are watching

Sources

Primary: PHP 21 October security advisory and GHSA-w8hw-w9fx-j79w / GHSA-6wmf-4rv5-p3rp; CVE-2026-109618 / CVE-2026-109619; CISA 21 October PHP alert; CISA KEV JSON 2026.10.21; UK NCSC 21 October PHP notice; Amazon MadPot post 21 October; Cloudflare 21 October WAF post; CCCS AL26-026; Ubuntu php2shell notice; Red Hat RHSB-2026-013. Independent: Unit 42 exposure brief, Huntress, watchTowr FAQ, JVN JVNVU99905564. Prior RWP: Plex2Shell Daily Top 21 October.

Sources

  1. PHP — Security advisory: Critical remote code execution vulnerabilities, update now, 21 Oct 2026
  2. PHP — GHSA-w8hw-w9fx-j79w RCE via OOM corruption
  3. PHP — GHSA-6wmf-4rv5-p3rp RCE via stale global state
  4. CVE — CVE-2026-109618
  5. CVE — CVE-2026-109619
  6. CISA — Critical Vulnerabilities in PHP Require Immediate Patching, 21 Oct 2026
  7. CISA — KEV JSON feed catalog 2026.10.21
  8. UK NCSC — Critical security issue affecting PHP, 21 Oct 2026
  9. Amazon Threat Intelligence — PHP2Shell exploitation prior to public disclosure in MadPot, 21 Oct 2026
  10. Cloudflare — Deploys protections against php2shell, 21 Oct 2026
  11. Canadian Centre for Cyber Security — AL26-026, 21 Oct 2026
  12. Ubuntu — php2shell vulnerability fixes available, 21 Oct 2026
  13. Red Hat — RHSB-2026-013 php2shell
  14. Unit 42 — Threat Brief CVE-2026-109618 / CVE-2026-109619, 21 Oct 2026
  15. Huntress — php2shell leaked critical PHP vulnerabilities, 21 Oct 2026
  16. watchTowr — PHP RCE FAQ CVE-2026-109618 / CVE-2026-109619
  17. JVN — JVNVU99905564, 22 Oct 2026
  18. PHP — Upcoming Critical PHP Security Release, 20 Oct 2026
  19. RWP Ventures — Plex2Shell Daily Top 2026-10-21