The required outcome
Within the first response cycle, every organisation should know which PHP runtimes are affected, which can be reached by attackers, who owns each system, how it will be fixed or isolated, whether compromise needs investigation, and what evidence is required before closure.
How to use this playbook
- The CISO / Incident Commander uses Sections 1–3 to set priorities, owners and reporting.
- Application, Infrastructure, Cloud and Vendor teams use Sections 4–7 to find and fix affected runtimes.
- SOC / Incident Response uses Section 8 to investigate possible exploitation.
- The vulnerability coordinator uses Sections 9–11 to track exceptions, verify closure and report status.
Important: Use the official PHP and operating-system/vendor advisories as the source of truth for each package. Do not use exploit code against production to test exposure.
1. What is the issue?
PHP2Shell refers to two critical vulnerabilities in the PHP runtime: CVE-2026-109618 and CVE-2026-109619. Under relevant conditions, crafted network requests can cause memory-safety errors that may permit unauthenticated remote code execution or exposure of sensitive process memory. The published severity is CVSS v4.0 9.2 for each CVE.
Fixed upstream releases
| PHP branch | Action |
|---|---|
| PHP 8.5.x | Upgrade to 8.5.12 or later in the supported branch. |
| PHP 8.4.x | Upgrade to 8.4.27 or later in the supported branch. |
| PHP 8.3.x | Upgrade to 8.3.36 or later in the supported branch. |
| PHP 8.2.x | Upgrade to 8.2.35 or later in the supported branch. |
| PHP 8.1 and older | Treat as affected unless the responsible OS/vendor confirms a backported fix. Prefer migration to a supported branch. |
Potentially affected web-serving configurations include PHP-FPM, Apache mod_php, php-cgi, FrankenPHP and LiteSpeed, plus products or appliances that bundle PHP. Public-facing services deserve the fastest response. A host's CLI version may differ from the runtime serving web requests.
Key principle: A source-code scan alone cannot prove production is safe. The organisation must identify and verify the actual runtime, package/build, process state and network exposure.
2. First 24 hours: action plan and decision gates
| When | Action / deliverable | Accountable lead | Evidence expected |
|---|---|---|---|
| 0–2 hours | Name an incident / vulnerability coordinator; open a central tracker; notify application and platform owners; establish a status channel and update cadence. | CISO / Security Operations | Incident or change reference; owner list; initial notification. |
| 0–4 hours | Identify internet-facing PHP services from CMDB, cloud inventory, external asset lists, WAF/load balancer, vulnerability scanner, container registry and hosting inventory. | Infrastructure / Cloud + App Owners | Initial asset list with public exposure and runtime owner. |
| 0–4 hours | For affected public systems that cannot be patched immediately, restrict or isolate access; prevent direct-origin bypass; assess whether taking the service offline is necessary. | Service Owner + Network / Cloud | Change record; before/after reachability evidence. |
| Within 8 hours | Confirm actual web-serving PHP build and SAPI; distinguish vulnerable upstream builds from vendor packages with backported fixes. | Platform / Linux / Hosting Vendor | Package version, package release, runtime evidence, vendor advisory or confirmation. |
| Within 24 hours | Patch highest-risk services, restart/recycle serving processes, verify all replicas and assess logs for potential exploitation. | Service Owner + Platform; SOC for hunt | Change ID, post-patch runtime evidence, health checks, SOC review status. |
| Daily until closure | Review all P0/P1 assets, blocked changes, exceptions, suspected compromise, patch evidence and ageing actions. | CISO delegate / Vulnerability Manager | Daily dashboard; escalation decisions; exception approvals. |
3. Prioritisation: which systems come first?
| Priority | Examples / criteria | Required response |
|---|---|---|
| P0 — Immediate | Internet-facing affected runtime; origin bypass possible; high-value service; privileged runtime; credible exploit indicators; no reliable patch and no safe boundary. | Contain immediately if not patching now; patch/verified backport urgently; SOC incident assessment; CISO visibility. |
| P1 — Urgent | Affected system reachable from partner, user, shared services or broad internal networks; critical business application; shared hosting/runtime. | Restrict access; patch as soon as feasible; check for indicators; daily tracking. |
| P2 — Controlled urgent | Affected runtime with verified restricted access and effective controls; lower criticality but still serving requests. | Schedule prompt fix; validate boundaries; monitor until fixed. |
| Exception — Not yet fixed | Legacy system, vendor-controlled appliance or compatibility blocker. | Time-bound risk exception; documented controls; named owner and due date. Do not report as remediated. |
Prioritisation must consider internet reachability, data sensitivity, business criticality, runtime privilege, shared tenancy, known exploitation signals and whether safe isolation is possible—not CVSS alone.
4. Role ownership: who does what?
| Role / team | Must do | Must provide / exit criteria |
|---|---|---|
| CISO / Security Head | Set urgency and risk tolerance; approve exceptional risk acceptance; resolve business conflicts; escalate suspected compromise. | Named executive owner; agreed priorities; approved exceptions; closure dashboard. |
| Incident / Vulnerability Coordinator | Maintain one source of truth; assign asset owners; chase overdue tasks; run daily checkpoint; escalate blockers. | Tracker with owner, deadline, status, evidence link and escalation path for every asset. |
| Application / Product Owner | Identify application instances and environments; validate business impact; coordinate regression tests and release; identify embedded PHP dependencies. | Application inventory; approved change; functional validation; no undeclared production instance. |
| Infrastructure / Linux / Windows Team | Inventory installed packages and services; apply OS/vendor updates; restart relevant services; verify actual loaded runtime. | Package/build evidence; service restart evidence; host-level verification. |
| Cloud / Kubernetes / Container Platform | Inspect images, digests, pods, autoscaling templates, base images, sidecars and DR regions; rebuild and redeploy fixed images. | Updated image digest; all replicas replaced; pipeline and template fixed; no vulnerable image redeployment. |
| Network / WAF / Edge Team | Map public routes and origin access; restrict ingress; prevent CDN/WAF bypass; apply approved temporary rules; confirm effective reachability. | Change ID; route/firewall evidence; before/after checks; rule expiry or review date. |
| SOC / Incident Response | Review WAF/web/PHP/EDR/cloud logs; hunt for abnormal worker processes, files, persistence and outbound traffic; investigate suspected compromise. | Hunt scope and time window; findings; incident ticket; containment/forensic recommendation. |
| DevOps / CI-CD / Registry | Scan repositories, SBOMs, build images and deployable rollback images; update base images and pipelines; block vulnerable images from redeployment. | Pipeline run; SBOM/image scan; approved digest; guardrail evidence. |
| Third-Party / Procurement / Vendor Manager | Open vendor cases for managed hosting, CMS, appliance or embedded runtimes; obtain package-specific remediation statements and dates. | Vendor case ID; affected/not-affected statement; fix version; delivery date. |
| Risk / Compliance / Audit | Check exception quality, control operation, expiry and approval; preserve evidence for audit and regulatory reporting. | Exception register; control evidence; approval and expiry; audit-ready records. |
5. Practical discovery checklist: code to production
| Discovery source | What to check | Owner | Evidence |
|---|---|---|---|
| Source repositories | PHP projects, composer manifests, Dockerfiles, runtime constraints, custom build scripts, IaC and application deployment definitions. | App Owner / DevOps | Repository, branch, declared version, owner. |
| Build pipelines and artefacts | Build logs, SBOMs, package manifests, release archives and rollback packages. | DevOps / AppSec | Pipeline run, artifact ID, SBOM or scan result. |
| VMs and servers | Installed PHP packages, PHP-FPM, Apache modules, php-cgi, service units, multiple PHP slots and non-standard paths. | Infrastructure | Host ID, package release, SAPI, service/process evidence. |
| Containers / Kubernetes | Deployed image digests, base images, running pods, jobs, workers, autoscaling groups, registries and manifests. | Cloud / Platform | Namespace, workload, image digest, scan and rollout result. |
| Web products / hosting | WordPress, Drupal, Joomla, e-commerce, cPanel/Plesk, vendor appliances, bundled runtimes and managed hosting. | App Owner / Vendor Manager | Product version, vendor statement, patch status. |
| External attack surface | DNS, IPs, load balancers, ingress, WAF/CDN, API gateways, alternate hostnames, public origins and admin paths. | Network / Cloud | Reachability result and rule/change reference. |
| Reconciliation | Compare CMDB, EDR, vulnerability scanner, cloud inventory, DNS, registry and service owner lists; investigate unknown assets. | Vulnerability Coordinator | Reconciled inventory; missing owners and remediation dates. |
Safe administrator checks
- Run
php -vonly as a discovery clue. It reports the CLI binary and may not represent the web runtime. - Check the actual PHP-FPM or Apache/PHP runtime, package release, loaded modules and process restart status using the operating system/vendor's documented commands.
- For Debian/Ubuntu, RPM-based Linux, Windows, managed hosting or appliances, use the relevant package manager and vendor advisory. A vendor backport may retain an older-looking upstream version string.
- For containers, scan and verify the image digest actually running—not only the tag or a newly built image. Confirm all replicas and autoscaling templates are updated.
- Do not use public proof-of-concept exploit code against production. Use package/advisory validation and controlled, authorised checks.
6. Validate attacker reachability
| Question | Owner | How to validate |
|---|---|---|
| Does a public route reach this runtime? | Network / Cloud | Map DNS/IP to load balancer, CDN/WAF, ingress and origin. Check direct origin exposure and alternate hostnames. |
| Is the actual PHP build affected? | Platform / Hosting Vendor | Confirm package release or vendor backport for both CVEs and identify the web-serving SAPI. |
| Can untrusted requests reach PHP before app controls? | App Owner + AppSec | Review routing, authentication placement, upload handlers and generic PHP handlers. Do not assume login or a specific URL fully protects the runtime. |
| Are controls actually enforced? | Network / WAF | Validate ingress restrictions, firewall/security groups, origin ACLs and temporary rules from approved test locations. |
| Was the vulnerable service exposed during the risk window? | SOC + Service Owner | Establish exposure timeline from asset, DNS, firewall, WAF and deployment records; search logs for suspicious activity. |
| What does ‘not reachable’ mean? | Network + Security | Record tested routes, source zones, time, results and any assumptions. Recheck after routing or deployment changes. |
Reachability labels: PUBLIC = reachable from internet; BROAD INTERNAL/PARTNER = reachable from user, partner or shared networks; RESTRICTED = tightly segmented; NO ROUTE FOUND = no path identified after documented checks. “No route found” does not remove the need to patch.
7. Remediation runbook
- Create or update the change record and confirm application owner, maintenance window, rollback plan and business validation contact.
- Choose the supported fixed PHP release for the application's branch, or apply a vendor-confirmed backport for the exact OS/product package.
- Test compatibility in staging where feasible; for exposed P0 systems, do not let routine release cadence delay immediate containment or urgent patching.
- Update every instance: production, UAT where exposed, DR, standby, secondary region, workers, queue consumers, autoscaling templates, container images and rollback artefacts.
- Restart/recycle PHP-serving processes as required. A package installation alone is insufficient if vulnerable workers remain running.
- Verify the actual web-serving runtime after the change; check package release, process state, image digest and all replicas.
- Run application health and regression checks, review service errors and confirm expected traffic and business functions.
- Update the central tracker with evidence and have a reviewer independent of the implementer confirm closure.
If patching is blocked
- Prefer taking the affected service offline or isolating it from public/untrusted networks until a fix is applied if safe containment is not possible.
- Apply vendor-recommended temporary mitigations and restrict inbound access to explicit trusted sources; block direct-origin routes; minimise service-account privileges and unnecessary outbound access.
- Some configuration changes may reduce exposure but are not a complete fix. Do not label the system remediated on the strength of WAF rules or settings alone.
- Open a time-bound exception with business owner, security risk owner, reason, compensating controls, vendor case, target fix date and next review date.
8. SOC / Incident Response: look for possible compromise
For systems exposed while vulnerable, patching and a clean scan do not prove that exploitation did not occur. SOC should review an agreed time window and escalate credible indicators through the incident response process.
| Telemetry | Review for | Owner / output |
|---|---|---|
| WAF, reverse proxy, load balancer and web logs | Unusual multipart POST patterns, malformed or repeated requests, bursts of errors, suspicious sources and requests around worker crashes. | SOC: search query, timeframe, findings and ticket. |
| PHP-FPM / Apache / system logs | Memory exhaustion, fatal errors, repeated worker exits/restarts, abnormal error bursts or unexplained service behaviour. | SOC + Platform: correlated timeline. |
| EDR / process telemetry | PHP/web-server processes spawning shells, interpreters, download tools or unexpected child processes; unusual outbound connections. | SOC: process tree, host scope, containment recommendation. |
| Web root and filesystem | Unexpected PHP files, modified plugins/themes/configuration, web shells, unfamiliar binaries or suspicious timestamps. | IR + App Owner: preserve evidence and file review. |
| Persistence / identity | New accounts/keys, cron or scheduled task changes, startup changes, new services, privilege changes or modified access controls. | IR: persistence assessment and affected identities. |
| Network / cloud telemetry | Unexpected outbound destinations, metadata service access, lateral movement, secret access or cloud control-plane changes. | SOC / Cloud Security: scope and impact. |
If compromise is suspected: contain the host/workload, preserve relevant logs and volatile evidence where feasible, notify Incident Response, assess lateral movement, rotate potentially exposed credentials from a clean administrative path, and rebuild from a trusted image when indicated. Do not wipe or rebuild before evidence-preservation decisions are made.
9. Closure criteria: no ticket closes without evidence
- Asset identity, business owner, technical owner, environment and criticality are recorded.
- Actual web-serving runtime/SAPI and package/build are identified; CLI version alone is not accepted.
- Fixed upstream release or exact vendor-confirmed backport is documented for both CVEs.
- All relevant PHP workers were restarted/recycled and the fixed runtime is confirmed running.
- All replicas, regions, DR systems, container digests, autoscaling templates, build pipelines and rollback images are covered.
- Public and internal reachability has been checked; origin bypass and alternate routes have been considered.
- Application health/regression tests passed and relevant monitoring is active.
- SOC review status is recorded for systems exposed while vulnerable; suspicious indicators have an incident ticket.
- Evidence links, change ID, verifier, date and any residual-risk acceptance are recorded.
10. Tracker template and reporting
| Field | Example / expected value |
|---|---|
| Asset / service | Unique CMDB ID, hostname, workload or product name |
| Business owner / technical owner | Named person/team with escalation contact |
| Environment / criticality | Production, DR, UAT; Critical/High/Medium/Low |
| Runtime details | PHP version, package release, SAPI, OS/vendor, image digest |
| Reachability | Public / Broad internal-partner / Restricted / No route found |
| Status / priority | P0/P1/P2/Exception; Identified / Contained / Fixing / Fixed pending validation / Closed |
| Fix plan / change | Fixed version or backport, change ID, target date, rollback plan |
| Verification | Restart proof, running build, replica coverage, health check, reachability proof |
| SOC review | Not required / Pending / Completed / Incident opened; timeframe and ticket |
| Exception | Risk owner, compensating controls, expiry, vendor case and approval |
| Evidence link / verifier | Link to logs, screenshots, command output, scan, change record and independent reviewer |
Recommended leadership dashboard
- Total PHP assets identified / total estimated; number with unknown owner or unknown runtime.
- Affected assets by public, broad internal, restricted and no-route-found exposure.
- P0/P1 outstanding, fixed pending validation, closed, exceptions and overdue items.
- Internet-facing systems patched and independently verified; systems isolated/offline.
- Suspected or confirmed incidents, investigation status and business impact.
- Top blockers, accountable owner, decision needed and target resolution date.
11. Communications template for service owners
Subject: Urgent — PHP2Shell vulnerability response and evidence required
Please urgently identify all PHP runtimes supporting your applications and platforms, including production, DR, containers, bundled/vendor components and managed hosting. Confirm the actual web-serving PHP build and whether it is reachable from the internet or other untrusted networks. Prioritise public-facing affected systems, apply the applicable fixed release or vendor-confirmed backport, restart the PHP-serving processes, and submit evidence of the running build and validation. If immediate patching is not possible, restrict or isolate access and raise a time-bound exception with compensating controls and an approved target date. For systems exposed while vulnerable, coordinate a log and endpoint review with SOC. Do not close the item until all instances, runtime processes and exposure paths have been verified.
12. Official references
- PHP2Shell operational information — NCSC-NL
- PHP security release archive
- PHP informational advisory — CVE-2026-115560 (23 October 2026) — subsequent issue outside this playbook's Version 2.0 scope.
- PHP source advisory — CVE-2026-109618
- PHP source advisory — CVE-2026-109619
- Canadian Centre for Cyber Security alert
- NHS England Digital alert
Disclaimer: This playbook supports operational response and governance. Validate package-specific applicability with the official PHP, OS, hosting or product vendor advisory. Any exploit validation requires explicit written authorisation and a controlled test plan.
