blog / · updated · 4 min read
eMudhra's guessable CA keys: what happened and how to check your estate
Eight intermediate CA certificates were signed with private keys you could guess in 256 tries. Browsers reacted within hours. Your servers, containers and scripts may not have.
What happened
A certificate authority (CA) is trusted to vouch for websites and software publishers. That trust rests on one thing: nobody else can use the CA’s private key.
On 17 October 2026 an independent researcher reported that eight intermediate CA certificates from eMudhra, an Indian CA, had private keys with values below 256. A healthy P-384 key is a random number around 115 digits long. These could be found by trying at most 256 values, and one of them was literally the number 4.
eMudhra attributes it to a faulty script in an April 2025 key ceremony. The script produced a second, weak set of keys with labels similar to the real ones, and the weak ones were picked. The certificates were valid for about 17 months before anyone noticed. eMudhra says only one intermediate reached production and none issued customer certificates. Nobody can prove the keys were not used by someone else in that window.
Six of the intermediates could issue TLS certificates and two could issue code-signing certificates. With any of those keys, an attacker could mint a certificate for any domain, or sign malware, and it would chain to a trusted root.
Timeline
| Date (2026) | Event |
|---|---|
| 17 Oct | Report to Apple, Google, Microsoft, Mozilla and eMudhra. Chrome and Firefox block the intermediates (Firefox via OneCRL). |
| 18 Oct | eMudhra revokes the eight certificates. |
| 20 Oct | Mozilla makes the issue public. Firefox 158.0.1 and ESR updates ship. |
| 20–22 Oct | Apple and Microsoft block the certificates. |
| 22 Oct | eMudhra announces it will exit the global SSL/TLS business. |
| 26 Oct | Microsoft ships out-of-band Windows updates removing seven related certificates. |
| 30 Oct | eMudhra appoints KPMG as external reviewer. |
Mozilla also removed trust in the root that signed the intermediates, and Google removed emSign ECC Root CA – G3 from the Chrome Root Store. The issue is tracked as CVE-2026-111943.
Why browsers being fixed is not enough
Browsers update their trust decisions centrally and fast. A lot of software does not:
- Containers and base images carry a frozen
ca-certificatesbundle from when they were built. - Language runtimes with their own trust store, for example Python’s
certifi, Node.js and Bun, Javacacerts, and Go before 1.27.3 and 1.26.10. - Tools that don’t check revocation. macOS’s
/usr/bin/curlis a documented example. - Appliances, IoT and embedded devices that rarely get updates.
For those, a revoked intermediate is still a valid one until the bundle is updated.
What to do
- Patch the trust stores: OS updates,
ca-certificates, NSS 3.131.1, Electron 44.9.1, Go 1.27.3 or 1.26.10, and runtime updates as they ship. - Rebuild container images instead of only restarting them.
- If you are an eMudhra TLS customer, plan to replace your certificates with another CA.
- Hunt for the affected intermediates in places that matter to you, using the checks below.
Affected intermediates
| Certificate | Use | SHA-256 fingerprint |
|---|---|---|
| EM EV TLS CA – G3B | TLS | E7568FE6E12331F4FD7DE61DA4C7559D0F8EB192A218D4741A3BA75184333838 |
| EM OV TLS CA – G3B | TLS | 98B896625C0C230ADEEC3EB2CF6AAD5001ECF9156A68644E82374CE5833BC25B |
| EM DV TLS CA – G3B | TLS | 42C4ACCD12C4F59597925E1A08A7A90102608543809308D50EC427E118BA1493 |
| EM EV TLS CA – G3C | TLS | 432EC25F0D28DE9006D97BF752F17BBB2CD41F669933FCB072D9A1148D0261F3 |
| EM OV TLS CA – G3C | TLS | CB6E15165AC802E9B3F993F16C25D41F4E81C21EBDE71AE1B012AC00BF9C7C3F |
| EM DV TLS CA – G3C | TLS | 0164D7CEAE5BB909C272AF151FF44B1177AE9B47D9424B94F1D9558C30934D19 |
| EM OV CS CA – G3B | Code signing | 9E39DE2881273ACC225A149C72BA3E0F51424963669AB633EE1DC7DF5DB067B4 |
| EM OV CS CA – G3C | Code signing | 4B2460A466F95FD40113BCDCCA2CEB29B3B093921DE45474DA7DF48874C630B1 |
Fingerprints as published by Qualys. Verify against the CCADB before blocking.
Checks and hunting queries
Which emSign roots does this Linux host or image trust?
awk -v cmd='openssl x509 -noout -subject' \
'/BEGIN CERT/{close(cmd)} {print | cmd}' /etc/ssl/certs/ca-certificates.crt | grep -i emsign
Python’s certifi bundle (used by requests):
grep -c "emSign" "$(python3 -m certifi)"
Windows root store:
Get-ChildItem Cert:\LocalMachine\Root, Cert:\LocalMachine\CA |
Where-Object Subject -match 'emSign|EM (DV|OV|EV) TLS CA|EM OV CS CA' |
Select-Object Subject, Thumbprint, NotAfter
Do any of your endpoints serve a chain through these intermediates?
for h in $(cat hosts.txt); do
openssl s_client -connect "$h:443" -servername "$h" -showcerts </dev/null 2>/dev/null |
grep -qE 'i:.*EM (DV|OV|EV) TLS CA . G3[BC]' && echo "$h"
done
Network telemetry (Zeek): certificates seen on the wire issued by the affected CAs.
zeek-cut ts certificate.subject certificate.issuer < x509.log |
grep -E 'EM (DV|OV|EV) TLS CA . G3[BC]'
Code signed by the affected intermediates (Microsoft Defender for Endpoint, KQL):
DeviceFileCertificateInfo
| where Timestamp > ago(90d)
| where Issuer has "EM OV CS CA"
| summarize Devices = dcount(DeviceId), Files = make_set(SHA1, 20) by Signer, Issuer
A hit is not proof of compromise, but any binary signed through these intermediates deserves a closer look.
Takeaways
- Key generation is part of your attack surface. A ceremony script is code, and code needs tests: a simple check of key size and randomness would have caught this.
- Inventory where your trust stores live, not just which certificates you own.
- Certificate Transparency and public root programs worked. Someone outside the CA found the problem by reading public data.
Sources
- Help Net Security: eMudhra security blunder left trusted CA signing keys exposed
- BleepingComputer: Mozilla, Google, Apple block compromised eMudhra CA certificates
- BleepingComputer: Microsoft releases Windows OOB updates to distrust eMudhra certificates
- Qualys: How to identify compromised eMudhra certificates
- The Hacker News: eMudhra to exit global SSL/TLS business
- eMudhra: statement on the certificate security incident