Patch the runtime.
Install a fixed PHP build. Replace every worker and verify the runtime serving real requests.
Open the PHP patch guideTwo vulnerabilities.
A direct path to your runtime.
Unauthenticated remote code execution in PHP core. Understand the exposure, patch your runtimes, and reduce risk where an immediate upgrade is impossible.
Start with a patched runtime. Then verify controls, improve visibility, and explore the evidence.
Install a fixed PHP build. Replace every worker and verify the runtime serving real requests.
Open the PHP patch guideWhen patching is impossible, apply scoped controls at the PHP runtime, web server, and edge.
Explore compensating controlsConnect web logs, PHP errors, process activity, and WAF events to investigate exploitation.
Improve detection and monitoringUse curl checks and reviewed labs. Understand which results establish exposure and which do not.
Review exposure checks and PoCsTrace the guidance to PHP advisories, researchers, public repositories, and infrastructure docs.
Browse advisories and referencesExplore the published vulnerability metrics and calculate how a different base vector changes severity.
Explore the CVSS calculatorThese flaws reach beyond session upload progress. A single configuration toggle cannot close every attack path.
A failed allocation can interrupt request initialization. Cleanup can then use incomplete internal data as though it were valid, opening a route to code execution.
A worker can retain references to memory released by an earlier request. A subsequent request can encounter that stale state, leading to disclosure or code execution.
Sources: PHP: OOM advisory · PHP: state-lifecycle advisory
Two failure modes in PHP’s request lifecycle, with exact excerpts from the upstream runtime changes.
An allocation can fail while internal request data is only partly initialized. An immediate bailout skips the rest of that operation; shutdown can then encounter the unfinished state.
Removed: - zend_bailout();
Removed: - exit(1);
… intervening diff lines omitted …
Added: + EG(delayed_oom).state = ZEND_OOM_STATE_PENDING;
Added: +
Added: + zend_atomic_bool_store_ex(&EG(vm_interrupt), true);
The advisory confirms pre-application exploitation on Apache mod_php. This excerpt illustrates the allocator redesign; the complete update also changes callers, parsers, and extensions.
A worker can keep global references to an earlier request’s freed memory. A later request can use those references before initialization replaces them. The producer and consumer must run in the same worker.
Added: + ZVAL_UNDEF(&EG(last_fatal_error_backtrace));
Added: + EG(record_errors) = false;
Added: + EG(num_errors) = 0;
Added: + EG(errors) = NULL;
Added: + EG(error_handling) = EH_NORMAL;
Added: + EG(exception) = NULL;
This is one state family. The full patch also changes session and extension lifecycle handling. Disabling a single session feature only removes selected attack paths.
These are explanatory excerpts from one branch’s fix, with omitted lines identified. They are not a standalone patch. Install the complete fixed release or vendor-confirmed backport; PHP INI settings only reduce selected attack paths.
Verified against commit-pinned upstream files on 2026-10-21. Fix & provenance · Excerpt verification record. Zend Engine source excerpts © Zend Technologies Ltd.; Zend Engine License 2.00.
Explore the Common Vulnerability Scoring System (CVSS) base metrics behind both PHP2Shell advisories.
Both CVE-2026-109618 and CVE-2026-109619 carry this same published score and vector.
OOM advisory ↗State-lifecycle advisory ↗AV:N / PR:N / UI:N describe a network attack requiring neither prior privileges nor another user’s participation. VC:H / VI:H / VA:H capture severe impact to the vulnerable system.
AC:H / AT:P capture complexity and prerequisites: PHP’s advisories describe exploit reliability depending on the runtime and, for stale state, requests reaching the same worker. Those constraints do not remove the need to patch.
SC:N / SI:N / SA:N are the advisories’ subsequent-system impact values, not a guarantee that your surrounding infrastructure is isolated.
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:NChange the inputs to see a hypothetical CVSS v4.0 base score (CVSS-B). This does not change PHP’s published 9.2 rating. Threat and Environmental metrics are not included here; use the full FIRST calculator to model those factors.
A severity score is not a test for exposure or compromise. A lower hypothetical score does not make an unpatched PHP deployment safe. Patch and verify the running runtime.
Scoring uses FIRST’s CVSS v4.0 implementation, served locally. Specification · Calculator & source · BSD-2-Clause license. CVSS is owned by FIRST.Org, Inc. and used by permission.
| PHP branch | First fixed release | Action |
|---|---|---|
| 8.5 | 8.5.12 | Update to this release or newer |
| 8.4 | 8.4.27 | Update to this release or newer |
| 8.3 | 8.3.36 | Update to this release or newer |
| 8.2 | 8.2.35 | Update; plan a supported-branch migration |
| 8.1 and older | End of life | Move to a supported branch or verify a complete vendor backport |
Vendor packages may carry a backport under an older version number. Confirm coverage for both CVEs in the package advisory. PHP release advisory ↗
The affected component is PHP itself. Update the PHP runtime beneath the application, including bundled runtimes and container images, then replace running workers.
It reduces confirmed session-related exposure. It does not repair the broader memory and lifecycle defects, and is not complete protection against either vulnerability class.
A WAF can block selected request patterns. Other paths, parser differences, inspection limits, and direct access to the origin can leave exposure. Keep the runtime upgrade as the remediation goal.
These versions remain end of life. Some vendors provide backported fixes, and PHP published exceptional minimal source backports for 7.4, 8.0 and 8.1. That does not restore ongoing support. Plan a supported-branch upgrade.