442 nodes and 914 edges, built from the register on every release and joined to the graphs already on this site: the claims and their sources (the story graph) and the fix and the code it changed (the code review graph). One graph, no copies: a claim, a source or a file is the same node here as there. The JSON is data/grc-graph.json.
The weaknesses
What the risks arise from. Two are the CVEs themselves; the rest are conditions of the ecosystem, the disclosure process and this newsroom, each joined to the risks it gives rise to and, where there is one, to the code.
The allocator's longjmp-based bailout on out-of-memory
An out-of-memory error unwinds by longjmp and can leave request memory in a state that cleanup later reads.
Gives rise to: R01 Remote code execution on internet-facing PHP servers, R01-1 Default Apache mod_php installations exploited before application code runs, R01-5 Popular applications compromised before authentication, R03 Exploitation outpaces patching, R06 A compromise becomes a reportable breach, R06-1 Personal data taken from a compromised PHP application, R08-1 A known bug left unexploited, then unfixed, for two years
Arises from: CVE-2026-109618: RCE via OOM corruption
Request globals that survive a failed request
State from a request that failed is still there when the next one starts.
Gives rise to: R01 Remote code execution on internet-facing PHP servers, R01-2 PHP-FPM deployments wrongly treated as safe or as certainly vulnerable, R01-5 Popular applications compromised before authentication, R06 A compromise becomes a reportable breach
Arises from: CVE-2026-109619: RCE via stale global state
Bailout as a class of bug
Patching the demonstrated paths does not make the mechanism safe: other paths to the same bailout should be expected.
Gives rise to: R01-4 The fix is incomplete, or a third flaw follows
Arises from: CVE-2026-109618: RCE via OOM corruption, CVE-2026-109619: RCE via stale global state
PHP versions the project no longer fixes
8.1 and older get no upstream fix; reaching them needs a distribution backport, paid support or an upgrade.
Gives rise to: R01-3 Versions the PHP project no longer fixes stay vulnerable, R04 Services lost to precautionary shutdowns, R04-2 Councils and police offline without saying why
Arises from: CVE-2026-109618: RCE via OOM corruption, CVE-2026-109619: RCE via stale global state
One embargo shared by many parties
Four independent finders, a coalition, early advice to critical infrastructure and image builders: every party is a place the secret can leave by.
Gives rise to: R02 The coordinated disclosure broke before the fix was ready, R02-1 The CVE IDs and the proof-of-concept video circulated before release, R02-2 Early mitigation advice to a few providers leaked, R02-3 Patched builds published before the embargo lifted
Not knowing where PHP runs
PHP is embedded in appliances, images and products whose owners do not list it; 418 inventory rows were still under investigation.
Gives rise to: R01-6 Products that embed PHP stay vulnerable while their suppliers investigate, R04 Services lost to precautionary shutdowns, R04-1 National government services offline, R06-3 Manufacturers under the Cyber Resilience Act owe a 24-hour report, R09 Not knowing where PHP runs
A filter in front of an unpatched engine
Rules match the payload shapes seen so far; attackers mutate payloads, and only traffic routed through the filter is covered.
Gives rise to: R03-2 Mass scanning and mutated payloads after the leak, R03-4 Detections built on a proof of concept with the wrong mechanism, R05 A web application firewall taken for a patch
Exploitation that cannot yet be seen
Honeypots and edge networks see attempts; nobody has shown a compromise, and KEV waits for one. Absence of evidence is read as safety.
Gives rise to: R03 Exploitation outpaces patching, R03-1 Attempts before disclosure, R03-3 Exploited in the wild without anyone being able to show it, R03-4 Detections built on a proof of concept with the wrong mechanism, R06-2 Essential and financial entities miss their reporting clocks, R06-3 Manufacturers under the Cyber Resilience Act owe a 24-hour report
Numbers and ratings repeated without their source
70% of the Internet, CVSS 10, 30 million sites: figures that measure different things, carried from post to post until they read as fact.
Gives rise to: R04-3 The agencies' advice disagrees, R07 Decisions made on numbers that measure something else
Frontier models that find memory-safety bugs in widely used C
The capability that found these flaws ahead of most attackers is available to attackers too, and finds more than maintainers can fix in a week.
Gives rise to: R08 Frontier AI finds critical flaws faster than maintainers can fix them
A small, thinly funded maintainer team at the base of the web
An audit found the bug in 2024; the fix took until 2026. Four reports in a month land on the same handful of people.
Gives rise to: R08 Frontier AI finds critical flaws faster than maintainers can fix them, R08-1 A known bug left unexploited, then unfixed, for two years, R08-2 Several finders, one small team
Agents that read the open web and can publish
Nine capabilities in the newsroom's agent grant have no boundary in the way (admin/security/abp/DELTA.md); the gate that guards publishing lives in the repository the agents can edit.
Gives rise to: R10 This newsroom's own agents are steered, leak or mislead, R10-2 A vault key or token published
In this repository: admin/build/release.sh, admin/build/validate.py, admin/build/security_check.py, .github/workflows/pages.yml
Third-party text inside the agents' context
Captured pages, feeds, tips and other models' output are read by agents that hold credentials; one sentence addressed to a model is enough to try.
Gives rise to: R10 This newsroom's own agents are steered, leak or mislead, R10-1 Prompt injection through captured material
In this repository: admin/build/security_check.py, admin/security/injection-allowlist.json
A status word chosen by the agent that wrote the claim
The fact-check desk found eleven claims whose status word is stronger than their evidence.
Gives rise to: R10 This newsroom's own agents are steered, leak or mislead, R10-3 A status word stronger than its evidence
In this repository: admin/factcheck/fc.py, data/claims.json