跪拜 Guibai
← All articles
PHP · OpenAI · AI Programming

PHP Ships Patches for Two Unauthenticated RCEs as OpenAI Coordinates Multi-Vendor Disclosure

By Behaviour ·
Read original on juejin.cn ↗ Google Translate ↗ Alt translation

An unauthenticated request can execute code in the PHP engine before any application logic runs, making default PHP-FPM and mod_php installations the attack surface. The patches are out, the exploit chain is public, and real probing started before release; treat this as an immediate upgrade, not a routine backport.

Summary

Two engine-level use-after-free bugs let an unauthenticated request run code before any application code executes. php.net names every PHP SAPI serving web requests: PHP-FPM, Apache mod_php, php-cgi, FrankenPHP, and LiteSpeed. mod_php is the worst case, with an official demonstration of a pre-application trigger. Tests on eleven PHP apps including WordPress, Drupal, Laravel, and Symfony confirmed pre-auth RCE, and the earliest vulnerable path reaches back to PHP 5.4.0's default configuration from 2012.

The patch race was tight. Exploit details leaked a day before release, Cloudflare observed real attacks six hours before release, and watchTowr confirmed RCE from the leaked material. The coordinated disclosure run by OpenAI's Patch the Planet effort brought in Wiz Research, Cloudflare, PHP maintainers, and government contacts; the Netherlands preemptively took several high-profile sites offline. For operators, the steps are: check FPM and mod_php versions separately, upgrade the relevant packages, restart the service, and if a distro package has not arrived, block multipart requests or disable upload-progress as a stopgap.

Takeaways
— PHP 8.5.12, 8.4.27, 8.3.36, and 8.2.35 are the fixed versions; any supported PHP below them is exposed.
— CVE-2026-109618 is 'RCE via OOM corruption'; CVE-2026-109619 is 'RCE via stale global state'. Both score CVSS v4.0 9.2.
— The bugs are engine-level, so application input filtering does not help; mod_php can be triggered before app code runs.
— Calif confirmed pre-auth RCE on WordPress, Drupal, Joomla, MediaWiki, Roundcube, Magento, phpMyAdmin, Nextcloud, Laravel, Symfony, and WHMCS under default configs.
— Cloudflare observed real attacks 6 hours before patch release; details had leaked the day before.
— Sansec's mitigations are nginx blocking of multipart/form-data, setting session.upload_progress.enabled=0, and a GET/HEAD-only entry; each has a real operational cost.
— OpenAI shipped a Codex skill that compares server PHP versions against the vulnerable ranges, useful for large fleets.
Conclusions

The 69.3% market-share figure describes PHP's reach as a server-side language, not the share of sites hit; conflating those two numbers is what made the damage sound universal.

The window between observed attacks and patch release was six hours; with details leaking a full day earlier, defenders who wait for distro packages instead of applying stopgaps are betting against the next timeline.

The AI-disclosure debate splits cleanly: human expertise selected targets and built the chain, and the model's real contribution was enumerating request-shape combinations that bypass two resource limits. Those are different claims about what AI can do.

An OOM issue that auditors flagged in 2024 was left unfixed because it was not proven exploitable. Proving it took a researcher with two decades of PHP memory-safety context, which makes 'not proven exploitable' a dangerous triage verdict.

Concepts & terms
use-after-free
A memory-corruption state where a program keeps using a pointer after the memory it points to has been freed. In this disclosure, stale state from a freed request is later consumed by the same PHP worker, turning memory corruption into code execution.
mod_php
The Apache module that embeds PHP into the web server process. Because PHP runs inside Apache's worker, a request can trigger engine-level memory corruption earlier than with PHP-FPM, which is why the disclosure calls mod_php the highest-risk SAPI.
PHP-FPM
PHP's FastCGI Process Manager, a common way to run PHP outside the web server. It is also in scope for these RCEs, and its long-running worker processes need a restart after a PHP binary upgrade to actually load the patched code.
Source: juejin.cn ↗ Google Translate ↗ Backup ↗