Skip to content

Response, New York. Noah Park: Check Point Patches Actively Exploited Management Server Path Traversal. Detection, Dallas. Ava Okello: Report Finds Nearly Half of Deployed Detections Need Attention Before SOCs Can Trust Them.

SOCtember

Always First. Fast SOC News.

Screenshot of the PHP project's Oct. 21, 2026 security advisory titled "Security advisory: Critical remote code execution vulnerabilities, update now," saying PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 fix two critical flaws and that the risk is highest for mod_php.
Screenshot: The PHP Group, php.net security advisory for CVE-2026-109618 and CVE-2026-109619, Oct 21, 2026 (fair use).

Response

PHP Patches Critical PHP2Shell Flaws That Let Unauthenticated Requests Run Code Before Any Application Loads, as Cloudflare Sees Attack Traffic and Unit 42 Counts 22.6 Million Exposed Instances

PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 fix CVE-2026-109618 and CVE-2026-109619, memory-handling bugs rated CVSS 9.2 that researchers turned into pre-authentication code execution on WordPress, Drupal and Joomla. CrowdStrike says a successful attempt can leave only one fatal error ending in "Unknown on line 0," and PHP says no setting replaces the update.

Noah Park, ResponseNew York6 min read

NEW YORK - The PHP project on Wednesday shipped emergency releases for two critical flaws in the language's core that can let an unauthenticated web request execute code on a server before any application code runs, and it told administrators that configuration changes will not fully protect them.

PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35 fix CVE-2026-109618 and CVE-2026-109619, which researchers have named PHP2Shell. Both carry a CVSS v4.0 score of 9.2. The PHP security team said all installations serving web requests are at risk, including PHP-FPM, Apache with mod_php, php-cgi, FrankenPHP and LiteSpeed. "We consider the risk highest for mod_php, with a demonstrated exploit where an unauthenticated request can trigger the attack before any application code runs," the advisory said. In its release notes, the project added: "There are no complete mitigations, updating is the only safe choice."

The disclosure did not stay quiet until the 14:00 UTC release. Cloudflare said the vulnerability "was leaked before the official release date and we observed attack traffic targeting our customers," and that it watched attackers mutate payloads to get around its rules. Cisco Talos said it had not seen the flaws exploited in the wild as of 14:00 UTC. Palo Alto Networks' Unit 42 said it had seen proof-of-concept code and that at least one European government had taken its website offline as a precaution.

Two bugs in how PHP cleans up after a failed request

The research came from Wiz Research, OpenAI Codex Security and Calif, working with the PHP security team, according to the coordinated disclosure site php2shell.com. The researchers said they demonstrated pre-authentication remote code execution against WordPress, Drupal and Joomla, and application-agnostic memory disclosure, and that affected releases date back to PHP 5.4.

CVE-2026-109618 covers out-of-memory handling that can interrupt PHP while internal request data is only partially initialized, so request cleanup then treats invalid data as valid. CVE-2026-109619 covers request-owned internal state that survives after its backing memory has been freed, so a later request on the same worker may use that stale state. The researchers said memory disclosure alone can expose passwords, authentication tokens, API keys and certificates belonging to other requests or the server, without the attacker ever running code.

Screenshot of GitHub security advisory GHSA-w8hw-w9fx-j79w for php-src, "RCE via OOM corruption," rated Critical 9.2 out of 10, listing affected versions below 8.2.35, 8.3.36, 8.4.27 and 8.5.12 and those four releases as patched.
Screenshot: The PHP Group, GitHub advisory GHSA-w8hw-w9fx-j79w for CVE-2026-109618, Oct 21, 2026 (fair use).

CrowdStrike, which reproduced the first bug, said exposure depends on configuration as well as version. The out-of-memory trigger must be reachable while PHP parses request data, which in practice means a server where memory_limit is less than four times post_max_size. PHP's shipped defaults, post_max_size of 8M and memory_limit of 128M, do not meet that condition for the URL-encoded path CrowdStrike demonstrated. Common production pairings such as 64M with 128M, or 100M with 256M, do. Because post_max_size can be set per directory in .htaccess or a virtual host, CrowdStrike said, a single site on shared hosting can put itself into the vulnerable configuration.

What the attack leaves behind

For responders, the hardest part is the evidence. CrowdStrike said worker processes stay stable, responses return HTTP 200 and application logs record nothing, because no application code ran. The only server-side artifact of a successful CVE-2026-109618 attempt, it said, is a generic fatal error in the web server log, such as "PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 3670048 bytes) in Unknown on line 0." "The in Unknown on line 0 is the tell: It confirms that no PHP file was ever executing," the company wrote. CVE-2026-109619 is a two-stage attack in which one request poisons a worker and a second uses the freed memory, CrowdStrike said.

CrowdStrike Falcon process tree showing apache2 running in the foreground spawning a dash shell that runs cat /etc/shadow, the post-exploitation chain CrowdStrike recorded for the PHP vulnerabilities.
Screenshot: CrowdStrike, Figure 1, exploitation chain of PHP vulnerabilities in the Falcon platform, Oct 21, 2026 (fair use).

The php2shell.com researchers listed other investigation signals: unexpectedly large or malformed PHPSESSID response cookies, unusual multipart requests followed by memory-limit errors or repeated HTTP 500 responses, and unexplained PHP worker crashes or restarts. None of those signals proves exploitation, they cautioned, and their absence does not prove a system is clean. Vendors published detection content alongside the release. CrowdStrike added a Falcon Next-Gen SIEM correlation rule for PHP memory exhaustion during request startup that keys on the "Unknown on line 0" marker. Corelight open-sourced a Zeek package with nine notice types, including PHP_Crash_Sequence, Multipart_Header_Flood, Large_Form_Key and Potentially_Affected_PHP_Version, plus three Suricata rules. Talos released Snort SIDs 67359 and 67360 in its community ruleset. Unit 42 said Threat Prevention signature 543004, available since Oct. 20, can help block the attacks.

Cloudflare said its free and paid WAF customers have been protected by default since 3:02 a.m. UTC on Oct. 21, about nine hours ahead of disclosure, and that it built a new full transaction detection capability that also inspects the origin's response. Cloudflare said customers should still patch and treat its rules as an additional layer of defense.

Scope of the patch job

Unit 42 said Cortex Xpanse had identified more than 22.6 million exposed instances potentially vulnerable to the two flaws. PHP 8.1 and older no longer receive updates from the PHP project, which published minimal source backports for PHP 7.4, 8.0 and 8.1 for teams that build from source. Talos estimated from open-source intelligence that about half of PHP systems will not receive a patch, and noted that PHP 8.2 security support ends Dec. 31, 2026.

CrowdStrike Falcon Exposure Management Applications view filtered to php, listing 96 items with version 8.3.33 installed on cloud hosts, used to identify vulnerable PHP versions.
Screenshot: CrowdStrike, Figure 2, identification of vulnerable PHP versions within Falcon Exposure Management, Oct 21, 2026 (fair use).

The Netherlands' National Cyber Security Centre warned that "updating host PHP does not necessarily update bundled PHP," and told organizations to check third-party images, appliances and embedded runtimes separately. The researchers stressed that updating WordPress, Drupal or any other application does not update the PHP runtime beneath it, and that Apache, PHP-FPM and any long-running PHP workers must be restarted after the upgrade.

What response teams should do now

  • Inventory every PHP runtime, starting with internet-facing web-serving SAPIs, and update to 8.5.12, 8.4.27, 8.3.36 or 8.2.35 or a vendor backport. Restart Apache, PHP-FPM and long-running workers afterward.
  • Check effective settings with php -i for memory_limit, post_max_size, upload_max_filesize and the loaded configuration file, including per-directory .htaccess and virtual host overrides.
  • Hunt web server error logs for "Allowed memory size" fatals ending in "in Unknown on line 0," and for multipart floods, oversized form field names and repeated HTTP 500 responses.
  • Watch endpoints for shells, web shells and credential reads spawned by apache2, php-fpm or other web server processes, since CrowdStrike said the outcome is visible even when the HTTP layer is not.
  • Where patching must wait, use the PHP advisory's interim measures, such as memory_limit=-1 that applications cannot override, a low post_max_size and session.upload_progress.enabled=0, then restart workers. PHP said these do not make an installation safe.
  • Because memory disclosure can leak secrets without code execution, rotate credentials, API keys and session secrets held by PHP workers on servers that ran vulnerable versions with exposed configurations.

Sources:


Noah Park covers incident response and blue-team operations for SOCtember from New York.

Related stories

Response desk