π‘οΈ 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:
- Fatal-error backtrace UAF (PHP 8.5,
fatal_error_backtraces): a diagnostic emitted early in the next request dereferences the dangling backtrace reference. Wiz turned this into controlled corruption and unauthenticated RCE against Drupal. - OPcache type confusion: an allocation failure during persistence advances the per-worker pointer-map frontier but not the shared one, so another worker assigns a different object type to the same slot and corrupts shared OPcache state. Used in a WordPress RCE chain.
- Upload-progress unserializer UAF (stale unserialization state), chained with memory disclosure to defeat ASLR.
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
- 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. - Preparation. Send preparatory multipart requests to shape worker heap layout and, for CVE-2026-109618, leak worker memory through the
PHPSESSIDcookie to defeat ASLR. - 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. Apachemod_phpis the highest-risk configuration; PHP-FPM, php-cgi, FrankenPHP and LiteSpeed/lsphp are also affected. - Execution (T1059). Commands run as the web worker (
www-data,apache,nginx,lsphp). Elastic expects validation viaid,whoami,hostname,uname -a, thensudo -l, SUID andgetcap -r /enumeration. - Payload staging (T1105, T1140).
curl/wgetdownloads,curl ... | bash,base64 -d,openssl enc -d,xxd -r; interpreters (Python, Perl, Ruby, Node.js, PHP CLI) allow shell-less execution. - Persistence (T1505.003, T1053.003, T1098.004, T1136). PHP webshells (
.php,.phtml, image polyglots,avatar.php.jpg), cron jobs, systemd units, SSHauthorized_keys, new accounts. - 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 endpoint169.254.169.254. - 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
- Multipart traffic: alert on bursts of
multipart/form-dataPOSTs to any PHP endpoint (including non-upload paths), malformed boundaries, oversized bodies, requests crafted to crossmemory_limit, and repeated preparatory requests from one source. - Memory-disclosure signal: anomalously long, malformed or binary-looking
PHPSESSIDresponse cookies, especially following HTTP 500 responses. Retain response headers for investigation. - Error correlation: pre-application OOM/allocation-failure messages in PHP and web-server logs followed by additional requests reaching the same worker; repeated HTTP 500s.
- Application logs are insufficient: exploitation occurs before application instrumentation, so correlate web-server, reverse-proxy, PHP runtime, OS process, EDR and network telemetry.
4.2 Host and Process Detections
- Process ancestry (primary, exploit-agnostic signal):
php-fpm,php-cgi,php-cgi.exe,lsphp,frankenphp,apache2,httpd(ornginx) spawningsh,bash,dash,zsh,cmd.exe,powershell.exe, Python, Perl, Ruby, Node.js,curl,wget,nc,socatorcertutil.exe. - Command-line artifacts:
/dev/tcp/,mkfifo,fsockopen,base64 -d,curl ... | bash,wget -qO- ... | sh,id,whoami,uname -a,sudo -l,getcap -r /, SUID searches, reads of/etc/shadow. - File-system: new or renamed
.php/.phtmlfiles in web roots, high-entropy web-executable files, double-extension polyglots, scripts under/tmp,/var/tmp,/dev/shm, files created, executed and deleted by PHP; new cron entries, systemd units,authorized_keys, user accounts. - Credential access: web-server context reading
.env,~/.aws/credentials,/var/run/secrets/kubernetes.io/, or contacting169.254.169.254. - Stability: unexplained PHP-FPM worker crashes/restarts, segfaults, OPcache corruption or abnormal memory behavior (successful exploitation may not crash).
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
- Search process/parent names
php*,lsphp*,frankenphp,sw-engine-fpm; use osquery, package manager inventories, file-system and container image inspection to find inactive or embedded PHP. - VirusTotal queries:
entity:collection collection_type:report "CVE-2026-109618",entity:ip port_service_cpe:php,entity:ip port_service_cpe:php port_banner:"PHP/". - Validate that PHP-FPM pools and web-server configs actually load the intended settings, and that origin servers cannot be reached directly around the WAF.
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:
- 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.
- 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.
- Mitigations are partial.
session.upload_progress.enabled=0,memory_limit=-1set outside application control,fatal_error_backtraces=0(PHP 8.5), lowpost_max_size, blockingmultipart/form-data, WAF and ZTNA/VPN isolation reduce known paths only.RLIMIT_AS/RLIMIT_DATAshould not be used because they trigger the vulnerable path;ini_set()and.user.iniare too late in the request. - 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.
- 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.
- 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:
- Inventory every PHP runtime (servers, containers, appliances, control panels, CI/CD, legacy apps) and prioritize internet-facing hosts.
- Upgrade to a fixed release or verified vendor backport, then restart all PHP-FPM pools, Apache, LSAPI and containers.
- Where patching is delayed, apply the partial mitigations above, restrict
multipart/form-data, isolate or take services offline, and enable WAF virtual patches. - Enable process-ancestry detections for web workers; hunt back to 2026-10-20 15:00 UTC for webshells, persistence and outbound connections.
- Isolate and rebuild suspected hosts from a trusted baseline; preserve logs and volatile evidence first.
- Longer term: least privilege for PHP workers, restricted child-process creation and egress, application allowlisting, and migration off unsupported PHP.
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