A vulnerable PHP runtime can establish technical exposure. It cannot, by itself, establish that an attacker executed code, accessed data or compromised an organization.
That distinction is central to assessing CVE-2026-109618 and CVE-2026-109619, the PHP-core vulnerabilities referred to collectively in public reporting as PHP2Shell. The supplied PHP advisories describe different mechanisms: one concerns out-of-memory handling and partially initialized request state; the other concerns stale global state that may retain a reference to memory associated with a prior request. The precise release, version and remediation position should be confirmed against the applicable primary advisory and vendor records before publication or matter-specific reliance. (OOM corruption advisory; stale global state advisory)
For counsel, investigators and technical decision-makers, the practical question is not simply whether PHP was vulnerable. It is whether the organization can examine four separate propositions:
- An affected runtime and relevant SAPI were deployed.
- The conditions described by the applicable advisory were reachable.
- Suspicious requests or post-exploitation activity occurred during the relevant exposure window.
- The available records support a defensible conclusion about execution, disclosure, persistence or data impact.
The phrase “pre-application remote code execution” should not be generalized across every PHP environment. The supplied material identifies deployment distinctions, including Apache mod_php, PHP-FPM and other SAPIs. Any conclusion about a specific deployment remains dependent on the actual build, configuration, request lifecycle and worker behavior.
What PHP2Shell establishes—and what it does not
The supplied PHP materials describe CVE-2026-109618 as an out-of-memory handling flaw. In certain circumstances, attacker-controlled allocation patterns may cause an early exit while request state is not fully initialized. Request shutdown may then treat invalid state as valid, creating a memory-corruption condition. The advisory discusses routes involving multipart parsing, unrestricted multipart headers, nested field names and other allocation patterns. These descriptions should be tied to the exact advisory wording and the affected deployment before being used as a technical conclusion. (PHP / php-src advisory)
CVE-2026-109619 concerns stale global state. The supplied advisory describes circumstances in which a fatal error, out-of-memory event or diagnostic may interrupt the normal reset sequence, leaving a persistent worker with a reference to memory associated with a prior request. A later request handled by that same worker may interact with the stale state before normal initialization resets it. The relevant sequence therefore depends on the actual producer, consumer and worker lifecycle. (PHP / php-src advisory)
These mechanisms explain why a conventional vulnerability report is incomplete. A scanner may identify a potentially affected version, but it ordinarily cannot determine whether a particular request reached the relevant code path, whether a worker entered the relevant state, whether memory was disclosed or whether code execution followed.
Public reporting also requires careful qualification. The supplied sources distinguish among statements about attack traffic, exploitation attempts, proof-of-concept activity and confirmed compromise. Such reporting may support concern and guide defensive review, but it does not establish successful compromise of a particular organization or data exfiltration. The status and terminology should be rechecked against the applicable primary and contemporaneous sources before publication. (The PHP Foundation; Cloudflare; watchTowr)
Why the PHP deployment model changes the analysis
The deployment model is part of the evidence, not a detail to be inferred from the vulnerability name.
The supplied material identifies Apache with mod_php as the basis for the strongest documented pre-application execution discussion. That statement should be understood as advisory-specific and deployment-specific, not as a universal conclusion about PHP environments.
PHP-FPM is not automatically equivalent to mod_php, and it should not be described as either universally vulnerable in the same way or immune. The supplied material describes different startup-failure handling and conditional application-stage or persistent-worker considerations. PHP-FPM exposure therefore requires examination of the actual application, request lifecycle, worker behavior, configuration and reachable allocation paths.
The same caution applies to php-cgi, FrankenPHP, LiteSpeed/LSAPI and less common configurations. The available material does not support one uniform exploit behavior across all SAPIs. Application and CMS updates also do not, by themselves, establish that the PHP runtime was updated.
A matter-specific runtime inventory should identify:
- PHP version, build identifier and running binary.
- SAPI, host, container, image or orchestration identity.
- Apache, proxy, load-balancer and origin routing.
- Effective PHP, FPM and web-server configuration.
- Internet exposure, including direct-origin paths that may bypass a filtering layer.
- Worker start, restart, replacement and crash times.
- Package provenance and any vendor backport claimed for an older branch.
Upstream release status and vendor-maintained distribution status must be kept separate. A vendor backport, source patch or migration decision should be checked against the relevant package records, running process and applicable vendor advisory. No universal conclusion about older branches should be drawn from upstream status alone.
Exposure is an opportunity record, not a finding of compromise
A defensible exposure assessment should examine whether the affected runtime was reachable under conditions relevant to the applicable advisory.
Questions include whether unauthenticated parties could send multipart or other attacker-controlled input, whether requests reached PHP or were rejected upstream, whether relevant features were enabled, and whether a persistent worker could process the required request sequence.
Evidence that may support exposure includes an affected runtime, a relevant SAPI, reachable routing, configuration showing relevant conditions and proof that vulnerable workers remained active before remediation. These records establish technical opportunity. They do not establish that an attacker used it.
Anomalous multipart structure, unusually large decoded bodies, malformed input, fatal errors, upload-progress activity or worker crashes may support an exploit hypothesis. They may also have legitimate explanations, including normal uploads, application faults, deployment activity or monitoring behavior. A WAF alert demonstrates that a request matched a rule; it does not necessarily demonstrate that the origin was reached or compromised. Request data alone may not distinguish exploit traffic from legitimate traffic. (Cloudflare)
The resulting report should distinguish vulnerability exposure, exploit attempt, successful code execution and business impact. Each is a separate proposition requiring separate support.
What remediation can establish—and what it cannot
The supplied PHP material identifies updating to a fixed release as the complete remediation path. The precise fixed release and any vendor-specific backport should be confirmed against the applicable primary and vendor records before operational reliance. Relevant workers, pools, containers and long-running services must also be restarted or replaced so that the remediated binary is actually executing. (PHP / php-src advisories; PHP Project)
A defensible response sequence is to preserve available runtime, configuration and process information; identify internet-facing and unsupported deployments; apply the applicable fixed vendor package or patched image; restart or replace relevant workers; record acquisition context, timestamps and hashes; and review telemetry across the exposure window.
Post-remediation verification establishes the state observed at the time of verification. It does not reconstruct prior worker state or prove the absence of earlier exploitation, memory disclosure or transient execution. Package records, binary identity and effective configuration should therefore be treated as observations requiring provenance and context, not as proof of historical completeness or authenticity by themselves.
Temporary configuration measures described in the supplied material may reduce particular paths, but their scope, affected version, SAPI, placement and limitations require technical validation. They should not be presented as substitutes for applying the applicable fix.
What evidence can support a compromise assessment?
The strongest assessment correlates request-layer evidence with worker-state and post-exploitation evidence. No single artefact should be treated as conclusive without examining its provenance, integrity, temporal reliability, process attribution, completeness and plausible alternative explanations.
Process telemetry may show a PHP, FPM or web-server process spawning an unexpected shell, interpreter, downloader or network utility. File evidence may identify newly created or modified PHP files, webshells, upload-directory content, temporary files, altered configuration, cron entries or SSH authorization changes. Network records may show outbound connections from a PHP worker or web-server process to infrastructure not explained by legitimate operations.
Identity, cloud and application records may show access to credentials, secrets or cloud tokens followed by authenticated activity from a new process, location or service. Persistence, privilege escalation, lateral movement or data-access events may strengthen an inference if they can be temporally and technically linked to the PHP worker or web-server process.
These artefacts support a compromise conclusion only when the evidence supports the linkage. The assessment should distinguish the observed event from the inference that it resulted from exploitation of PHP2Shell. Process lineage, child-process execution, payload download and abnormal file creation may be useful detection indicators, but behavioral detections do not guarantee coverage of fileless execution, account creation or other variants. (Elastic Security Labs)
The absence of a webshell is not dispositive. Memory disclosure may expose secrets without durable files or an obvious shell. Memory corruption may crash a worker without leaving a complete exploit artefact. Worker identifiers may be recycled, logs may be truncated and container replacement may destroy volatile state. The conclusion should state what was observed, what was inferred and what evidence was unavailable.
Building a defensible timeline
Web and WAF logs may show what reached an edge or proxy. They may omit bodies, normalize requests, truncate headers or lack a reliable connection to the backend process. The investigation should therefore examine what can be established about the request-serving worker: whether startup completed, whether a worker was reused, whether a crash or restart occurred and whether a process, file or network event followed.
The exposure record should link runtime version, SAPI, configuration, routing, patch state and worker lifecycle. The impact record should link suspicious requests to process behavior, file changes, outbound connections, identity events, persistence and data access. These links are evidentiary inferences, not automatic proof of causation or attribution.
Where possible, preserve before aggressive cleanup:
- Running processes, parent-child relationships, command lines and open connections.
- PHP binaries, package manifests, image digests and effective configuration.
- Apache, nginx, PHP-FPM, CGI, proxy, WAF, CDN and load-balancer logs.
- Application, authentication, database, cloud and identity-provider records.
- File metadata, hashes, contents and relevant filesystem snapshots.
- Container, orchestration and deployment events.
- Crash data, core files, PHP errors and system journal entries.
- DNS, firewall, flow, endpoint and outbound-proxy telemetry.
- Credential and secret-access records.
A layered timeline should correlate exposure, suspicious requests, PHP errors, worker crashes, process creation, file writes, outbound connections, credential access, remediation and subsequent activity. Temporal proximity may strengthen an inference, but it does not establish causation. Legitimate administrators, deployment systems, monitoring agents and automation must remain possible alternative explanations unless the records exclude them.
The decision for counsel and investigators
The practical question is whether the organization can explain the relationship between the potentially affected runtime, the reachable attack path and the evidence of impact.
A sound conclusion should distinguish at least these outcomes:
- Exposed: an affected runtime and reachable condition were established.
- Targeted or attempted: suspicious requests or reported attack activity were identified, but successful execution was not established.
- Compromise supported: multiple records, assessed for provenance, integrity, temporal reliability, process attribution and alternative explanations, support an inference of execution or access linked to the environment.
- Impact unresolved: relevant telemetry is incomplete, overwritten, unavailable or incapable of resolving memory disclosure or transient execution.
These categories are more useful than treating every potentially vulnerable server as compromised or every clean file scan as proof of safety. They preserve uncertainty while giving decision-makers a structured basis for further action.
For a specific matter, an independent technical assessment may help connect software exposure, worker lifecycle and post-compromise evidence into a defensible chronology. The scope should be defined by the records available and by the proposition the organization needs to establish—not by the vulnerability identifier alone.
Digital facts. Defensible evidence. Evidence that Drives Decisions.
If a PHP2Shell-affected environment is relevant to a dispute, investigation or incident decision, discuss an independent technical assessment with IVIDENTIA focused on exposure, worker lifecycle, evidence preservation, provenance and the limits of any compromise conclusion.
Sources
- Security advisory: Critical remote code execution vulnerabilities, update now — PHP Project
- RCE via OOM corruption — GHSA-w8hw-w9fx-j79w — PHP / php-src
- RCE via stale global state — GHSA-6wmf-4rv5-p3rp — PHP / php-src
- Today’s PHP Security Release, and How We’re Strengthening PHP Security — The PHP Foundation
- PHP2Shell — Wiz Research and coordinated research partners
- Critical security issue affecting PHP — UK National Cyber Security Centre
- Cloudflare deploys protections against php2shell vulnerability — Cloudflare
- PHP Remote Code Execution — watchTowr
- php2shell: Assessing Elastic detection coverage — Elastic Security Labs
- CVE-2026-109618 — Red Hat Customer Portal
- Responding to core PHP vulnerabilities CVE-2026-109618 and CVE-2026-109619 — Google Cloud