TI Mindmap HUB
← All Agentic Reports
CRITICAL TLP:WHITE October 22, 2026
php php2shell rce cve-2026-109618 cve-2026-109619 use-after-free memory-corruption zero-day-leak web-server wordpress drupal joomla ai-assisted-research embargo-break

πŸ›‘οΈ Threat Intelligence Report: PHP2Shell - Critical PHP Core RCE (CVE-2026-109618 & CVE-2026-109619)

Scope: all TI Mindmap HUB reports ingested in the last 3 days (2026-10-19 to 2026-10-22) that cite CVE-2026-109618 and/or CVE-2026-109619. The 13 reports retrieved cite both CVEs.

1. Reports Summary Table

The following table lists all 13 TI Mindmap HUB reports analyzed for this assessment, ordered by ingestion date (newest first).

# Title Publication Date Source Platform Link
1 PHP2Shell: Why organizations must patch critical PHP vulnerabilities now 2026-10-22 www.threatlocker.com View Report
2 PHP Foundation Says Chainguard Broke Security Embargo Ahead of Emergency Patches 2026-10-22 socket.dev View Report
3 PHP2Shell Exploitation: Two Critical PHP Flaws Explained 2026-10-22 www.recordedfuture.com View Report
4 PHP2Shell: Critical PHP RCE (CVE-2026-109618, CVE-2026-109619) 2026-10-22 sansec.io View Report
5 Critical RCE vulnerabilities in PHP (CVE-2026-109618, CVE-2026-109619) 2026-10-21 securelist.com View Report
6 Rapid Response: php2shell, Leaked Critical PHP Vulnerabilities (CVE-2026-109618 & CVE-2026-109619) 2026-10-21 www.huntress.com View Report
7 Sizing the PHP exposure window for CVE-2026-109618 and CVE-2026-109619 with VirusTotal 2026-10-21 blog.virustotal.com View Report
8 Proof-of-concept exploit released for PHP vulnerabilities (CVE-2026-109618, CVE-2026-109619) 2026-10-21 www.sophos.com View Report
9 PHP2Shell: AI uncovers critical RCE vulnerabilities affecting 70% of the Internet 2026-10-21 www.wiz.io View Report
10 Threat Brief: Critical Vulnerabilities in PHP: CVE-2026-109618, CVE-2026-109619 2026-10-21 unit42.paloaltonetworks.com View Report
11 PHP2Shell - Critical vulnerabilities in PHP (CVE-2026-109618, CVE-2026-109619): detection, analysis, and remediation 2026-10-21 securitylabs.datadoghq.com View Report
12 php2shell: Assessing Elastic detection coverage relevant to CVE-2026-109618 and CVE-2026-109619 2026-10-21 www.elastic.co View Report
13 Two critical RCEs in PHP core 2026-10-21 blog.talosintelligence.com View Report

2. Executive Summary

Overview

On 2026-10-21, the PHP project released out-of-band security updates (PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35) fixing two critical memory-safety vulnerabilities in the PHP engine: CVE-2026-109618 and CVE-2026-109619, collectively nicknamed PHP2Shell (or "php2shell"). Both are rated CVSS v4.0 9.2 (CWE-1419, Incorrect Initialization of Resource) and can enable unauthenticated remote code execution through a single crafted HTTP request, executing as the PHP/web-worker account before application code runs. Application-layer controls (authentication, WAF plug-ins, CMS maintenance mode) therefore cannot prevent exploitation.

The root cause is PHP's longjmp()-based fatal-error and out-of-memory (OOM) handling, which can leave request memory partially initialized (CVE-2026-109618) or leave global state pointing into freed request memory that a later request on the same worker reuses (CVE-2026-109619). Every PHP branch since 5.4.0 is reportedly affected; PHP 8.1 and older are end of life with no upstream fix (minimal source backports were provided for 7.4, 8.0 and 8.1 only). Exposure is enormous: Palo Alto Cortex Xpanse counted 22.6 million potentially exposed instances, and VirusTotal found about 5.1 million PHP-associated IPs, roughly 758,000 of which disclose an end-of-life version.

The disclosure was chaotic. Details of the CVEs leaked on 2026-10-20, a deleted video showing working exploits circulated, and Chainguard published patched images more than six hours before the coordinated release, triggering a public dispute with the PHP Foundation. Wiz demonstrated unauthenticated RCE against WordPress, Drupal and Joomla (Sansec lists 11 applications), and several sources report early attack attempts, although successful in-the-wild compromise is not confirmed and the functionality of public PoCs is disputed. The research was heavily AI-assisted (Wiz, OpenAI, Calif, Chainguard), signalling shrinking patch windows for core-runtime flaws.

Diagram: Attack Overview

 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ DISCLOSURE TIMELINE ─────────────────────────────┐
 β”‚ 2024        Quarkslab/OSTIF audit notices OOM root cause (theoretical)        β”‚
 β”‚ 08-11/15    Calif + OpenAI report unconditional RCE; PHP confirms PoC         β”‚
 β”‚ 10-20 15:00 CVE IDs leak (wrong CVSS 10.0) -> release pulled forward          β”‚
 β”‚ 10-20 20:00 Calif exploit video leaked/deleted -> public PoC development      β”‚
 β”‚ 10-21 02:29 Leaked archive reaches VirusTotal                                 β”‚
 β”‚ 10-21 07:41 Chainguard ships patched images (embargo break)                   β”‚
 β”‚ 10-21 07:43 Cloudflare observes first attack attempts, deploys WAF rules      β”‚
 β”‚ 10-21 ~14:00 PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 released                   β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚  INITIAL ACCESS (T1190) - unauthenticated    β”‚
        β”‚  crafted multipart/form-data / upload-       β”‚
        β”‚  progress request to ANY PHP endpoint        β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚  Force fatal error / OOM during request init β”‚
        β”‚  (longjmp leaves state half-initialized)     β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β–Ό                     β–Ό
     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
     β”‚ CVE-2026-109618            β”‚  β”‚ CVE-2026-109619                 β”‚
     β”‚ Partially-initialized data β”‚  β”‚ Stale global state -> UAF on    β”‚
     β”‚ used in cleanup; upload-   β”‚  β”‚ next request in same worker     β”‚
     β”‚ progress unserializer UAF  β”‚  β”‚ (fatal-error backtrace UAF,     β”‚
     β”‚ + worker memory disclosure β”‚  β”‚  OPcache type confusion)        β”‚
     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β–Ό
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β”‚ RCE as web-worker user BEFORE app code runs  β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
        β–Ό                       β–Ό                       β–Ό
 β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
 β”‚ Shell / curl β”‚   β”‚ Webshell + cron /   β”‚   β”‚ Secrets from memory β”‚
 β”‚ payload pull β”‚   β”‚ systemd / SSH key   β”‚   β”‚ & files (.env, IMDS,β”‚
 β”‚ reverse shellβ”‚   β”‚ persistence         β”‚   β”‚ K8s tokens, TLS key)β”‚
 β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Vulnerability Profile

Attribute CVE-2026-109618 CVE-2026-109619
Advisory GHSA-w8hw-w9fx-j79w GHSA-6wmf-4rv5-p3rp
CVSS v4.0 9.2 (vendor-rated; NVD v3 score not yet published) 9.2
CWE CWE-1419 CWE-1419
Core issue OOM longjmp() leaves request memory uninitialized; cleanup acts on invalid data Global state keeps pointing into freed request memory; later request reads/branches on it
Confirmed primitives Upload-progress unserializer UAF; remote worker-memory disclosure via PHPSESSID cookie Fatal-error backtrace UAF (PHP 8.5); OPcache cross-worker type confusion
Impact Unauthenticated RCE + memory disclosure (passwords, tokens, API keys, TLS keys) Unauthenticated RCE
Published 2026-10-21 2026-10-21
Affected PHP 5.4.0 to 8.5.11 (fixed in 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12) Same
TI Mindmap HUB risk score 37.5 37.5
CISA KEV No No

Exploitation Status and Cross-Source Discrepancies

Topic Sources reporting Assessment
Exploitation in the wild Sansec, Recorded Future, Huntress ("emerging attacks outside our telemetry"), Socket/Chainguard, Cloudflare (via Sansec/VT) report attack attempts. Talos, Sophos, Wiz, Elastic, Datadog, Unit 42, Securelist report none confirmed. Attempts likely; successful compromise unconfirmed. Treat as actively targeted.
Public PoC PHP2Shell tool credited to Calif, a leaked demo video and X claims. PHP Foundation had not verified a functional public exploit at release time; Recorded Future calls several PoCs unverified. Weaponization expected to be fast regardless.
Configuration workarounds Talos and VirusTotal give partial mitigations (session.upload_progress.enabled=0, memory_limit=-1). Datadog states session.upload_progress.enabled=0 does not prevent exploitation. Mitigations reduce only known paths; patching is the only complete fix.
Unsupported versions Securelist/Huntress/Elastic: source backports exist for 7.4, 8.0, 8.1. Talos: no patch for 8.1 and older. Backports are minimal source patches; verify vendor/LTS builds.
Severity score Early leaks claimed CVSS 10.0. Official vendor rating is 9.2 (v4.0).

Attribution & Threat Actor Profile

Threat actor: none attributed. All 13 reports list zero associated threat actors. Sansec tags the public exploit as the PHP2Shell malware/tool.

Discovery credit: Calif (RCE proof of concept, exploit video), OpenAI (independent report of the root cause on 2026-08-11), Wiz Research (additional attack vectors; used Wiz Atlas, Gemini 4 Argon and GPT-5.6 Sol), Chainguard (independent rediscovery with a test harness and a frontier AI model), Quarkslab (2024 OSTIF audit, funded by the Sovereign Tech Agency).

Likely adversaries (assessment): Talos warns that state-sponsored operators, ransomware groups and other financially motivated actors routinely weaponize critical RCEs, and compares the potential cascade to Log4Shell. VirusTotal notes about 5,700 PHP hosts with five or more detections, including a NOX Stealer (BOMBAY) panel, indicating criminal infrastructure is itself exposed.


3. Technical Details

3.1 Vulnerability & Exploit Analysis

CVE-2026-109618 - OOM corruption. When memory allocation fails while PHP prepares request data (typically while parsing RFC 1867 multipart/form-data, before module initialization), longjmp() aborts the request and leaves internal data only partially initialized. Request cleanup then treats the invalid data as valid. Datadog reproduced an unauthenticated HTTP POST against PHP 8.5.11 where the cleanup routine executed an attacker-selected command; the request never reached the target application, so even a script returning a static response exposes the path. Huntress reports PHP validated full RCE against mod_php with default input and memory limits on a standard prefork setup.

Memory disclosure primitive (Wiz, Sansec). Session upload-progress processing publishes a session identifier; an induced OOM leaves a dangling pointer. A later multipart request on the same worker makes PHP treat reclaimed memory as a string and URL-encode it into the PHPSESSID response cookie, leaking attacker-sized slices of live worker memory (passwords, tokens, API keys, certificates, other users' data, potentially TLS private keys). session_start() is not required.

CVE-2026-109619 - stale global state. PHP keeps global pointers into request memory; after a fatal error the heap is destroyed without resetting them. The next request handled by the same worker reads or branches on the stale state before normal initialization. Confirmed paths:

Exploit reliability. Datadog notes the exploit does not rely on crashes or brute force: a calibrated memory layout and a few preparatory requests bypass ASLR, and a successful exploit may not crash the worker, so crash-based monitoring is unreliable. Wiz believes more variants exist because the problem is rooted in PHP's fatal-error cleanup architecture; the upstream fix (commit 31c0ea7d7ff1d1fccb6492e52dab544011628065) addresses the root cause and known variants.

Applications demonstrated (Sansec, Securelist, Wiz). Magento 2.4.9, WordPress 7.1.2, Drupal 11.4.3, Joomla 6.1.4, MediaWiki 1.46.2, Roundcube 1.7.4, phpMyAdmin 5.2.3, Nextcloud 35.0.1, Laravel 13.11, Symfony 8.1, WHMCS, phpBB. These are examples; any PHP endpoint is a viable trigger.

3.2 Techniques & Attack Phases

  1. Reconnaissance (T1595, T1592, T1046). Fingerprint PHP through X-Powered-By, PHPSESSID, framework headers and apps (only ~1.1M of 3.8M PHP IPs disclose a version, so banner-only hunting underestimates exposure). SSH banners, LiteSpeed/PHP 8.2.34 profiles and origin IPs behind WAFs help target selection.
  2. Preparation. Send preparatory multipart requests to shape worker heap layout and, for CVE-2026-109618, leak worker memory through the PHPSESSID cookie to defeat ASLR.
  3. Exploitation (T1190). Trigger an allocation failure/fatal error (for example by exceeding memory_limit), then route the follow-up request to the same persistent worker to reclaim freed memory and hijack control flow. Apache mod_php is the highest-risk configuration; PHP-FPM, php-cgi, FrankenPHP and LiteSpeed/lsphp are also affected.
  4. Execution (T1059). Commands run as the web worker (www-data, apache, nginx, lsphp). Elastic expects validation via id, whoami, hostname, uname -a, then sudo -l, SUID and getcap -r / enumeration.
  5. Payload staging (T1105, T1140). curl/wget downloads, curl ... | bash, base64 -d, openssl enc -d, xxd -r; interpreters (Python, Perl, Ruby, Node.js, PHP CLI) allow shell-less execution.
  6. Persistence (T1505.003, T1053.003, T1098.004, T1136). PHP webshells (.php, .phtml, image polyglots, avatar.php.jpg), cron jobs, systemd units, SSH authorized_keys, new accounts.
  7. Credential access and exfiltration (T1552, T1003, T1041). Memory disclosure of secrets; reads of .env, ~/.aws/credentials, /etc/shadow, Kubernetes service-account tokens and the IMDS endpoint 169.254.169.254.
  8. Command and control (T1095 / T1071). Reverse shells via /dev/tcp, nc, socat, mkfifo, pty.spawn, fsockopen.

Only steps 1 to 3 have report-backed evidence of demonstrated research; steps 4 to 8 are expected post-exploitation behavior per Elastic, Huntress and Recorded Future, not confirmed campaigns.

3.3 Exposure & Disclosure Infrastructure

Global exposure (VirusTotal, Unit 42):

Metric Value
PHP-associated IPs (VirusTotal) ~5.1M (3.8M with open ports)
IPs disclosing a PHP version ~1.1M (about 1 in 5)
Supported branches 8.2 to 8.5 ~272,000
End-of-life 5.4 to 8.1 ~758,000 (PHP 7.4: ~187,000; PHP 5.4: ~119,000)
Latest pre-fix builds (8.2.34 / 8.3.35 / 8.4.26 / 8.5.11) ~85,000
Web servers Apache ~2.9M, nginx ~1.48M, LiteSpeed ~90,000
Applications WordPress ~538,000, Laravel ~141,000, Nextcloud ~107,000, Roundcube + phpMyAdmin ~25,000
Co-exposed services SSH ~394,000, MySQL ~233,000, RDP ~68,000
Cortex Xpanse potentially exposed instances >22.6M (at least one European government took its site offline as a precaution)
US share ~920,000 PHP hosts with open ports

Talos estimates about half of deployed PHP systems sit on branches that will not receive upstream fixes; PHP 8.2 itself reaches end of support on 2026-12-31.

Supply-chain and ecosystem notes. Embedded PHP runtimes in appliances, control panels (cPanel, Plesk), vendor products and containers are in scope. The volunteer-run rpms.remirepo.net repository was not expected to ship fixed packages on release day. Chainguard's early patched images enabled patch diffing by attackers while most users could not update.

Disclosure governance. The root cause was noticed in 2024 but fixes stalled over compatibility, DoS risk and a consensus-based decision process with few engine experts. PHP plans majority-based security decisions, faster escalation to Foundation leadership and additional funding.


4. Detection Opportunities

4.1 Network and Request-Level Detections

4.2 Host and Process Detections

4.3 Vendor Detection Coverage

Vendor Coverage
Elastic Endpoint "Payload Execution by Web Server" (can kill); SIEM "Suspicious/Unusual Command Execution via Web Server", "Suspicious/Unusual (Child) Execution via Web Server", "Payload Downloaded via Curl or Wget by Web Server", "Unusual File Creation via Web Server", "File with High Entropy Created by Web Server" (Elastic Stack 9.3.0+ and file.Ext.entropy telemetry), "Web Shell Detection: Script Process Child of Common Web Processes"
Kaspersky KEDR: creating_windows_shell_from_a_web_servers_process, possible_web_shell_creating_via_exploit, spawning_process_from_webserver_more_filters_linux, webserver_interpreter_execution_linux, executable_file_in_www_folder; KATA: Exploit.CVE-2026-109618.HTTP.C&C, Exploit.CVE-2026-109619.HTTP.C&C; KES: PDM:Exploit.Linux.Generic, PDM:Exploit.Win32.Generic
Cisco Talos SNORT SIDs 67359, 67360 (Community Ruleset and subscriber)
Palo Alto Networks Threat Prevention signature 543004 (Advanced Threat Prevention Plus, Frontier Virtual Patching, from 2026-10-20); Cortex Xpanse PHP Attack Surface Rule; Cortex Cloud/Prisma Cloud version detection; Cortex XDR/XSIAM post-exploitation analytics
Datadog Workload Protection detects PHP applications spawning shells
Cloudflare Emergency WAF rules for known payloads (2026-10-21); not a substitute for patching
Sophos SophosLabs developing detections; internal exposure assessment ongoing
Huntress Process-ancestry hunting guidance; Florian Roth's process-watcher as interim Linux visibility

4.4 Inventory and Exposure Discovery

4.5 Retrospective Hunt Window

Start no later than 2026-10-20 15:00 UTC (first CVE leak) and at minimum from 2026-10-21 07:43 UTC (first observed attack attempts, per Sansec) until every worker is patched and restarted. Patching does not remove pre-existing webshells or persistence.


5. Conclusion

PHP2Shell is among the most consequential web-runtime vulnerabilities of the year: two pre-authentication, application-independent RCE flaws in the engine behind a large share of the web, with a leaked and publicly circulating exploit, an unusually wide unsupported-version population, and a compressed disclosure window. Key takeaways across all 13 sources:

  1. Patch the runtime, not the application. Fixed versions are PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. CMS or plug-in updates, maintenance modes and application WAF logic do not help; restart all workers, services and containers after updating.
  2. End-of-life PHP is the largest risk pool. PHP 8.1 and older (about 758,000 version-disclosing IPs plus many hidden ones) have no upstream fix. Use verified vendor/LTS backports or migrate; PHP 8.2.35 reaches end of life on 2026-12-31, so it is only a short-term target.
  3. Mitigations are partial. session.upload_progress.enabled=0, memory_limit=-1 set outside application control, fatal_error_backtraces=0 (PHP 8.5), low post_max_size, blocking multipart/form-data, WAF and ZTNA/VPN isolation reduce known paths only. RLIMIT_AS/RLIMIT_DATA should not be used because they trigger the vulnerable path; ini_set() and .user.ini are too late in the request.
  4. Assume exposure before patching. Leaks began 2026-10-20 and attack attempts were seen before fixes were public. Rotate passwords, session secrets, API keys and TLS private keys on exposed hosts even if no webshell is found, because CVE-2026-109618 can leak secrets without leaving artifacts.
  5. Detect behavior, not signatures. No vendor published atomic IOCs. Web-server processes spawning shells, interpreters or downloaders, and webshell file creation, are the durable signals.
  6. Disclosure and AI trends. Embargo failures, leaks and AI-accelerated discovery shorten time-to-exploit; organizations need hours-level patch pipelines for core runtimes.

Recommended Immediate Actions:


6. Indicators of Compromise (IoC List)

None of the 13 reports published malicious IPs, domains, URLs, hashes, filenames or payload signatures tied to exploitation of these CVEs. The indicators below are vulnerability, version, vendor-detection and behavioral artifacts, plus one contextual infrastructure item.

6.1 Vulnerability & Advisory Identifiers

Type Value Description
CVE CVE-2026-109618 OOM corruption / upload-progress unserializer UAF / memory disclosure
CVE CVE-2026-109619 Stale global state: fatal-error backtrace UAF, OPcache type confusion
GHSA GHSA-w8hw-w9fx-j79w php-src advisory for CVE-2026-109618
GHSA GHSA-6wmf-4rv5-p3rp php-src advisory for CVE-2026-109619
Git commit 31c0ea7d7ff1d1fccb6492e52dab544011628065 Upstream fix (per Elastic)
Exploit/tool name PHP2Shell / php2shell Public exploit combining both CVEs (credited to Calif; Sansec tags as malware)

6.2 Vulnerable and Fixed PHP Versions

Branch Vulnerable Fixed
8.5 up to 8.5.11 8.5.12
8.4 up to 8.4.26 8.4.27
8.3 up to 8.3.35 8.3.36
8.2 up to 8.2.34 8.2.35 (EOL 2026-12-31)
8.1, 8.0, 7.4 all No upstream release; minimal source backports only
5.4 to 7.3 all No fix

6.3 Network Indicators

Type Value Description
IPv4 5.175.221[.]206:8443 NOX Stealer (BOMBAY) panel, nginx 1.24.0 / PHP 8.3.33. Contextual criminal infrastructure exposing PHP, not evidence of CVE exploitation
Traffic pattern multipart/form-data POST to any PHP endpoint Known trigger; PHP parses it before application code
Response artifact Oversized/malformed/binary PHPSESSID Set-Cookie Possible memory-disclosure exploitation
Header X-Powered-By: PHP/<version>, PHPSESSID Fingerprinting artifacts used by scanners
Network IDS Snort SIDs 67359, 67360; PAN signature 543004; Kaspersky Exploit.CVE-2026-109618.HTTP.C&C, Exploit.CVE-2026-109619.HTTP.C&C Vendor detection identifiers

6.4 Behavioral / Host Artifacts

Type Value Description
Process lineage php-fpm, php-cgi(.exe), lsphp, frankenphp, apache2, httpd, nginx -> sh/bash/dash/zsh/cmd.exe/powershell.exe/python/perl/ruby/node/curl/wget/nc/socat/certutil.exe Web worker spawning shell, interpreter or downloader
Command line /dev/tcp/, mkfifo, fsockopen, pty.spawn, base64 -d, openssl enc -d, xxd -r, curl ... | bash, wget -qO- ... | sh Reverse shell, decoding and staging
Recon commands id, whoami, hostname, uname -a, ipconfig, sudo -l, getcap -r /, SUID search, cat /etc/os-release Post-exploitation discovery
File paths New *.php, *.phtml in web roots; *.php.jpg polyglots; scripts in /tmp, /var/tmp, /dev/shm Webshells and staged payloads
Persistence New cron entries, systemd units, ~/.ssh/authorized_keys, new accounts, scheduled tasks Post-exploitation persistence
Credential targets .env, ~/.aws/credentials, /etc/passwd, /etc/shadow, /var/run/secrets/kubernetes.io/, 169.254.169.254 Secret theft indicators
Log signals PHP OOM / allocation-failure errors at request start, worker segfaults/restarts, OPcache errors Exploit attempts or successful corruption

6.5 Configuration Indicators

Setting Meaning
session.upload_progress.enabled = On (default since 5.4.0) Exposes the known upload-progress paths
memory_limit finite and app-overridable Allows an attacker to force OOM; mitigation is memory_limit=-1 set where apps cannot override it (monitor RAM)
fatal_error_backtraces = On (PHP 8.5) Exposes the fatal-error backtrace UAF path
expose_php = Off Hides version only; does not mitigate

6.6 Affected Packages and Deployment Types

Component Notes
PHP-FPM, Apache mod_php, php-cgi, FrankenPHP, LiteSpeed/lsphp All web-serving configurations; mod_php highest risk
WordPress, Drupal, Joomla, Magento, MediaWiki, Roundcube, phpMyAdmin, Nextcloud, Laravel, Symfony, WHMCS, phpBB, Shopware, WooCommerce Demonstrated or exposed through the PHP runtime
cPanel, Plesk, vendor appliances, Windows products with bundled PHP, containers Embedded runtimes require vendor-supplied fixes
Chainguard PHP images Patched images published 2026-10-21 07:41 UTC (embargo dispute)
rpms.remirepo.net Fixed packages not available on release day

7. MITRE ATT&CK Techniques

Report-supported techniques are marked (R); analytical mappings for expected post-exploitation are marked (A).

Technique ID Technique Name Tactic Description
T1595 Active Scanning Reconnaissance (R) Internet-wide scanning for PHP hosts; VirusTotal and Sansec expect rapid automated scanning.
T1592 Gather Victim Host Information Reconnaissance (R) Fingerprinting PHP version, web server and OS via headers, cookies and SSH banners.
T1046 Network Service Scanning Discovery (R) Co-exposed SSH, MySQL, RDP service profiling.
T1190 Exploit Public-Facing Application Initial Access (R) Unauthenticated crafted multipart/upload-progress request triggers OOM/stale-state corruption in the PHP engine. Cited by 11 of 13 reports.
T1059 Command and Scripting Interpreter Execution (R) Code runs as the PHP worker and spawns shells or interpreters.
T1059.004 Command and Scripting Interpreter: Unix Shell Execution (R) Shell spawned from php-fpm/apache2 workers (Elastic, Huntress).
T1059.006 Command and Scripting Interpreter: Python Execution (A) Python, Perl, Ruby, Node.js and PHP CLI used for shell-less payload execution.
T1505.003 Server Software Component: Web Shell Persistence (R) PHP webshells dropped into web-accessible directories.
T1053.003 Scheduled Task/Job: Cron Persistence (A) Cron persistence after RCE (Elastic, Huntress).
T1098.004 Account Manipulation: SSH Authorized Keys Persistence (A) Key insertion for persistent access (Elastic).
T1136 Create Account Persistence (A) New local accounts; flagged by Elastic as a coverage gap.
T1068 Exploitation for Privilege Escalation Privilege Escalation (A) sudo -l, SUID and capabilities enumeration followed by escalation.
T1082 System Information Discovery Discovery (R) uname -a, hostname, cat /etc/os-release.
T1033 System Owner/User Discovery Discovery (R) id, whoami as execution validation.
T1105 Ingress Tool Transfer Command and Control (R) curl/wget second-stage retrieval, curl ... | bash.
T1140 Deobfuscate/Decode Files or Information Defense Evasion (R) base64 -d, openssl enc -d, xxd -r payload decoding.
T1095 Non-Application Layer Protocol Command and Control (R) Reverse shells via /dev/tcp, nc, socat, named pipes.
T1552.001 Unsecured Credentials: Credentials In Files Credential Access (R) .env, AWS credentials, K8s tokens read by the web worker.
T1552.005 Unsecured Credentials: Cloud Instance Metadata API Credential Access (R) Access to 169.254.169.254.
T1003 OS Credential Dumping Credential Access (A) Secrets recovered from worker process memory (Recorded Future interpretation).
T1041 Exfiltration Over C2 Channel Exfiltration (A) Memory contents returned in HTTP response cookies; data theft after RCE.
T1078 Valid Accounts Defense Evasion / Persistence (A) Reuse of stolen tokens, API keys and admin credentials.

Report generated by TI Mindmap HUB - Cross-source Threat Intelligence Analysis Analysis date: 2026-10-22 | Sources analyzed: 13 | Classification: TLP:WHITE