Research collected from outside sources and what this site derives from them; every fact links to a saved copy of its source Research or story?

The story as a graph

1554 nodes and 1900 edges in 15 verbs: 515 captures, 454 sources, 363 parties, 70 claims, 68 events, 20 exploitation signals, 17 numbers, 16 advice, 12 tensions, 8 topics, 8 phases, 3 CVEs. Each is drawn from the same rows as the pages, so the picture cannot disagree with the text. Start anywhere, follow a link, and the graph re-centres on it; a node with a thick ring opens a graph of its own.

The interactive graph needs JavaScript. Every node is also on a page: the claims, the sources, the parties, the timeline, the tensions; the whole graph is data/graph.json.

Read it as sentences

Every edge is a verb, and read from the other end it has a different name: Wiz states a claim, the claim is stated by Wiz. There is no edge that only says two things are related. The verbs, with how many edges use each:

VerbInverseReadsEdgesWhere it comes from
citescited_byA cites B378inherited from altitudes.json edge_registry
statesstated_byA states B146proposed here
relaysrelayed_byA relays B46proposed here
countscounted_byA counts B6proposed here
published_bypublishesA is published by B422inherited from governance-beat-ontology
syndicatessyndicated_inA syndicates B9proposed here
captured_incapturesA is captured in B515inherited from portugal-ontology
appears_incarriesA appears in B140inherited from altitudes.json (Concept to Unit)
flagsflagged_byA flags B25inherited from altitudes.json edge_registry
advisesadvised_byA advises B16proposed here
classified_asclassifiesA is classified as B138proposed here
namesnamed_inA names B14proposed here
part_ofhas_partA is part of B13inherited from governance-beat-ontology
member_ofhas_memberA is a member of B29proposed here
works_foremploysA works for B3proposed here

How many voices, not how many pages

A claim is as strong as the number of independent parties that state it, not the number of pages that carry it. A person is counted with the organisation they speak for, and an outlet that passes a statement on is a relay, not a second origin. The fact-check desk grades the same claims by reading their captures (the spectrum of evidence); this is the reading the graph gives from its edges alone.

Echoes: one origin, many relays (4)

Unnamed origins (3)

Stated only by sources a page does not name: a gap in the evidence, not a party.

Every claim

ClaimStatusIndependent originsRelaysCaptures that carry itOpen tension
Edge protections went live hours before disclosure: Cloudflare at 03:02 UTC; Imperva, Akamai and Fastly on 21 confirmed501
Triggering the bug is much easier than turning it into code execution; the CVSS vector says attack complexity confirmed302
The flaws were found by researchers using frontier AI under OpenAI's Patch the Planet initiativereported301
None of the public proof-of-concept exploits reviewed by VulnCheck has the correct mechanism; a lab reproductireported301
The release moved forward from 22 October 14:00 UTC to 21 October 14:00 UTC because of the leakconfirmed301K-010
PHP is used by almost 70% of websites whose server-side language is knownreported303
All PHP versions from 5 onwards are affected by at least one of the flawsdisputed302
Amazon and Cloudflare saw sites being probed for the flawconfirmed313
Chainguard unilaterally broke the embargo on 21 October at 07:41 UTC by publishing built images containing thedisputed201
The last PHP core RCE, CVE-2024-4577, was exploited in the wild one day after disclosure and in KEV three daysreported201
watchTowr confirmed in public that the bugs were real and posted both CVE numbers before the releasereported202
The out-of-memory issue was found in a 2024 audit by Quarkslab (funded through OSTIF and the Sovereign Tech Agconfirmed202
Quarkslab's published audit summary lists 27 findings, two redacted because their fixes were complex and in prreported203
Remote code execution is confirmed on PHP-FPMdisputed203K-008
The fixes were released at 14:00 UTC on 21 Octoberdisputed201K-010
Calif found the flaws first: discovery 1 August, hash commitment 5 August, report to PHP 11 Augustconfirmed202
Wiz Research independently discovered the first flaw on 19 August and reported on 24 Augustreported200
In researchers' own tests, pre-authentication RCE was confirmed against WordPress, Drupal, Joomla, MediaWiki, reported201
Edinburgh and Oxford councils, the Met Police and the Office for Budget Responsibility were unavailable; Bristreported213K-005
VulnCheck counts about 2.6 million internet-facing hosts exposing PHP; Censys, of the 2.58 million hosts it sareported233
Frontier AI found the flaw ahead of attackers, giving defenders time to preparedisputed101
Exploit attempts across Cloudflare's network: thousands in the ten hours before announcement, tens of thousandreported101
CISA has not observed exploitation; neither CVE is in the Known Exploited Vulnerabilities catalogconfirmed101
The flaws were disclosed on 22 October 2026contradicted104
The fix was authored on 18 October at 15:26 UTC and entered the public branches at 14:06 UTC on 21 October, wiconfirmed100
The fix removes longjmp() for out-of-memory errors in favour of a delayed soft OOM at the next VM safe point aconfirmed103
Both bugs are in the C engine, not in PHP code: the allocator's longjmp-based bailout on out-of-memory, and reconfirmed102
The GitHub advisories credit four reporters: lcfr-hax (Calif), sagitzadik-wiz (Wiz), amyb-oai (OpenAI) and tomconfirmed103
The risks require immediate patching across United States Government departments and agenciesreported101
No exploitation observed on Huntress partner systems as of 20:30 UTC on 21 October; no public exploit code knoreported101
No traffic matching the php2shell exploit patterns was seen during Imperva's pre-disclosure monitoringreported101
Automated exploitation attempts were seen in Latvia; none succeededreported100
Latvia restricted access from abroad to several state digital resources, possibly until 26 October; lsm.lv andconfirmed101
On 20 October at about 15:00 UTC the two CVE IDs began circulating on forums and social media with a wrong relreported102
The leak started with an anonymous Hacker News post citing a reliable source, which came down after screenshotreported101
Mitigation advice given to a few critical-infrastructure providers from about 23:00 UTC on 20 October may havereported101
Calif mistakenly published a video around 20:00 UTC on 20 October showing its proof of concept against a numbereported102
Patching the demonstrated paths does not make the bailout mechanism safe; more paths should be expectedreported101K-011
As of 14:40 UTC on 25 October, no named organisation has said it was compromised through php2shell. Exploitatireported1013
Reports of active exploitation existreported101
The UK's NCSC, the NSA and their counterparts in the EU and Australia advise taking systems offline where patccontradicted105
Organisations that cannot update immediately, or that run PHP 8.1 or older, should take PHP-based systems offlconfirmed101
If an immediate update is not feasible, take the system offline until it can be fully mitigatedconfirmed102
Updating is the only complete mitigation; the configuration measures reduce exposure to specific paths and do confirmed104
OpenAI independently reported the same root cause on 11 August, with further vectors on 18 Septemberreported101
The pre-announcement was published at 19:30 UTC on 20 Octoberdisputed101
Unauthenticated RCE over HTTP against Apache mod_php with default settings, before any application code runsconfirmed102K-008
About 6,000 potentially affected resources in Latvia, a few hundred in the public sectorreported101
674 products in the NCSC-NL inventory: 206 vulnerable, 46 fixed, 418 under investigation, 3 not vulnerableconfirmed100
Two critical vulnerabilities, CVE-2026-109618 and CVE-2026-109619, each CVSS v4.0 9.2, fixed in PHP 8.5.12, 8.confirmed106
A web application firewall may provide some protection until systems are patcheddisputed101
Weird Gloop turned off its wiki web servers for 13 hours and still served about 94% of page views from cacheconfirmed101
Parts of Wikipedia, Edinburgh council, French government sites, the University of Geneva, online shops and thereported114
An exploit attempt hit an Amazon honeypot on 17 October from an anonymisation network; proof-of-concept attempreported112
Cloudflare observed attack traffic targeting its customers after the leak, with attackers mutating payloadsreported112
Chainguard's team found the same bugs independently with an AI harness and a frontier model after a researcherreported111
The most severe flaws ever detected by AIreported112
There is no evidence yet that hackers have exploited the flawreported111
Something like 30 million websites could be affectedreported111
70% of the Internet is affectedunverified110
Edinburgh council's site went offline late on 21 October; the council called it 'essential maintenance' and direported122
Finland's state IT provider Valtori restricted public traffic to government web services from 12:45 local timereported121
Oxford City Council: 'a precaution because of a worldwide issue with the underlying technology and is not a cyreported121
The Dutch government took NCSC.nl offline as a precaution, with no active misuse seen yet; Dutch press reportereported133
'Where immediate remediation is not feasible, organisations should consider taking the system offline until itdisputed133
watchTowr sees active exploitation attempts and lists the flaws as exploited in the wildunverified137
The Wikimedia Foundation took down a number of systems 'as a precautionary measure until they can be safely pareported143
The flaws are CVSS 10.0contradicted005
The 8.5.12 fix may be incomplete, or there is a third, different bugunverified010K-011
Criminals are using AI to 'vibe code' an attack methodunverified011

Zooming in: the fractal layers

The ontology

Kinds of node:

KindAltitudeNodesWhat it is
Claimstory70One sentence this site carries, with its sources and a status word (data/claims.json).
Numberstory17A figure someone published, with what it measures (data/numbers.json).
Eventstory68A dated moment on the timeline (data/timeline.json).
Exploitation signalstory20One party's report of exploitation, attempts or none seen (data/exploitation.json).
Advicestory16What one agency told operators to do, chiefly whether to take systems offline (data/agencies.json).
Tensionstory12A row of the fact-check desk's contradiction ledger: claims that measure differently, dispute or contradict each other. A node, because the grammar has no self-inverse edge.
Topicstory8A class in the topic taxonomy of claims.
Phasestory8A class in the phase taxonomy of the timeline.
Partyworld363A person, organisation, agency, outlet, group, registry, platform or project (data/entities.json); its class is in 'class'.
Sourceevidence454A page in the evidence vault's manifest (data/sources.json).
Captureevidence515One time the vault saved a source: its files and their hashes. The first fractal layer below a source.
CVEanchor3An anchor node: a CVE identifier, where the story graph joins the code-review graph (data/review.json) and the outside world (cve.org). It has no authority of its own.

Verbs this graph will not use, and why:

The grammar is the estate's, from graphs.sgit.ai; the files are data/ontology.json (kinds, verbs, taxonomies, formulas), data/entities.json (one node per party, whatever a page calls it) and data/attribution.json (who states each row). The graph is data/graph.json. Kept by the ontologist. The component that draws it is documented for every agent on the graph component page.