Ndovu elephant mark ndovu ai lab / podcast / Distill HN

Distill HN · 2026-10-22

Sixty-Three Days: AI Found PHP's Worst Bug

An AI-assisted discovery forced a global PHP emergency patch, eMudhra's certificate keys cracked in milliseconds, and OpenAI's agent fleets arrived to claim the moment.

10:44 ·9 chapters ·transcript
0:00 / 10:44

Keys: space/K play-pause · J/L jump 10s · arrows on the waveform nudge 5s

01 - Chapters

9 chapters

02 - Transcript

Read along

The full episode transcript, timed to the audio. Click any line to jump there; the current line lights up while you listen.

CorrespondentSixty-three days. Something found that bug on August nineteenth, and the world wasn't told to emergency-patch until October twenty-first.

HostAnd the something wasn't a person. Wiz's writeup credits AI assistance in the discovery.

CorrespondentWhich means an emergency PHP patch and OpenAI's agent showcase are not two stories this week. They're one story in two jackets.

HostWith every web-serving PHP installation on the planet in scope.

HostWelcome to Distill, the show that reads what the AI leaders and labs publish, so you don't have to. This week two security emergencies swallowed everything, and both trace back to trust that didn't hold.

CorrespondentHere's the route. First, PHP2Shell — the emergency, and the awkward fact that AI found it. Then OpenAI's agent showcase and the missing permissions layer, then eMudhra's eight broken keys. We close with supply-chain hits, Google's contradictory week, and what should stick.

CorrespondentStart with what broke. PHP disclosed two critical bugs, and both give unauthenticated remote code execution — an attacker needs no login.

HostThe identifiers, for your notes: CVE twenty-six ten-ninety-six-eighteen, and its sibling, ten-ninety-six-nineteen. But the scope matters more — every installation serving web requests.

CorrespondentSo why is mod_php the worst case?

HostBecause mod_php runs PHP inside the web server process itself. Compromise there reaches the whole server, not one script.

CorrespondentThe fixes shipped as point releases across the supported branches — eight point five point twelve on the newest, and equivalents back through eight point two.

HostThe advisory's language was blunt, and CISA joined it: patch every web-serving installation now.

CorrespondentNow the timeline, because this is where it gets strange. Wiz named it PHP2Shell, and their writeup puts discovery on August nineteenth.

HostPHP acknowledged it September twenty-first, then patched and disclosed October twenty-first. Sixty-three days from discovery to disclosure, with AI in the discovery.

CorrespondentHold that detail — it's the hinge for the agent conversation. First, the reception: the official advisory drew fifteen hundred three points and six hundred forty-nine comments, the week's largest thread.

HostThe PHP Foundation posted a response promising strengthened security processes; it pulled six hundred sixty-nine points. AWS published its own bulletin on affected PHP web runtimes.

CorrespondentNot everyone bought the maximal severity, though. A dissenting analysis, titled roughly "there isn't an easy exploit," argues practical exploitation is harder than the severity implies.

HostYou had thoughts on that one.

CorrespondentMy position: patch anyway. "Harder to exploit than advertised" describes the first attempt, not every attacker who reads the advisory.

HostThere was a second fight inside the patch-now camp — patch immediately, or mitigate temporarily with nginx workarounds while you test.

CorrespondentI'm with the warnings there. Configuration band-aids fail quietly; nothing tells you when yours stopped covering.

HostSo: a global emergency, found with AI help, disclosed on a sixty-three-day clock. Which raises the obvious question about what else AI is finding — and OpenAI had a ready answer this week.

HostOpenAI ran the week's agent showcase in two posts. "Patch the Planet" describes global vulnerability-response coordination as agents uncover vulnerabilities.

CorrespondentGive me the reception. Showcases always read better in the announcement than in the comments.

HostTwo hundred twenty-nine points and one hundred fifty-six comments — solid, not explosive. The companion post sent thousands of agents after new leads in biological data and took one hundred thirty-one points.

CorrespondentHere's my problem with the timing. We just walked through a real, emergency-patched RCE that AI found. The showcase isn't a promise anymore — it's a receipt.

HostThat's exactly the edge PHP2Shell gives the pitch. AI finding critical RCEs is no longer hypothetical; it happened, with a sixty-three-day lag and a global patch cycle.

CorrespondentBut the showcase posts skip the question I care about. When agents act on your behalf, who's allowed to do what, and who finds out?

HostThat layer is appearing in parallel. Alter — out of Y Combinator's summer batch — launched access control for multi-user agents, the agents shared across a team.

CorrespondentFifty-two points, twenty comments. Small numbers next to OpenAI's, but the gap it names is real: fleets need permissions and audit trails, not just capability.

HostOne more name while we're here. Anthropic's Claude Duet front-paged the same day — and all we have is the placement, so we won't speculate on air.

CorrespondentFair enough. But look at the shape of the week: capability posts from OpenAI, a guardrail launch from Alter, Anthropic in the mix. Governing agents just became a product category.

HostFrom agents nobody fully governs yet, to keys nobody should have trusted at all. eMudhra is next.

CorrespondentSecond emergency. eMudhra, a certificate authority, had eight intermediate CA keys effectively compromised.

HostOne question for listeners who don't live in PKI — what's an intermediate CA?

CorrespondentThe signing authority one step below the root — the thing that actually signs most of the certificates you check.

HostAnd the cryptography is the horror-movie part. Those P-384 private scalars — the secret numbers each key is built from — were effectively one byte long.

CorrespondentOne of them was literally four. Recovery takes at most two hundred fifty-five elliptic-curve point multiplications — the math is a rabbit hole, but the headline is milliseconds.

HostSix of the eight keys signed TLS certificates; the other two signed code. Mozilla blocked the six TLS intermediates within hours of the October seventeenth report.

CorrespondentChrome scheduled removal of emSign ECC Root CA-G3 for October twenty-seventh. Roughly thirty thousand certificates face migration, and about ninety-seven percent were issued via ACME, the protocol that automates issuance.

HostWhich means most of that migration is scripts re-running, not humans filing forms. That's the one mercy in this story.

CorrespondentScott Helme's "Eight Bits of Trust" walkthrough gave the community the full picture, and it landed at eight hundred thirty-eight points.

HostNow eMudhra's framing: the affected intermediates were mostly undeployed, no end-entity certificates — the leaf certs actually handed out — were issued, and the exposed TLS business is about one percent of revenue.

CorrespondentI'll grant the browser story. Mozilla and Chrome moved within hours; that side is genuinely handled.

HostHere's where I don't give ground. Anyone holding the recovered keys can still forge certificates. And non-browser clients — your CI, curl, Python, Node, Go — rarely enforce revocation or Certificate Transparency, the public logs browsers cross-check.

CorrespondentSo the browser blocks don't reach everything that trusts these keys. The trust store you forgot about is the one that keeps trusting.

HostThe community's mood said it best. mitmproxy shipped a literal dash-dash-emudhra option this week — eighty-one points, nineteen comments, pure gallows humor.

CorrespondentAnd that trust-me-not mood didn't stay at the certificate authorities. It spilled straight into the package registries.

HostThe emergencies didn't come alone. The same day as PHP's disclosure, GitLab shipped a critical patch release at one hundred eighty-eight points, and Railway published a security disclosure at two hundred eighty.

CorrespondentThree serious patch events in one news cycle, and the comment sections all drifted to the same place: patch fatigue. Teams can only emergency-patch so many things before the process itself starts failing.

HostThen LiteLLM made it worse. Version one point one-oh-seven on PyPI installed a credential stealer and a backdoor.

CorrespondentSit with the mechanism a second: a routine pip install was the attack. No exploit chain, no phishing — the package manager did the work.

HostThe response is unglamorous. If LiteLLM touched anything of yours, pin and verify your packages, and rotate every credential that install could have seen.

CorrespondentPin, verify, rotate. Boring words that would have made someone's week much less bad.

HostWhich brings us to the week's strangest contrast — Google, somehow, standing on every side of the story.

HostGoogle open-sourced TorchTPU, a native PyTorch back end for TPUs. Three hundred seventy-two points and eighty-five comments — a warm reception for infrastructure.

CorrespondentSame week, OpenAI models announced they're coming to Google Cloud, at two hundred thirty points. Google hosting its most direct competitor's models — I want that tension acknowledged.

HostAcknowledged, then made stranger: a Google Cloud outage disrupted banking operations across Europe in the same window.

CorrespondentSo in seven days, Google ships tooling for its own chips, signs up the competition's models, and takes European banks offline. I don't have one clean story that fits all three.

HostMaybe don't force one. The tooling thread ran alongside anyway — Google published a Rust style guide at one hundred ninety points, and Cloudflare's Tsrs, a port of TypeScript to Rust, kept the rewrite conversation alive.

CorrespondentAnd the one calm item of the week: DuckDB two point zero LTS shipped. LTS meaning long-term support — a low-risk upgrade for data pipelines.

HostAfter a week like this one, "low-risk" might be the rarest commodity in software. Before we close — what should actually stick?

HostThree takeaways. First: if PHP is anywhere in your stack, including container images and transitive runtimes, patch now.

CorrespondentConcretely: eight point five point twelve, or eight point four point twenty-seven, eight point three point thirty-six, or eight point two point thirty-five on the older branches. And CISA's line on unsupported eight-one-and-older hosts that can't update: take them offline.

HostSecond: browsers auto-blocked eMudhra's cracked intermediates, but your CI, curl, Python, Node, and Go trust stores did not. Audit the non-browser trust stores this week — and if LiteLLM one point one-oh-seven touched anything, pin, verify, and rotate everything it could have seen.

CorrespondentThird: agents acting on your behalf need permissions and audit trails. Alter's launch and OpenAI's vulnerability-hunting fleets point at that gap from opposite ends.

HostAnd one calm item to close on — DuckDB two point zero LTS is a low-risk upgrade. Not everything this week was on fire.

HostSources, quickly. Wiz's writeup named PHP2Shell and laid out the AI-assisted timeline; the official PHP security advisory and the PHP Foundation's response post covered the disclosure and the process fixes.

CorrespondentAWS's bulletin detailed the affected PHP web runtimes, and the dissenting "no easy exploit" analysis rounded out that debate. OpenAI's agent pair — "Patch the Planet" and the biology post — plus Alter's launch post carried the agent story.

HostOn trust: Scott Helme's "Eight Bits of Trust" explainer, the eMudhra compromise thread, and mitmproxy's changelog. GitLab's and Railway's disclosures and the LiteLLM compromise report covered the supply chain.

CorrespondentGoogle's TorchTPU announcement and Rust style guide, OpenAI's Google Cloud announcement, the outage report, Cloudflare's Tsrs, and the DuckDB release notes close the ledger.

HostThat's the week.

CorrespondentSee you next week.

0:00