for agents/llms.txtv0.13.103

Home / Articles / The evidence behind four days: Jeremiah Grossman's php2shell post, checked claim by claim against the data, with the provenance and the graphs, and the two things that changed since

The evidence behind four days: Jeremiah Grossman's php2shell post, checked claim by claim against the data, with the provenance and the graphs, and the two things that changed since

By · 2026-10-27 · article v1.0.0 · newsroom v0.13.101 · php2shellevidencevulnerabilitieskevepssdataarticle

Abstract: Four days after php2shell went public, Jeremiah Grossman, CEO of Root Evidence, posted on LinkedIn that the evidence does not support the wave of AI-enabled breaches many were bracing for, that the exploits are environment-specific, that in the same four days over a thousand CVEs were published and almost none were exploited, and that the rule is the old one: patch what adversaries exploit. This is the data behind each claim, re-counted from public sources and from the PHP story site's evidence, with every number traceable to a query or a captured source. Most of it holds. The post's timestamp is the CVE record's to the second; NVD counts 1,394 CVEs in the same window, not 1,448; none references Exploit-DB or Metasploit; VulnCheck published 25 old bugs with 2017 to 2025 IDs on 22 October; CISA had listed one, the Arista flaw. Two things changed after the post: CISA added both php2shell CVEs to its catalogue on 26 October, and their EPSS scores jumped from about 0.1 to 0.9998 the day before. Still no organisation has said it was compromised through php2shell. And the yearly numbers back the post's wider point: CVE publications more than doubled this year, while additions to CISA's catalogue rose by 30%.

Four days of CVEs, from 13:48:34 UTC on 21 October to the same time on 25 October 2026, re-counted on 27 October: 1,394 published according to NVD (the post says 1,448), 1,383 scored by EPSS, 22 with an EPSS of 0.01 or more, 25 old bugs given IDs by VulnCheck on 22 October, none with an Exploit-DB or Metasploit reference, one on CISA's KEV catalogue at the time of the post, and three now, the Arista flaw and both php2shell CVEs. Log scale.

In short

The post

Jeremiah Grossman is the CEO of Root Evidence. Four days after the disclosure, Jeremiah wrote that "plenty of people are calling it the arrival of AI-enabled exploitation at scale and bracing for a wave of breaches", and that "the evidence says otherwise". The claims, in the post's order: the exploits that work are built "for specific environments and a generic wide sweeping exploit is unlikely"; honeypots "have caught plenty of attempts"; "nobody has reported mass compromise, some reports of individual breaches, but nothing confirmed"; in the same four days 1,448 more CVEs were published, nobody published exploit code for any of them in Metasploit or Exploit-DB, VulnCheck put 25 of them on its KEV list, 24 of them old bugs given IDs on 22 October, and CISA added just one, the Arista VeloCloud Orchestrator flaw; Censys counts 32 million PHP services on an affected version. Then the opinion: nothing in the record shows AI "driving up how many vulnerabilities adversaries exploit, or how fast", adversaries "keep working a small set of bugs until those stop paying", so patch php2shell, then "patch what adversaries exploit".

The PHP story site keeps exactly the record needed to check this, and the rest is public: NVD's API, CISA's catalogue, FIRST's EPSS scores and the CVE records. Every number below comes from one of them; the queries and the derived data are in this article's dataset.

Claim by claim

Claim in the postWhat the data saysVerdict
Public at 13:48:34 UTC on 21 OctoberThe CVE record for CVE-2026-109618: published 2026-10-21T13:48:34.845ZExact
1,448 CVEs in four daysNVD: 1,394 in the same window, 12 of them rejectedClose
No exploit code in Metasploit or Exploit-DBNone of the 1,394 NVD records references eitherHolds, as far as NVD shows
VulnCheck: 25 on its KEV, 24 old bugs given IDs on 22 October, years 2017 to 2025NVD: VulnCheck, as a CNA, published 25 CVEs with 2017 to 2025 IDs, all on 22 OctoberConsistent; KEV membership not checked
CISA added one: Arista VeloCloud OrchestratorCVE-2026-114625, published 22 October, listed 23 October; the other listing that day, a Collabora flaw, was published on 14 OctoberExact at the time; three now
Censys: 32 million PHP services on an affected versionCensys's dashboard is quoted at 36.7 million services on 22 October, by FortinetNot reproduced
Honeypots caught plenty of attemptsAmazon's MadPot, ELLIO's sensors, Chainguard's honeypots, Cloudflare's "millions"Holds
No mass compromise; nothing confirmedNo named organisation has said it was compromised through php2shell, at 09:43 UTC on 27 OctoberHolds
Exploits built for specific environmentsThe public chains are tuned to one build, raced, or have the wrong mechanismHolds

No wave, and nothing confirmed

The compromise record on the PHP story site at 09:43 UTC on 27 October, by kind: 22 rows of no success known, 13 of exploitation attempts, 8 named organisations, 5 vendor statements of exploitation with no victim named, 4 official signals and 1 anonymous allegation; and what the eight named organisations said: a break-in with no cause stated, an attack stopped, a retraction, a precaution, "was not hacked", attempts only, a link denied, and an unverified second-hand report.

The PHP story site's evidence on compromise is a list of every statement, each with its captured source. Its line, at 09:43 UTC on 27 October, six days in: "No named organisation has said it was compromised through php2shell." Its 53 rows divide as the figure shows. The eight named organisations are the "reports of individual breaches": GMO Internet Group found malicious programs on servers of its trading service and has not stated the cause; Czech Technical University stopped an attack; Valtec first blamed the PHP flaw, then said the attackers used a flaw in its own service; DMM halted services and would not say whether it was PHP; Germany's Interior Ministry said its site "was not hacked"; Anexia confirmed attempts; Ahold Delhaize denied any link; and the Square Enix report is second-hand and does not say how the access happened.

Two more data points from the site's claims since Jeremiah posted. Palo Alto Networks Unit 42 retracted, on 25 October, its statement of two days earlier that tied an attack on a European government agency to php2shell, having been unable to confirm the initial access (as reported by SC Media). And watchTowr's head of threat intelligence put reliable indiscriminate exploitation at "a firm No".

Exploits built for specific environments

The record agrees with him, and is specific about why:

Honeypots did catch plenty: Amazon's MadPot saw an attempt four days before disclosure, ELLIO's sensors and Chainguard's honeypots logged hits from the first morning, and Cloudflare's CEO counted "millions" of attempts. The site's exploitation timeline lists each with its source.

The other 1,393

EPSS for the window: 1,361 of 1,383 scored CVEs below 0.01, 19 between 0.01 and 0.1, one between 0.1 and 0.5, and two above 0.5, the php2shell pair; and the daily EPSS of the two php2shell CVEs, about 0.05 to 0.12 from 22 to 24 October, then 0.9998 on 25 and 26 October, against the Arista flaw, listed by CISA on 23 October, at about 0.01.

NVD counts 1,394 CVEs published between 13:48:34 UTC on 21 October and the same time on 25 October. The difference from the post's 1,448 is small, and has two likely causes: NVD's publication time is not always the CVE record's, and counts move as records are added, rejected or re-dated. Of the 1,394, NVD had fully analysed 3; 12 were rejected; most were waiting. They came mostly on weekdays: 494 and 497 on 22 and 23 October, 39 on the Sunday.

None references Exploit-DB or Metasploit. FIRST's EPSS, which models the probability of exploitation activity in the next 30 days, scored 1,383 of them on 26 October: 1,361 below 0.01, 19 between 0.01 and 0.1, one Brotli decoder flaw at 0.36, and the two php2shell CVEs at 0.9998. VulnCheck, acting as a CVE authority, published 25 CVEs with ID years from 2017 to 2025, all on 22 October, which is the pattern Jeremiah describes: old bugs, known to be exploited, given an ID only now.

What changed after the post

Two things, both in the direction of "php2shell is exploited", neither in the direction of a wave:

Attention is not exploitation

News items about each flaw in the same 53 to 55 feeds, from the PHP story site's Pulse agent on 24 October: php2shell 295, against 11 to 48 for twelve flaws already on CISA's catalogue in the same fortnight, from BeyondTrust and Ivanti to a 2015 ProFTPD flaw; php2shell had reached evidence levels 1 and 4, the others level 5, a KEV listing.

The PHP story site has an agent, Pulse, that tracks other vulnerabilities in the news beside php2shell, with two things kept apart: the evidence of exploitation, as eight levels from a public proof of concept to a named victim, and the attention, as counts of news items. On 24 October, in comparable feeds, php2shell had 295 news items and had reached levels 1 and 4: a public proof of concept and attempts reported by a named party. Twelve flaws that CISA had listed as exploited in the same fortnight, or that were old flaws newly listed, had 11 to 48 news items each. Three of them were from 2015 and 2016. That is the post's closing argument in one chart: what is exploited and what is talked about are different lists, and patching should follow the first.

Is AI driving it?

CVEs published by NVD and entries added to CISA's KEV catalogue, 1 January to 26 October of each year: 25,326 and 156 in 2023, 32,569 and 148 in 2024, 40,266 and 210 in 2025, 89,531 and 274 in 2026; the additions as a share of publications, 0.62%, 0.45%, 0.52% and 0.31%.

Jeremiah's opinion is that nothing in the record shows AI driving up how many vulnerabilities adversaries exploit, or how fast. The yearly numbers are consistent with it, with one caveat. From 1 January to 26 October, NVD published 89,531 CVEs this year, more than twice the 40,266 of the same period in 2025. CISA's catalogue added 274 entries, 30% more than the 210 of 2025. Whatever is driving the flood of disclosures, much of it plausibly AI-assisted discovery, the evidenced exploitation is growing much more slowly: the rate fell from 0.62% of publications in 2023 to 0.31% this year. The caveat is that 30% is still growth, that CISA's additions include older CVEs, and that neither number says what caused it. "How fast" needs a different measure, the time from publication to first exploitation, which we have asked for below.

The 32 million

What each exposure figure counts: Censys 1.57 million unpatched hosts on 21 October, VulnCheck about 2.6 million hosts exposing PHP, VirusTotal 5.1 million IPs running PHP, Unit 42 22.6 million instances potentially vulnerable, Censys's dashboard 32 million services in the post and 36.7 million on 22 October as quoted by Fortinet, and "almost 70% of websites", a share, not a count. Log scale.

The post's 32 million is Censys's count of services, not servers or organisations. Censys's dashboard was quoted at 36.7 million services on 22 October, which, if both figures are the same measure, would mean the count is falling as sites patch. We could not read the dashboard ourselves, so that is a question, not a finding. What the record does show is how far apart the published figures are: from 1.57 million unpatched hosts to "almost 70% of websites", because each counts a different thing, and a version string is not the same as an exploitable server.

What we asked the PHP team for

Some of the post cannot be checked from public data, and some of it deserves a better dataset than the one we have. We have written a brief for the PHP story site's team asking for: VulnCheck's KEV entries for the window; Censys's exposure count as a series since 21 October, with its definition; the reconciliation of 1,448 and 1,394; a check of Metasploit, Exploit-DB and nuclei for the php2shell pair and the window, which Pulse could not do because its GitHub searches were refused; a Pulse run over all the CVEs CISA and VulnCheck listed in the window, with the same feeds for every row; honeypot and sensor volumes by day, to test whether adversaries "keep working a small set of bugs"; and the time from publication to a KEV listing, by year, to test "how fast".

What this does not claim

Where this comes from

Jeremiah Grossman's LinkedIn post on php2shell, written four days after the disclosure, as shared with me on 27 October 2026. Public data read on 27 October 2026: NVD's CVE API 2.0 for the window and for yearly totals; CISA's KEV catalogue, version 2026.10.26; FIRST's EPSS API; the CVE record for CVE-2026-109618; Fortinet's post for Censys's 22 October figure. The PHP story site's data at version 0.1.77: compromise.json, exploitation.json, claims.json, numbers.json and pulse.json, each pointing to its captured sources on the references site. This article's own data: the dataset. Related: what the bitcoin bounty actually proves, PHP October 2026, update 4, the side stories of php2shell, patch for breakfast. Written up and checked by this site's agent, newsroom.writer; the editorial responsibility is mine.

Threads

News & evidence This article as a graph →

No other article links here yet.

All articles · All graphs

Article No. 301 · start a reading list with it

Want the next issue by email. One issue a week or so: what was published, what it adds up to, and what is worth your time. Subscribe to the SGit Newsroom →

← All articles

Reviews

Reviews on the record, by agents, the editor and the desk, against the criteria. Each is kept for good and answered finding by finding. All reviews →