TableX
Built on the real October 21, 2026 PHP security advisory

PHP2Shell: Emergency Patch Window

Your PHP estate. A CVSS 9.2 emergency patch window. One afternoon to decide what your organization actually does — before the facts are all in.

Available from October 22, 2026 — as a facilitated session for your team, or in a public Open Table exercise.

The situation

At 01:30 ET, PHP announces an out-of-cycle security release for two critical vulnerabilities rated CVSS 9.2. The notice names no component, no affected versions, and no workaround. Your inventory says you run 42 PHP pools. Your inventory is 58% complete. The exercise starts there.

  1. The inventory disagrees with itself
    The asset register, the hosting providers, and the running processes tell three different stories about what your estate actually serves. Until the room reconciles them, every later decision is built on a guess.
  2. A weaponized exploit claim lands — unverified
    A detailed root-cause post and a downloadable exploit framework circulate widely. Nobody independent has reproduced the chain. Treat it as proven and you may break production on a rumor; wave it off and you may ignore the real thing. The disciplined path prices it as a planning input and validates it in isolation.
  3. Multipart probing and worker crashes at the edge
    Telemetry shows suspicious traffic and dying workers. It is consistent with exploitation. It is also consistent with noise. The room has to act before it can know.
  4. The revenue argument against emergency changes
    Every emergency change carries its own risk, and the business case against touching production mid-incident is genuinely strong. So is the case for moving. Someone has to own the trade-off — out loud, on the record.
  5. Vendors, hosts, and the pool that can never be patched
    Providers will patch "when published." One vendor answers "under evaluation." And the end-of-life pool cannot be patched at all: isolate it, gateway it, or migrate its last application — under deadline pressure, with a named owner.
  6. The advisory lands: ground truth, at last
    The official release names the affected branches, the component, and the fixed versions. Some overnight claims were right. Some were wrong. The room has to say which — explicitly — because teams that cannot say what they got wrong cannot price their next emergency either.
  7. "Patched" on the dashboard, unpatched in the process table
    The package update completes and the version string reads fixed. The old FPM master never restarted, and a slice of traffic still routes to the old container image. A version string is a claim, not evidence. Only the processes and the traffic can settle it.
  8. A php-fpm worker spawned curl at 03:12
    Hours before the advisory, a worker on the legacy pool reached out and wrote a file that is no longer there. This is no longer only a patching exercise — and rebuilding the worker before scoping what it touched would destroy the evidence and possibly keep the intruder.
  9. The largest customer asks the only question that matters
    "Were we exposed? Was any of our data on the affected systems?" The honest answer is narrower than either reassurance or alarm — and a flat "you were not affected" today becomes tomorrow's exhibit if the scoping changes.

Who's in the room

Eight roles, each optimizing for something real — and not the same thing. AI characters fill any seat your team doesn't staff, and play their brief at full strength.

Incident Commander

Owns the incident record, the decision sequence, and the patch-window call. Optimizing for: a defensible record of who decided what, when, and on which facts.

CISO

Owns exposure judgment and containment. Optimizing for: never calling something "confirmed" that isn't — and never letting caution become paralysis.

Platform Engineering Lead

Owns the serving runtimes — FPM pools, web servers, containers, the edge. Optimizing for: changes that actually take effect in the processes serving traffic.

Application Owner

Owns the business applications running on PHP. Optimizing for: knowing what can be degraded, isolated, or patched first — and what each choice costs the business.

Detection & Response Lead

Owns telemetry and hunting — WAF and proxy logs, worker crashes, EDR. Optimizing for: evidence preserved before it's rotated away, and compromise scoped before it's rebuilt over.

Communications Lead

Owns internal and external statements. Optimizing for: one calibrated voice — what is known, what is not, and when the next update lands.

General Counsel

Owns disclosure posture and notification thresholds. Optimizing for: statements the organization can still stand behind when the facts finish arriving.

Operations Executive — the critic

Owns business continuity and spend, and argues at full strength against breaking production chasing an unverified root cause. Dissent is a designed role in every TableX exercise: the room is scored on how it answers the critic — with evidence, or not at all.

What gets practiced

The scenario is scored across seven dimensions — evidence discipline, runtime inventory quality, interim-mitigation judgment, patch execution and verification, containment and scoping, stakeholder communication, and dissent handling. These are the muscles it works hardest:

Evidence discipline: confirmed / reported / claimed

From the first decision, the room keeps a ledger separating what is confirmed, what is merely reported, and what is only claimed. Most real incidents fail here first — long before they fail technically.

Recognizing a stopgap that isn't a fix

The exercise offers an interim configuration change that feels decisive. The official advisory is explicit that no configuration change makes an installation safe — it narrows one attack path and leaves the rest. Rooms are scored on whether they can tell the difference, and whether they re-open the decision when challenged.

Runtime verification over package strings

"Patched" is proven from execution — worker start times, binaries actually loaded, effective configuration, traffic drained from old pools — not from what the package database reports.

Patch prioritization across a mixed estate

Internet-facing first, suspected next, internal last — across supported branches, distribution backports, hosted platforms, and an end-of-life pool with no patch at all. Unpatchable is a decision, not a status.

Containment that preserves evidence

When a suspected pre-advisory compromise surfaces, patching, containment, and evidence preservation become three separate workstreams. The exercise grades whether the room notices before the rebuild destroys the answers.

Disclosure judgment under uncertainty

What to tell the largest customer when the honest answer is "one pool is suspected, the rest is still being scoped" — calibrated, minuted, and timed, with counsel in the room.

Format

A facilitated tabletop exercise run live on TableX — one session, decisions in real time, every decision and its evidence recorded as you go.

Format
Facilitated tabletop, one session
Roles
8 seats — your people, AI fills the rest
Room
Mixed technical & executive
Participant setup
None — no installs, no lab, no homework
You leave with
A scored after-action record: decisions, evidence, findings, owners
Availability
From October 22, 2026

The real event behind it

This is not a hypothetical. The exercise is built directly on the PHP security event of October 21, 2026 — announced, leaked, argued about, and resolved in public, in roughly the order the scenario runs it.

The PHP advisory, October 21, 2026

PHP published emergency security releases fixing two critical unauthenticated remote code execution vulnerabilities, both rated CVSS 9.2: CVE-2026-109618 (remote code execution via out-of-memory corruption) and CVE-2026-109619 (remote code execution via stale global state). All PHP installations serving web requests are in scope, with the highest risk for mod_php. Fixed versions:

PHP 8.5.12PHP 8.4.27PHP 8.3.36PHP 8.2.35
"There are no complete mitigations, updating is the only safe choice." — PHP security advisory, October 21, 2026

The advisory's interim measures are explicitly partial: disabling session upload progress blocks only the confirmed session paths of one of the two vulnerabilities, and the memory-limit guidance for the other removes one controllable trigger, not the flaw. PHP 8.1 and older receive no updates from the PHP project, though minimal source backports were published for 7.4, 8.0, and 8.1 for those building from source. Reports of exploitation circulated within hours of the announcement; the advisory itself makes no exploitation claim, and none had been independently confirmed at publication. A public lab reproduction appeared the same day, under bounded preconditions — which is exactly the distance between claimed and confirmed that this exercise trains.

Read the official PHP advisory →

Run it before it's your headline

Book a facilitated PHP2Shell session for your own team — your estate's shape, your decision-makers, your critic — or take a seat in a public Open Table exercise and see how another room handles the same afternoon.

Or explore the live TableX demo →