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
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) | Risk | Why |
|---|---|---|
| Apache mod_php | Highest | A demonstrated attack on CVE-2026-109618 triggers from an unauthenticated request before any application code runs. |
| PHP-FPM | Affected | Its startup behaviour blocks one out-of-memory path, but the session-lifecycle issue in 109619 was validated under suitable conditions. |
| php-cgi · FrankenPHP · LiteSpeed | Affected | All serve web requests through the PHP runtime, so all are in scope. Patch and restart. |
| CLI only (cron, WP-CLI) | Not the attack path | Command-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 branch | Vulnerable | Fixed |
|---|---|---|
| 8.5 | below 8.5.12 | 8.5.12 |
| 8.4 | below 8.4.27 | 8.4.27 |
| 8.3 | below 8.3.36 | 8.3.36 |
| 8.2 | below 8.2.35 | 8.2.35 (EOL 31 Dec 2026) |
| 8.1 · 8.0 · 7.4 | all | No official binary — source backports plus distro/LTS builds only |
| 7.3 and older | all (believed back to 5.4) | No upstream fix — upgrade PHP |
A low version number isn’t always unpatched
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.
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.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.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.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.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.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 your PHP version in Tools › Site Health › Info › Server (it also shows your SAPI).
- 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.
- 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]PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 security releases — PHP.net
- [2]GHSA-w8hw-w9fx-j79w (CVE-2026-109618, RCE via OOM corruption) — php-src on GitHub
- [3]GHSA-6wmf-4rv5-p3rp (CVE-2026-109619, RCE via stale global state) — php-src on GitHub
- [4]CVE-2026-109618 — NIST NVD
- [5]CVE-2026-109619 — NIST NVD
- [6]Two critical PHP flaws: find, mitigate and patch PHP2Shell (CVSS vector, SAPIs) — Qualys
- [7]PHP2Shell vulnerability updates (memory disclosure, triggers) — Imperva
- [8]PHP2Shell FAQ (affected versions, exploitation) — watchTowr
- [9]PHP2Shell exploitation started days before patches — SecurityWeek
- [10]CVE-2026-109618 / CVE-2026-109619 attack research — Horizon3.ai
- [11]AL26-026 Critical vulnerabilities impacting PHP — Canadian Centre for Cyber Security
- [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.
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.
Keep reading
- SecurityPHP2Shell and WordPress: are you affected, and how do you fix it?
Two critical bugs in PHP itself put almost every WordPress site on an affected runtime until the host patches it. Here’s what happened in plain English, a checker that tells you whether you’re affected, and step-by-step fixes for every kind of hosting.
- HostingIs your WordPress host patched for PHP2Shell? What to ask (with an email template)
On most WordPress sites you can’t patch PHP yourself — your host has to. Here’s who is responsible on each kind of hosting, the four questions that get you a real answer, and a ready-to-send email.
- SecurityHow to check and update your PHP version in WordPress (2026)
Your PHP version decides whether your WordPress site still gets security fixes. Here’s how to find it in under a minute, what’s still supported, and a safe way to upgrade without breaking anything.