
PHP2Shell: Finding What Matters in a Sea of Vulnerabilities with Precog

Alberto Ornaghi
•

PHP2Shell puts a familiar foundation of the web at the centre of an urgent security response. Two critical vulnerabilities in PHP can allow unauthenticated remote code execution (RCE), affecting the runtime behind content management systems, online stores, and custom business applications. Because the flaws sit in PHP itself, organisations need to look beyond their own application code to understand the risk. The PHP project urged users to update immediately.
The response drew attention well beyond the security community, with international news coverage of emergency patching. For defenders following advisories, technical threads, and discussion on X, that attention quickly becomes an operational question: “Do we have this in our infrastructure, and what needs action first?”
Answering requires more than finding PHP in an inventory. Teams need to identify affected images, understand how each application uses the runtime, assess the available evidence, and give application owners a concrete fix. They must do that while an existing queue of vulnerability alerts competes for their attention.
Precog is our vulnerability prioritisation and validation product. It helps teams turn scanner findings into an evidence-backed set of actions, using application context and sandbox testing to reduce the work of triage.
This post follows a triager's investigation of PHP2Shell in a WordPress container image, from a plain-language question to the evidence and remediation behind the answer. First, a brief look at the vulnerabilities and how Precog prepares that assessment.
The alert: two vulnerabilities in the PHP runtime
On October 21, 2026, the PHP project published advisories for two vulnerabilities associated with PHP2Shell:
CVE-2026-109618: memory corruption associated with out-of-memory handling and request cleanup. See the PHP advisory for CVE-2026-109618.
CVE-2026-109619: stale request-owned global state that a later request can access after its memory has been freed. See the PHP advisory for CVE-2026-109619.
The PHP project identifies Apache with mod_php as the highest-risk runtime in its release announcement. That runtime is central to the WordPress investigation below.
How Precog builds the assessment
Precog maintains an analysed inventory of container images from connected sources or direct submissions. It extracts packages, executables, dependencies, and available configuration, identifies the applications inside each image, and scans for known vulnerabilities. Scheduled rescans keep findings current as vulnerability information changes; monitored image updates can bring new artefacts into the analysis.
It then uses the captured application configuration and dependencies to assess reachability and contextual risk, identifying which findings deserve closer attention.
For prioritised findings, the validator runs tests against a twin copy of the image in a sandbox. A triggered result means the test activated vulnerable behaviour; successful exploitation is recorded separately. Those observations feed back into the risk assessment and its timeline, alongside fix versions and remediation guidance.
Analysts can inspect the assessment in the UI or query it through Precog Base, an LLM-powered chat connected to Precog through the Model Context Protocol (MCP). This is where our investigation begins.
Asking Precog: “Are we vulnerable to PHP2Shell?”
With the WordPress image already analysed, the triager starts with a plain-language question:
Are we vulnerable to PHP2Shell?
The chat combines public information about PHP2Shell with the stored image assessments to identify an affected WordPress image and explain the evidence.

One question brings together the affected image, validation status, deployment context, and recommended fix.
The response identifies PHP 8.3.35 (libphp) in the wordpress image, flagged for both PHP2Shell CVEs. Both findings are marked triggered, with no exploitation recorded.
The image is recorded as not live and not Internet-exposed. This establishes affected inventory within the analysed scope; current production deployment and exposure are not confirmed by that inventory.
The response recommends rebuilding with a patched PHP release. To investigate the result, the triager opens the WordPress image summary in the UI.
Reduce alert fatigue with application context
In the UI, the WordPress summary anchors the investigation to a specific image digest. It identifies Debian GNU/Linux 13, the apache2-foreground application, and 257 detected packages: 255 classified as deb and two as bin.

The prioritisation view connects published severity to application reachability and assessed risk. The WordPress image is marked At rest.
The starting point is 1,298 findings. Application-aware reachability analysis places 1,252 findings out of scope, leaving 46 findings in scope for further assessment. The UI reports this as 96% filtered out, rounded to a whole percentage.
This helps reduce alert fatigue by narrowing the review queue to findings relevant to the application. Out-of-scope findings remain available in a separate view for inspection. The filtering rate is specific to this analysis and describes prioritisation, not remediation.
Reachability and urgency are separate decisions. The summary identifies two findings requiring action: CVE-2026-109619, assessed as Critical, and CVE-2026-109618, assessed as High, both in libphp 8.3.35 and both marked Triggered. The PHP2Shell findings remain prominent after the broader queue has been narrowed.
The triager opens the Critical finding to inspect the evidence behind its status.
Read how the assessment changes as evidence arrives
For CVE-2026-109619 in libphp, the expanded timeline records detection, vendor fix information, Precog’s contextual reasoning, the validator's observations, and the subsequent assessment.
Initially, Precog identifies the vulnerable libphp.so at the conventional Apache module path. Combined with the Apache entrypoint and PHP-related configuration, this makes use through mod_php plausible. The analysis also states what remains unverified, including actual module loading, external HTTP exposure, and request routing.

The timeline preserves the reasoning before and after validation, including the limits of the observed result.
The validator then supplies behavioural evidence. In the recorded sandbox validation, unauthenticated requests to /wp-login.php caused session-decoder use-after-free memory faults, worker crashes, and HTTP 500 responses. A closely related control request did not produce the same behaviour. These observations concern the tested application; they do not establish production exposure.
Precog incorporates those observations into its next assessment: the vulnerable component is loaded, and the attacker-controlled request path has been demonstrated in validation. The finding remains Critical, with a Precog score of 9/10. The score is Precog’s contextual assessment, separate from the vulnerability’s published CVSS rating.
Triggered is different from confirmed RCE
The evidence supports distinct conclusions:
Evidence | What it establishes in this case |
|---|---|
Affected component and version | The image contains a PHP build associated with the advisory. |
Contextual analysis | The available application evidence makes the vulnerable runtime relevant. |
Validation status: Triggered | Validation activated the vulnerable behaviour and produced memory faults and service disruption. |
Confirmed RCE | Would require evidence of successful remote code execution. That outcome is not demonstrated for this WordPress finding. |
The service disruption demonstrated here warrants remediation. The absence of confirmed code execution does not establish that RCE is impossible.
Move from the finding to a remediation plan
The remediation view connects the finding to a concrete change: replace the vulnerable PHP runtime in the image.

The finding view separates the runtime update from temporary exposure reduction and operational guidance.
The fix targets the PHP runtime embedded in the WordPress image. The suggested action is to rebuild with PHP 8.3.36 or a subsequent patched release in the 8.3 branch, replacing the Apache libphp module. Any containers using the affected image should then be redeployed from the rebuilt artifact so Apache loads the patched module.
Because the vulnerable binary is embedded in the image, rebuilding is part of the fix. Temporary exposure restrictions can reduce access to an affected service while that work proceeds. The operational guidance about preserving evidence and replacing potentially compromised containers applies if an affected deployment was exposed; the screenshots do not establish a compromise.
Continue the investigation through the chat
Precog Base remains useful after the initial answer. Follow-up questions can narrow the scope or turn the stored evidence into a handoff:
Which findings are triggered, and which have confirmed exploitation evidence?
Show the recorded deployment context for the WordPress image, including missing evidence.
Summarise the WordPress finding and its remediation for the application owner.
These are suggested follow-ups, rather than additional conversations captured in this case. They show how the chat can help turn a detailed investigation into a handoff for the team responsible for the fix. The rebuild and deployment remain operational work.
After rebuilding, the team should rescan the WordPress image and verify that any running workloads use its corrected digest. Those checks would close the remediation loop; a completed fix and clean rescan are outside the evidence shown here.
Defending at the pace of vulnerability discovery
PHP2Shell illustrates the pressure on defensive teams. The PHP Foundation's account of the disclosure describes growing volumes of AI-assisted research, AI tools used to validate reports and exploits, and a disrupted embargo. It also records that a prematurely published demonstration accelerated proof-of-concept development. Defenders cannot assume they will have an orderly interval between the first public warning and pressure to act.
For defenders, this makes preparation essential. When a critical advisory arrives, collecting inventory and reconstructing application context from scratch consumes time the team needs for remediation. Keeping that evidence current gives triagers a stronger starting point.
That is the role Precog plays in this case: reducing the queue that needs attention and giving the analyst an inspectable basis for the next decision. The team can hand over a specific runtime update with supporting evidence and clearly stated uncertainties, then verify the rebuilt artifact before closing the finding.
Want to see how Precog can help your team prioritise critical vulnerabilities and reduce alert fatigue? Contact our team to arrange a demo and discuss your environment.
Explore our latest insights on AI development, LLMs, and more





