Eight eMudhra intermediate CA keys turned out to be trivially guessable numbers. Browsers blocked them within hours, but servers, containers and CI runners that rely on bundled trust stores may still trust the broken chain until you update and rebuild them.
On October 17, a researcher calling themselves Wayne sent the browser root programs a message, "We have a problem here," signed with the private keys of eight eMudhra intermediate certificate authorities. All eight chain to roots that Mozilla, Google, Apple and Microsoft trust. Firefox and Chrome blocked them the same day, Apple and Microsoft by October 20, and eMudhra revoked them.
The keys weren't stolen. They were never secret.
What went wrong
A P-384 private key should be a random 384-bit number. eMudhra's eight were 4, 56, 66, 115, 155, 156, 230 and 237. Anyone holding a public certificate could recover its key by trying the numbers 1 to 255, which takes milliseconds.
The certificates date from April 2025. For about eighteen months, anyone could have used them to issue a trusted certificate for any domain and impersonate that site to traffic they could intercept. How eMudhra generated keys this weak hasn't been explained yet.
Browsers are covered. Your servers may not be.
Browsers were protected twice. Their blocklists, Mozilla's OneCRL and CRLite and Chrome's CRLSets, distrusted the intermediates within hours. And because Chrome, Firefox, Edge and Safari require Certificate Transparency, a forged certificate would have had to appear in a public log first. None has, and there is no confirmed exploitation.
Most other software has neither defense. It checks neither CT nor revocation and trusts the CA bundle it shipped with. That covers a lot of production: Python services using certifi, Go binaries, container images, CI runners and appliances. They keep trusting the broken intermediates until someone updates the bundle and redeploys.
What to do
Update CA-certificates, certificate and Go wherever your workloads run, then rebuild your images. A patched host does nothing for an image built last month. Fixes are out for most platforms, with Node.js and Fedora still pending at the time of writing. The full list is on the disclosure site.
Then test from inside your containers and hosts:
curl https://dv-g3b-emudhra.we-have-a-problem.com/
curl https://dv-g3b-aaa-emudhra.we-have-a-problem.com/A certificate error is the result you want. If either command returns a page, that environment still trusts the compromised chain.
The takeaway
Browsers can now respond to a CA failure in hours. The rest of your stack moves only as fast as you can find every copy of its trust store. If you don't have that inventory, a Zazmic Security Posture Assessment will surface it. Talk to us before the next one.
