Skip to content
SecurityPHP2Shell affects most WordPress sites. Am I affected? →
presscomet
Security

CVE-2026-109618 & CVE-2026-109619 (PHP2Shell) Explained

CVE-2026-109618 and CVE-2026-109619 are the two critical PHP flaws known as PHP2Shell. Here's what each one is, why they rate 9.2, which setups are worst, the version table, and what to do — in plain English.

By the Presscomet teamPublished 11 min read

On this page
  1. What they are
  2. CVE-2026-109618
  3. CVE-2026-109619
  4. How bad is it?
  5. Affected & fixed versions
  6. Timeline
  7. Is it being exploited?
  8. What to do

What CVE-2026-109618 and CVE-2026-109619 are

CVE-2026-109618 and CVE-2026-109619 are two vulnerabilities in the PHP runtime — the program that reads and runs PHP code every time a visitor loads a page on a PHP website. Together they are nicknamed PHP2Shell. They are not bugs in WordPress, a plugin or a theme; they sit one layer below all of that, which is why this guide treats them on their own. For the WordPress-owner walkthrough — checking, patching and cleanup — start with our PHP2Shell and WordPress guide.

Both bugs share a shape: PHP loses track of its own memory at the wrong moment while handling a web request, and an attacker who shapes a request carefully can turn that confusion into remote code execution — running their own commands on your server — without logging in. This explainer stays at the conceptual level. It deliberately contains no exploit code, proof-of-concept or reproduction steps; the aim is to help you understand and prioritise the fix, not to reproduce the attack.

CVE IDs
CVE-2026-109618 · CVE-2026-109619
Nickname
PHP2Shell
Severity
Critical · CVSS v4.0 9.2
Login needed?
No (unauthenticated)
Fixed in
8.5.12 · 8.4.27 · 8.3.36 · 8.2.35
Released
21 October 2026

CVE-2026-109618: RCE via out-of-memory corruption

The PHP project’s own title for CVE-2026-109618 (advisory GHSA-w8hw-w9fx-j79w) is “RCE via OOM corruption”. “OOM” means out-of-memory.

Conceptually: when PHP begins handling a request it sets up a set of internal structures to hold the request’s data. If PHP hits an out-of-memory condition midway through that setup, the request is left only partly initialised. The problem is what happens next: the clean-up code that tears the request down treats that half-finished data as if it were valid and complete. Acting on data that was never properly formed is where the memory corruption comes from, and with careful shaping it can be steered toward code execution.

The practical sting is that the out-of-memory condition can be induced by an attacker’s request rather than waited for — which is why the mod_php attack path described below needs nothing from your application at all.

CVE-2026-109619: RCE via stale global state

The PHP project titles CVE-2026-109619 (advisory GHSA-6wmf-4rv5-p3rp) “RCE via stale global state”. This is a classic use-after-free in slow motion.

A PHP worker process handles one request, then another, then another. Some internal state belongs to a single request and should be cleared when that request ends. In this bug, a piece of that request-owned state outlives the memory it refers to: the memory is freed, but a pointer to it survives into the next request handled by the same worker. When that later request reuses the stale pointer, it is reading or writing memory that now means something else — so it needs two requests on the same worker to line up.

Beyond code execution, researchers demonstrated that this stale state can be used to disclose chunks of the worker’s memory to an unauthenticated attacker. That memory can contain whatever the worker touched recently: passwords, session tokens, API keys. That is why, if your site was exposed and unpatched, the advice is to rotate secrets — a leaked credential keeps working after you patch.

Why the names talk about memory, not WordPress

Neither bug cares what your site does. They are about how PHP manages memory between and during requests, below the point where your theme, plugins or WordPress core run. That is the single most important thing to understand: no amount of WordPress hardening reaches them.

How bad is it? Severity, memory disclosure and SAPIs

The PHP project rates both bugs at CVSS v4.0 9.2 (Critical), with the vector AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H. In plain terms: reachable over the network, needs no privileges and no user interaction, and has high impact to confidentiality, integrity and availability. (Secondary trackers quoted other numbers — CVSS 3.x scores of 9.8 and 8.1, and one firm rated it 10.0 — but the PHP project’s 9.2 is the figure we use.)

The one part of the vector that sounds reassuring is AC:H/AT:P — “high attack complexity, attack requirements present.” That reflects reality: reliable exploitation depends on how memory happens to be laid out, how PHP was built, and which worker handles which request. But high complexity is not safety. It slows an attacker down rather than stopping them, and the usual response is to send a great many attempts and wait for the odds to line up.

Which server setup you run changes your exposure. All PHP installations that serve web requests are affected, but not equally:

Setup (SAPI)RiskWhy
Apache mod_phpHighestA demonstrated attack on CVE-2026-109618 triggers from an unauthenticated request before any application code runs.
PHP-FPMAffectedIts startup behaviour blocks one out-of-memory path, but the session-lifecycle issue in 109619 was validated under suitable conditions.
php-cgi · FrankenPHP · LiteSpeedAffectedAll serve web requests through the PHP runtime, so all are in scope. Patch and restart.
CLI only (cron, WP-CLI)Not the attack pathCommand-line PHP isn’t serving web requests — but patch the package anyway, since it’s the same PHP.

Affected and fixed versions

Every PHP release before the fixed versions is affected. The lower bound is uncertain — it is believed to reach back to PHP 5.4 (2012), though not every old release was tested. The fixes shipped on 21 October 2026.

PHP branchVulnerableFixed
8.5below 8.5.128.5.12
8.4below 8.4.278.4.27
8.3below 8.3.368.3.36
8.2below 8.2.358.2.35 (EOL 31 Dec 2026)
8.1 · 8.0 · 7.4allNo official binary — source backports plus distro/LTS builds only
7.3 and olderall (believed back to 5.4)No upstream fix — upgrade PHP

A low version number isn’t always unpatched

Linux distributions often fix security bugs without bumping PHP’s version string. Ubuntu 24.04’s patched package still reports 8.3.6, and one site was reported still showing 8.4.26 while being fully protected by a backport. The only reliable answer on such hosts is the vendor’s advisory or the host’s written confirmation that both CVEs are fixed.

Not sure whether your branch is still supported at all? Pick it below.

Interactive lookup

Is my PHP version still supported?

PHP 8.1

End of life
Support
No longer supported by the PHP project
PHP2Shell fix
Vendor/distro backport only

Only patched if your host or Linux distribution backports fixes. Upgrade.

Dates from php.net’s supported-versions page, checked 2026-10-23. Distributions such as Ubuntu and Red Hat support their own PHP packages on their own schedule.

Timeline and disclosure

The disclosure didn’t go to plan: details leaked a day before the coordinated release, and attack attempts started even earlier.

  1. Aug 2026

    Bugs reported to PHP

    Researchers from Wiz, Calif, OpenAI and Quarkslab report the issues. The PHP security team receives the reports from 11 August and begins a coordinated fix with Linux distributions.
  2. 17 Oct 2026

    First attempt seen

    Amazon's threat intelligence team records an exploitation attempt against its sensors while the bugs are still under embargo — four days before any patch exists.
  3. 20 Oct 2026

    Details leak; emergency release announced

    Information spreads publicly ahead of the plan (a Hacker News thread, a watchTowr post, and a proof-of-concept video released by mistake). PHP pre-announces a critical release for 14:00 UTC the next day.
  4. 21 Oct 2026

    Fixes released

    PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 ship (advisories published 13:34 UTC), plus source backports for 7.4, 8.0 and 8.1. Distributions and control panels publish patched packages over the following hours.
  5. 21–22 Oct 2026

    Mass scanning

    Cloudflare reports attempts climbing from thousands to millions after the announcement and deploys firewall rules. Managed WordPress hosts roll out patched PHP.
  6. 24 Oct 2026

    Where things stand

    Exploitation attempts are widely reported; no successful compromise has been publicly confirmed, and neither CVE is in CISA's KEV catalog.

Is it being exploited? CISA KEV status

This is where reports conflict, so it’s worth being precise about what is and isn’t known as of 24 October 2026.

  • Attempts: yes. Amazon logged an attempt on 17 October, before the patch. Cloudflare reported attempts rising from thousands to millions around disclosure. watchTowr observed scanning and attempts via honeypots from 21 October.
  • Some CERTs say “exploited in the wild.” HKCERT wrote on 22 October that both CVEs are being exploited; NCSC-NL said it was investigating first signs of successful misuse.
  • Confirmed successful compromise: none published. In the sources reviewed up to 24 October, no successful breach had been publicly confirmed. watchTowr said circulating proof-of-concepts it saw did not achieve code execution, and VulnCheck reported at least one failed web-shell attempt. Fake and prank “PoCs” also circulated on GitHub.

CISA KEV: not listed (as of 24 Oct) — with a caveat

Neither CVE was in CISA’s Known Exploited Vulnerabilities catalog when this was last checked. CISA urged immediate updates and said organisations that can’t patch, or still run PHP 8.1 or older, should take PHP systems offline. But its “no exploitation observed” note reflects only CISA’s own visibility — not evidence that attempts aren’t happening. Exposure was large: around 1.57 million of 2.58 million internet-facing PHP hosts were still unpatched on 21 October.

The honest summary: heavily probed, not yet proven to have produced a public breach, and squarely worth patching now rather than waiting for KEV to catch up.

What a WordPress owner should do

You don’t need to understand allocator internals to act. The fix is the same regardless of mechanism: get a patched PHP build and restart PHP. Answer three questions and the checker below tells you where you stand — it runs entirely in your browser.

Interactive checker

Am I affected by PHP2Shell?

Runs in your browser · nothing is sent

  1. PHP version
  2. Server API
  3. Hosting
  4. Verdict

Find it in wp-admin under Tools › Site Health › Info › Server. Copy the whole number, e.g. 8.3.14.

Try:
  1. Find your PHP version in Tools › Site Health › Info › Server (it also shows your SAPI).
  2. Compare it with the fixed releases above. If you’re on managed or shared hosting, ask your host to confirm both CVEs are patched; if you run the server, follow how to check and update your PHP version.
  3. After updating, restart PHP-FPM / Apache / LiteSpeed — the old code stays in memory until workers restart — then re-check Site Health. If you were exposed and unpatched, rotate your secrets because of the 109619 memory-disclosure risk.

For the full checking, patching and “was I hacked?” workflow, see the main PHP2Shell and WordPress guide and our WordPress security guide.

Why these CVEs can't apply to Presscomet

Both bugs are in the PHP runtime. Presscomet is a WordPress-compatible platform — same wp-admin, block editor, permalinks and REST API — rebuilt to run on Node.js with a single SQLite file and no PHP runtime, so CVE-2026-109618, CVE-2026-109619 and the whole PHP-runtime class of bug don’t apply. That is a real reduction in attack surface, not a claim of being “unhackable”: Presscomet still has its own Node.js runtime, npm dependencies, admin login, SQLite and host OS to keep patched. It also doesn’t run PHP plugins — the common jobs are built in — and WooCommerce isn’t supported.

If a stack with no PHP to patch sounds appealing, check your site with the migration tool. It only reads your public pages and lists what would move over; it never changes anything on your current host.

Sources

Facts checked against these sources on October 24, 2026. Things change quickly; the vendor advisory always wins.

  1. [1]PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 security releases — PHP.net
  2. [2]GHSA-w8hw-w9fx-j79w (CVE-2026-109618, RCE via OOM corruption) — php-src on GitHub
  3. [3]GHSA-6wmf-4rv5-p3rp (CVE-2026-109619, RCE via stale global state) — php-src on GitHub
  4. [4]CVE-2026-109618 — NIST NVD
  5. [5]CVE-2026-109619 — NIST NVD
  6. [6]Two critical PHP flaws: find, mitigate and patch PHP2Shell (CVSS vector, SAPIs) — Qualys
  7. [7]PHP2Shell vulnerability updates (memory disclosure, triggers) — Imperva
  8. [8]PHP2Shell FAQ (affected versions, exploitation) — watchTowr
  9. [9]PHP2Shell exploitation started days before patches — SecurityWeek
  10. [10]CVE-2026-109618 / CVE-2026-109619 attack research — Horizon3.ai
  11. [11]AL26-026 Critical vulnerabilities impacting PHP — Canadian Centre for Cyber Security
  12. [12]Known Exploited Vulnerabilities catalog — CISA

Frequently asked questions

What is CVE-2026-109618?

CVE-2026-109618 is one of the two PHP vulnerabilities known collectively as PHP2Shell. The PHP project describes it as remote code execution via out-of-memory corruption: an out-of-memory condition interrupts PHP while a web request is only partly initialised, and the request clean-up then treats the unfinished data as valid. It is rated CVSS v4.0 9.2 (Critical) and can be triggered by an unauthenticated attacker. It was fixed on 21 October 2026.

What is CVE-2026-109619?

CVE-2026-109619 is the second PHP2Shell vulnerability. The PHP project describes it as remote code execution via stale global state: request-owned internal state survives after its memory is freed, so a later request handled by the same PHP worker can reuse the leftovers (a use-after-free). Besides code execution it can leak chunks of server memory, which may contain passwords, session tokens or API keys. It is also rated CVSS v4.0 9.2 and was fixed on 21 October 2026.

How severe are CVE-2026-109618 and CVE-2026-109619?

The PHP project rates both at CVSS v4.0 9.2, which is Critical. The vector describes a network-based attack needing no privileges and no user interaction, with high impact to confidentiality, integrity and availability. The 'high attack complexity / requirements' part reflects that success depends on memory layout and worker scheduling, which slows attackers down but does not make the bugs safe — they can simply send many attempts.

Which PHP setups are most at risk?

All PHP installations that serve web requests are affected — PHP-FPM, Apache mod_php, php-cgi, FrankenPHP and LiteSpeed. Apache mod_php is the highest risk, because a demonstrated attack on CVE-2026-109618 triggers from an unauthenticated request before any application code runs. PHP-FPM's startup behaviour blocks one path, but the session-lifecycle issue in 109619 was still validated under suitable conditions. CLI-only PHP (cron scripts, WP-CLI) isn't the attack path, but you should still patch the package.

Are CVE-2026-109618 and CVE-2026-109619 being exploited in the wild?

Exploitation attempts have been reported. Amazon logged an attempt on 17 October 2026, four days before the patch, and watchTowr and others observed scanning and attempts after disclosure; some national CERTs said both CVEs are being exploited. As of 24 October 2026 no successful compromise had been publicly confirmed in the sources reviewed, and some researchers said circulating proof-of-concepts did not achieve code execution. Treat it as actively targeted.

Are these CVEs in the CISA KEV catalog?

Not as of 24 October 2026. CISA urged organisations to update PHP immediately and advised taking PHP systems offline if they can't be patched or still run PHP 8.1 or older. One caveat worth noting: CISA's statement that it had observed no exploitation reflects only CISA's own visibility, not proof that attempts aren't happening.

Do CVE-2026-109618 and CVE-2026-109619 affect Presscomet?

No. Both CVEs are in the PHP runtime, and Presscomet has no PHP runtime — it runs the WordPress-compatible admin and sites on Node.js with a SQLite database. The whole PHP-runtime class of bug, including these two, does not apply. Presscomet still has its own software to keep patched (Node.js, its npm dependencies, its admin login, SQLite and the host OS), so it is not immune to vulnerabilities in general.

Run WordPress without a PHP runtime to patch.

Presscomet keeps your wp-admin, editor, URLs and content, and serves pages without PHP or MySQL. Check your site for free, then migrate in one click — your old site is only ever read.

Check my site