CVSS v4.0: 9.2 CRITICAL ADVISORY

CVE-2026-109618: PHP Core OOM Memory State Corruption & RCE

Comprehensive security advisory for CVE-2026-109618 (PHP2Shell): affected PHP versions matrix, root cause in Zend OOM handling, and emergency mitigation.

Check Your Server Vulnerability Status

Verify if your specific PHP-FPM / CLI build is affected by CVE-2026-109618.

Launch Version Checker →

Vulnerability Attributes & Classification

CVE Identifier
CVE-2026-109618
Threat Name
PHP2Shell
Vulnerable Component
main/rfc1867.c (ZEND_HAS_OOM)
Default Exposure
Vulnerable by Default (session.upload_progress.enabled = On)
Attack Vector
Network / Remote (Unauthenticated HTTP POST)
Official Fix
commit 1d7dec1 (Arnaud Le Blanc & Ilija Tovilo)

Affected & Secure PHP Versions Matrix

Complete breakdown of PHP runtime versions vulnerable to CVE-2026-109618. Systems running unpatched builds must execute emergency remediation.

PHP Branch Vulnerability Status Patched Version Mitigation Action
PHP 8.5Patched Upstream8.5.12Upgrade to 8.5.12+
PHP 8.4Patched Upstream8.4.27Upgrade to 8.4.27+
PHP 8.3Patched Upstream8.3.36Upgrade to 8.3.36+
PHP 8.2Patched Upstream8.2.35Upgrade to 8.2.35+
PHP 8.1 (EOL)Vulnerable (Unpatched)NoneApply backport commit 1d7dec1 or disable upload_progress
PHP 7.0–8.0Vulnerable (Unpatched)NoneMust set session.upload_progress.enabled = Off
PHP 5.4–5.6Vulnerable (Introduced)NoneMust set session.upload_progress.enabled = Off

Technical Root Cause & Mechanics

CVE-2026-109618 stems from an Out-Of-Memory (OOM) handling flaw inside main/rfc1867.c. When processing multipart/form-data POST streams, an induced memory allocation failure trips a longjmp bailout. Because internal parser structures are left in an incomplete state without zeroing global pointer references, subsequent teardown handlers dereference freed heap chunks, culminating in controlled memory corruption.

The flaw triggers before user-space application code ever executes. Application-layer filters, WordPress plugins (Wordfence/Sucuri), and Laravel middleware are physically bypassed because the core C parser handles the stream first.

Step-by-Step Emergency Remediation

Method 1: One-Line Configuration Workaround (Zero Downtime)

Disable upload progress tracking in your global php.ini across CLI and FPM pools:

session.upload_progress.enabled = Off

Method 2: Reload Worker Daemons

Reload the PHP-FPM service to flush running worker pools:

sudo systemctl reload php*-fpm || sudo systemctl restart apache2

Related Guides & Documentation