Building the AI-native SOC for the 99% of companies who can't justify a $500K stack.
All security advisoriesSecurity advisory

eMudhra Intermediate CA Private Key Compromise

Anyone can recover the private keys of eight eMudhra intermediate certificate authorities from their public certificates. Browsers blocked them within hours. Servers, containers, SDKs and appliances that carry their own trust store need an update, and most of them do not enforce Certificate Transparency, so nobody can say for certain they were never attacked.

Status
Browsers, Apple and Microsoft platforms block the intermediates. Trust store and runtime updates are still rolling out, and Chrome removes the root on 27 October.
Affects
8 intermediate CAs, their Sectigo cross-signs, and the emSign ECC Root CA - G3 root
Severity
Not scored. The keys are trivially recoverable, so treat it as critical for any client that still trusts them.
Published

Reflects what was publicly known on the last updated date. Every fact links to a primary source at the end of the page.

On this page
  1. Are you affected?
  2. What to do
  3. Detect and hunt
  4. Patched versions
  5. Workarounds
  6. What happened
  7. Affected certificates
  8. Timeline
  9. Where the accounts differ
  10. Questions
  11. Sources

Are you affected?

Find the row that describes you. For most teams this is a patching exercise; the harder question is whether any non-browser client was attacked before the fix.

  • You use a mainstream browser

    Chrome, Firefox, Safari, Edge

    Protected

    Keep the browser and operating system updated. Every major browser blocked the intermediates between 17 and 20 October, and CT enforcement means none could have accepted a forged certificate before that.

  • You run servers, containers, CI or command-line tools

    Anything with its own trust store: Go, Node.js, Python, Rust, curl, Java

    Update needed

    Update the system trust store and your runtimes, then rebuild images. Find your fixed version

  • You run TLS-inspecting proxies, gateways or appliances

    Egress proxies, API gateways, load balancers, IoT and OT devices

    Update needed

    These validate upstream certificates for every client behind them and often ship a vendor trust store. Check each vendor's update and confirm with the live test below.

  • Your TLS certificates come from eMudhra

    Chaining to emSign ECC Root CA - G3

    Act now

    Replace them with certificates from another hierarchy before Chrome removes the root on 27 October. Details

  • You verify code signed through eMudhra

    The two code-signing intermediates, trusted on Windows

    Low risk

    eMudhra states they never issued a certificate and Microsoft blocks them. Treat any signature that chains through them as untrusted.

What to do

Work through these in order. The first two close the exposure; the last two tell you whether it was used.

  1. Update the system trust store, then rebuild images

    Install the latest ca-certificates package on servers and rebuild container images on updated base images. An image built before the fix keeps the old trust store until it is rebuilt, and a running process keeps the bundle it loaded at start, so restart services after updating.
  2. Update runtimes and libraries that bring their own trust store

    Go, Node.js, Python certifi, Rust webpki-roots and others ship their own root bundle or certificate verifier. Check each against the patched versions. For Node.js the fix is part of the October 2026 security releases.
  3. Confirm each client rejects the intermediates

    Run the live client test from inside each environment, and the offline checks against every bundle you ship.
  4. Hunt for use of the intermediates in TLS telemetry

    Search certificate logs from network sensors and TLS-inspecting proxies for the six TLS intermediates. Queries below

If you are an eMudhra TLS customer

If any of your certificates chain to emSign ECC Root CA - G3, replace them now with certificates from a different hierarchy. Mozilla has already removed the root from NSS, and Chrome's root store update removing it is expected to reach all devices on 27 October 2026. eMudhra initially estimated about 30,000 certificates needed migrating, about 97% of them issued through ACME, and says it is moving subscribers to its RSA root, emSign Root CA - G1. Chrome says it is also reviewing eMudhra's remaining certificates, so a second hierarchy from a different CA is the safer choice.

Detect and hunt

Patching removes trust going forward. It does not tell you whether a client that trusted these intermediates was ever handed a forged certificate. These checks answer both questions.

Check whether a client still trusts them

The incident tracker runs test hosts that serve certificates from a compromised intermediate, directly and through the Sectigo cross-sign. Run these from the environment you want to test: a server, a CI runner, inside a container. A certificate error means the client is protected.

Shell
curl https://dv-g3b-emudhra.we-have-a-problem.com/
curl https://dv-g3b-aaa-emudhra.we-have-a-problem.com/

The tracker's page also runs the full set of twelve hosts in a browser, and publishes the chain each host serves for offline testing.

Scan trust stores offline

The first check looks for the distrusted root by name. Most bundles contain only roots, but some applications pin intermediates in their own stores, so the second check matches all sixteen intermediate and cross-sign fingerprints from the Mozilla incident record. No output from either means the bundle is clean.

Shell
# Prints a line if the bundle still trusts the distrusted root.
# No output means the root is gone.
openssl crl2pkcs7 -nocrl -certfile /etc/ssl/certs/ca-certificates.crt \
  | openssl pkcs7 -print_certs -noout \
  | grep -F "emSign ECC Root CA - G3"
Shell
# Prints the SHA-256 fingerprint and subject of any certificate in the
# bundle that is one of the compromised intermediates or cross-signs.
BUNDLE=/etc/ssl/certs/ca-certificates.crt
cat > /tmp/emudhra-sha256.txt <<'EOF'
E7568FE6E12331F4FD7DE61DA4C7559D0F8EB192A218D4741A3BA75184333838
579480AEA166290BD3C643589E795FC0D0E54E86505D180F1DFF99EFD3199512
98B896625C0C230ADEEC3EB2CF6AAD5001ECF9156A68644E82374CE5833BC25B
5F1DED4DD590AF74631290CF073B122A2AAC6A1FA479778A0BD43579BD832699
42C4ACCD12C4F59597925E1A08A7A90102608543809308D50EC427E118BA1493
45A883F349AEDFD5F3A649B5498FFB121712BA8B448F3F2A91DBC5A766FCDDBE
432EC25F0D28DE9006D97BF752F17BBB2CD41F669933FCB072D9A1148D0261F3
FD9D5C2DBBD4995AB69B8D50C439D9527B00529199C2FD01B2174EB58F07021F
CB6E15165AC802E9B3F993F16C25D41F4E81C21EBDE71AE1B012AC00BF9C7C3F
7485B51C0ED192878FA1D2F948FB529AE1842CC5086C4B67F7BE5B2039DE9489
0164D7CEAE5BB909C272AF151FF44B1177AE9B47D9424B94F1D9558C30934D19
62B7F9868263F72F6911FC78CEAF72C1979158B7368BF648683BB2AA39B02E72
9E39DE2881273ACC225A149C72BA3E0F51424963669AB633EE1DC7DF5DB067B4
A496E23AC0CAB8155FC9B117B97EAE368EFCBB9041AEC8804D5A308D2D01C2D8
4B2460A466F95FD40113BCDCCA2CEB29B3B093921DE45474DA7DF48874C630B1
84112972B8E59D14560AE7E7119654474AAD119990CF3722BFC1E3B91615E1FD
EOF
tmp=$(mktemp -d)
awk -v d="$tmp" '/-----BEGIN CERTIFICATE-----/{n++; f=d "/" n ".pem"}
  n{print > f} /-----END CERTIFICATE-----/{close(f)}' "$BUNDLE"
for f in "$tmp"/*.pem; do
  openssl x509 -in "$f" -noout -fingerprint -sha256 -subject
done | tr -d ':' | grep -iF -A1 -f /tmp/emudhra-sha256.txt
rm -rf "$tmp"
Common trust store bundle locations
PlatformBundle path
Debian, Ubuntu, Alpine/etc/ssl/certs/ca-certificates.crt
Fedora, RHEL/etc/pki/tls/certs/ca-bundle.crt
macOS command-line tools/etc/ssl/cert.pem
Python certifiThe path printed by python3 -m certifi

Container images and runtimes

Images carry the trust store they were built with. Check the bundle inside an image without running it, then check runtimes that do not read the system store.

Shell
# Checks the trust store baked into a container image without running it.
IMAGE=your-registry/your-image:tag
cid=$(docker create "$IMAGE") &&
docker cp -L "$cid:/etc/ssl/certs/ca-certificates.crt" - | tar -xO \
  | openssl crl2pkcs7 -nocrl -certfile /dev/stdin \
  | openssl pkcs7 -print_certs -noout \
  | grep -F "emSign ECC Root CA - G3"
docker rm "$cid" > /dev/null
Shell
# Java: lists emSign entries in the JDK's default trust store.
keytool -list -cacerts -storepass changeit | grep -i emsign

# Python certifi: prints the bundle path to scan with the checks above.
python3 -m certifi

# Node.js: prints any bundled root matching the distrusted root.
node -e 'const { X509Certificate } = require("node:crypto");
for (const pem of require("node:tls").rootCertificates) {
  const c = new X509Certificate(pem);
  if (c.subject.includes("emSign ECC Root CA - G3")) console.log(c.subject);
}'

Match the full name emSign ECC Root CA - G3. Other emSign roots are not part of this incident, and Mozilla is not removing emSign Root CA - G1 at this time. For a custom Java keystore, export it to PEM and run the fingerprint check.

Hunt in TLS telemetry

A forged certificate would be a leaf for a real domain whose issuer is one of the six TLS intermediates, reached either directly or through the Sectigo cross-sign under AAA Certificate Services. Because CT logs now reject these chains and none were logged before the block, it would carry no embedded CT timestamps and would not appear in any CT search. Look for the intermediates by name in certificate logs from network sensors.

Zeek + jq
# Zeek JSON logs: certificates whose subject or issuer is one of the six
# compromised TLS intermediates. Any hit after 17 October deserves a look.
jq -c 'select(((.["certificate.subject"] // "") + " " + (.["certificate.issuer"] // ""))
  | test("CN=EM (DV|OV|EV) TLS CA - G3[BC]"))' x509.log

# The same check on the leaf issuer recorded per connection.
jq -c 'select((.issuer // "") | test("CN=EM (DV|OV|EV) TLS CA - G3[BC]"))
  | {ts, "id.orig_h", "id.resp_h", server_name, issuer}' ssl.log
  • Zeek also records a fingerprint per certificate. Its hash algorithm is configurable, so confirm it is SHA-256 before matching against the fingerprint list.
  • Passive sensors only see certificates in TLS 1.2 and earlier. In TLS 1.3 the certificate is encrypted and Zeek writes no x509.log entry. For TLS 1.3 traffic, hunt in the logs of TLS-inspecting proxies, which see the upstream chain, and in client-side logs.
  • Prioritise clients that do not enforce CT and talk to high-value endpoints: CI runners pulling dependencies, services calling payment or identity APIs, and devices updating firmware over HTTPS.
  • A hit on a test host from the incident tracker is your own check. A hit on any other hostname is worth treating as a possible interception until explained.

Use Certificate Transparency for your own domains

CT cannot reveal a forged certificate used against a non-CT client, but it does answer whether you hold legitimate eMudhra certificates that need replacing, and it is worth keeping as a standing monitor for unexpected issuers on your domains.

Shell
# Lists the issuers of every logged certificate for your domain.
# For any eMudhra or emSign issuer, check whether the chain ends at
# emSign ECC Root CA - G3. Those certificates stop working in Chrome on 27 October.
curl -s 'https://crt.sh/?q=example.com&output=json' \
  | jq -r '.[].issuer_name' | sort | uniq -c | sort -rn

Patched versions

Versions that remove the distrusted root or block the compromised intermediates, as of 21 October 2026. Every row links to the project's own advisory, changelog or commit where one exists, and any newer version also contains the fix.

Operating systems and package managers

Patched operating system and package manager versions
SoftwareFixed inSource
Ubuntu 22.04, 24.04, 26.04, 26.10 (ca-certificates)20260816ubuntu0.22.04.1, 20260816ubuntu0.24.04.1, 20260816ubuntu0.26.04.1, 20260816ubuntu0.26.10.1USN-8944-1
Ubuntu 14.04 to 20.04 ESM (ca-certificates)
Also removes the Comodo AAA Services root.
20230311~14.04.1~esm3, 202402031~16.04.1~esm3, 202402031ubuntu0.18.04.1+esm3, 20240203~20.04.1ubuntu0.1~esm2USN-8944-2
Debian 12 bookworm (ca-certificates)20250419~deb12u2DLA-4845-1
Debian 13 trixie (ca-certificates)20250419+deb13u1DSA-6572
Debian unstable (ca-certificates)
No fix for Debian 11 bullseye.
20260816+nmu1Debian changelog
Fedora (ca-certificates)
Stable on Rawhide. Fedora 43 to 45 updates were still in testing.
2026.2.92_v9.0.319Fedora package spec
Arch Linux (ca-certificates-mozilla)3.131.1-1Arch package
Alpine Linux (ca-certificates)
Available on 3.22 and later stable branches.
20261020-r0aports commit
Chainguard (ca-certificates)20260909-r3Incident tracker
Gentoo (app-misc/ca-certificates)20260816.3.125Gentoo bug 984601
GNU GuixCommit 7608a99Incident tracker
FreeBSD ports (security/ca_root_nss)
Covers the ports package, not the base system trust store.
3.131.1ports commit
Homebrew (ca-certificates)2026-09-25_1homebrew-core #319674

Languages, runtimes and libraries

Patched language, runtime and library versions
SoftwareFixed inSource
NSS3.131.1Mozilla Security Blog
curl CA bundle (cacert.pem)2026-10-20curl CA extract
Cloudflare cfssl_trust2026.10.1cfssl_trust #411
Go
GO-2026-6809, CVE-2026-111943.
1.27.3, 1.26.10Go issue 82345
Node.js
Part of the October 2026 security releases.
22.23.4, 24.22.1, 26.12.1Node.js #66871
Electron44.9.1, 43.8.1, 42.11.16Electron #55126
Bun
Fixed on main after 1.4.3.
Not yet releasedBun #46300
JavaNot yet releasedIncident tracker
Python certifi2026.10.19certifi #440
pip26.2.2pip changelog
uv0.13.4uv #22760
pixi0.82.1Incident tracker
Rust rustls-webpki0.103.16webpki #546
Rust webpki-roots, webpki-root-certs1.0.10webpki-roots #133
Rustup1.29.2Incident tracker
PHP composer/ca-bundle1.4.16, 1.6.0ca-bundle 1.6.0
Elixir castore1.0.22castore #90
Erlang certifiNot yet releasedIncident tracker
Perl Mozilla::CA20261020Mozilla::CA changes

The fixes take two forms. Go, rustls-webpki and Electron block the eight intermediates directly; Node.js does that and also updates its root store; every root bundle above drops emSign ECC Root CA - G3. Some updates, such as Debian's and Ubuntu ESM's, also remove AAA Certificate Services to cut off the Sectigo cross-signed path. If your software is not listed, check its release notes and run the live client test.

Workarounds until an update ships

Install the vendor update where one exists. Where it does not yet, administrators can distrust the affected roots in the system trust store with these commands, run as root. They come from the incident tracker, which recommends them for expert users only. Test on one machine first.

macOS command-line tools
Shell
sudo cp -p /etc/ssl/cert.pem /etc/ssl/cert.pem.bak &&
sudo awk '/^(###|===) /{skip=0}
  /^=== .*\/CN=(AAA Certificate Services|emSign ECC Root CA - G3)$/{skip=1}
  !skip' /etc/ssl/cert.pem.bak | sudo tee /etc/ssl/cert.pem > /dev/null

macOS itself blocks the intermediates, but the built-in curl, git, python3, perl, ruby and openssl read /etc/ssl/cert.pem without checking revocation, and that file has not been updated. A later macOS update may restore it.

Debian and Ubuntu
Shell
sed -i \
  -e 's|^mozilla/emSign_ECC_Root_CA_-_G3.crt|!&|' \
  -e 's|^mozilla/Comodo_AAA_Services_root.crt|!&|' \
  /etc/ca-certificates.conf && update-ca-certificates
Alpine Linux
Shell
apk add ca-certificates &&
sed -i -e 's|^mozilla/emSign_ECC_Root_CA_-_G3.crt|!&|' \
  /etc/ca-certificates.conf && update-ca-certificates
Fedora, RHEL, CentOS Stream, Rocky Linux, AlmaLinux and Amazon Linux 2023
Shell
d=/etc/pki/ca-trust/source/blocklist; [ -d $d ] || d=/etc/pki/ca-trust/source/blacklist
trust extract --overwrite --format=pem-bundle \
  --filter='pkcs11:object=Comodo%20AAA%20Services%20root;type=cert' \
  $d/Comodo_AAA_Services_root.pem &&
trust extract --overwrite --format=pem-bundle \
  --filter='pkcs11:object=emSign%20ECC%20Root%20CA%20-%20G3;type=cert' \
  $d/emSign_ECC_Root_CA_-_G3.pem &&
update-ca-trust
openSUSE and SLES
Shell
d=/etc/pki/trust/blocklist; [ -d $d ] || d=/etc/pki/trust/blacklist
trust extract --format=pem-bundle \
  --filter='pkcs11:object=Comodo%20AAA%20Services%20root;type=cert' \
  $d/Comodo_AAA_Services_root.pem &&
trust extract --format=pem-bundle \
  --filter='pkcs11:object=emSign%20ECC%20Root%20CA%20-%20G3;type=cert' \
  $d/emSign_ECC_Root_CA_-_G3.pem &&
update-ca-certificates
Arch Linux
Shell
trust extract --format=pem-bundle \
  --filter='pkcs11:object=emSign%20ECC%20Root%20CA%20-%20G3;type=cert' \
  /etc/ca-certificates/trust-source/blocklist/emSign_ECC_Root_CA_-_G3.pem &&
update-ca-trust
NixOS
configuration.nix
security.pki.caCertificateBlacklist = [
  "Comodo AAA Services root"
  "emSign ECC Root CA - G3"
];
FreeBSD 14 and later
Shell
cp /etc/ssl/certs/14bc7599.0 /usr/share/certs/untrusted/14bc7599.pem
cp /etc/ssl/certs/ee64a828.0 /usr/share/certs/untrusted/ee64a828.pem
certctl rehash
NetBSD 10 and later
Shell
certctl untrust /usr/share/certs/mozilla/all/emSign_ECC_Root_CA_-_G3.pem &&
certctl untrust /usr/share/certs/mozilla/all/Comodo_AAA_Services_root.pem
Windows

Microsoft blocks the intermediates through Windows automatic certificate trust list updates, so machines that receive those updates need nothing else. For offline machines or ones with automatic updates disabled, the incident tracker publishes a PowerShell script that adds the eight intermediates and their cross-signs to LocalMachine\Disallowed. Read it before running it, and on managed devices leave the rollout to whoever manages them.

Removing AAA Certificate Services closes the cross-signed path on systems that still trust that root. Older clients may rely on it for other Sectigo chains, so roll the change out gradually and watch for new certificate errors.

What happened

The private keys of eight intermediate certificate authorities operated by eMudhra can be recovered by anyone from the public certificates alone. Six of the intermediates are for TLS and were trusted by the Apple, Chrome, Microsoft and Mozilla root programs. The other two are for code signing and were trusted by Microsoft. Chrome did not need to block those two, because it will not build a TLS path through a CA restricted to code signing.

Anyone holding one of the TLS keys could issue a certificate for any domain that a client trusting the chain would accept, which enables interception of TLS traffic. The same eight keys were also cross-signed by Sectigo under AAA Certificate Services, a root that Chrome and Mozilla had already dropped but Apple and Microsoft still trust.

Because the keys cannot be un-leaked, Mozilla and Chrome are also removing trust in the root these intermediates chain to, emSign ECC Root CA - G3. Every certificate issued under that root, including legitimate ones, stops working in those clients and has to be reissued.

Cause

A P-384 private key should be a random number of roughly 384 bits. According to Mozilla's analysis, each of the eight affected keys was a number below 256, so all of them can be found by trying 256 candidates. One key published after disclosure was the number 4. The keys came from a batch of 24 intermediates generated on 30 April 2025; the affected ones are all of the P-384 keys in the B and C series. Mozilla reported that it could not recover the P-384 keys in the other series.

eMudhra states that the keys were generated on FIPS 140-2 Level 3 hardware security modules, and that an approved deviation in the ceremony to test a wrap and unwrap step produced a second, weak set of keys. Because the key labels were similar, the weak keys were used by mistake to create the certificate requests, including the ones sent to Sectigo for cross-signing. eMudhra says it has not yet confirmed the exact root cause and will re-verify every key ceremony it has run.

Affected certificates

Identify certificates by SHA-256 fingerprint rather than by name: names can be reused, fingerprints cannot. The TLS intermediates were issued by emSign Root TLS CA - G3 and the code-signing ones by emSign Root CS CA - G3. Each eMudhra fingerprint links to its crt.sh entry.

The eight compromised eMudhra intermediates and their Sectigo cross-signs
IntermediatePurposeeMudhra-issued SHA-256Sectigo cross-sign SHA-256
EM EV TLS CA - G3BTLSE7568FE6E12331F4FD7DE61DA4C7559D0F8EB192A218D4741A3BA75184333838579480AEA166290BD3C643589E795FC0D0E54E86505D180F1DFF99EFD3199512
EM OV TLS CA - G3BTLS98B896625C0C230ADEEC3EB2CF6AAD5001ECF9156A68644E82374CE5833BC25B5F1DED4DD590AF74631290CF073B122A2AAC6A1FA479778A0BD43579BD832699
EM DV TLS CA - G3BTLS42C4ACCD12C4F59597925E1A08A7A90102608543809308D50EC427E118BA149345A883F349AEDFD5F3A649B5498FFB121712BA8B448F3F2A91DBC5A766FCDDBE
EM EV TLS CA - G3CTLS432EC25F0D28DE9006D97BF752F17BBB2CD41F669933FCB072D9A1148D0261F3FD9D5C2DBBD4995AB69B8D50C439D9527B00529199C2FD01B2174EB58F07021F
EM OV TLS CA - G3CTLSCB6E15165AC802E9B3F993F16C25D41F4E81C21EBDE71AE1B012AC00BF9C7C3F7485B51C0ED192878FA1D2F948FB529AE1842CC5086C4B67F7BE5B2039DE9489
EM DV TLS CA - G3CTLS0164D7CEAE5BB909C272AF151FF44B1177AE9B47D9424B94F1D9558C30934D1962B7F9868263F72F6911FC78CEAF72C1979158B7368BF648683BB2AA39B02E72
EM OV CS CA - G3BCode signing9E39DE2881273ACC225A149C72BA3E0F51424963669AB633EE1DC7DF5DB067B4A496E23AC0CAB8155FC9B117B97EAE368EFCBB9041AEC8804D5A308D2D01C2D8
EM OV CS CA - G3CCode signing4B2460A466F95FD40113BCDCCA2CEB29B3B093921DE45474DA7DF48874C630B184112972B8E59D14560AE7E7119654474AAD119990CF3722BFC1E3B91615E1FD

Fingerprints are copied from the Mozilla incident record. Mozilla also publishes them as impacted-intermediates.json for trust store operators.

Timeline

All times are UTC. eMudhra's own statements give later dates, which appear to be in India time and rounded.

  1. 2025-04-30

    2025-04-30

    eMudhra creates the eight intermediates in a key generation ceremony. From this point the keys can be recovered by anyone.

    Bugzilla comment 5

  2. 2026-10-17

    2026-10-1718:05 UTC

    An independent researcher reports the recovered keys to Apple, Google, Microsoft, Mozilla and eMudhra, with a signed proof for each key.

    Google Security Blog

  3. 2026-10-1719:45 UTC

    Chrome lands a CRLSet update that blocks the public keys of the six TLS intermediates, which also covers the Sectigo cross-signs.

    Google Security Blog

  4. 2026-10-1720:06 UTC

    The report reaches Mozilla's certificates address, forwarded by the Chrome Root Program.

    Bugzilla 2083449

  5. 2026-10-1721:48 UTC

    Mozilla independently recovers the private keys, confirming the flaw.

    Bugzilla 2083449

  6. 2026-10-1722:59 UTC

    Firefox's OneCRL blocklist update completes for all users on standard configurations.

    Mozilla Security Blog

  7. 2026-10-18

    2026-10-1809:24 to 09:38 UTC

    eMudhra revokes all eight intermediates with reason cACompromise.

    Bugzilla comment 10

  8. 2026-10-19

    2026-10-19

    Apple platforms block the intermediates. The issue is disclosed to downstream trust store operators.

    Incident tracker

  9. 2026-10-19

    Sectigo completes revocation of the eight cross-certificates it had issued for the same keys.

    Bugzilla comment 13

  10. 2026-10-1922:00 UTC

    Android devices receive an equivalent block through Google Play Services. The time is approximate.

    Google Security Blog

  11. 2026-10-20

    2026-10-20

    Microsoft ships blocks through Windows automatic certificate trust list updates.

    Incident tracker

  12. 2026-10-20

    Mozilla ships Firefox 158.0.1, Firefox ESR 115.43.1 and 153.5.1, and NSS 3.131.1, which removes the root.

    Mozilla Security Blog

  13. 2026-10-20

    Mozilla announces emergency removal of trust in emSign ECC Root CA - G3, Chrome commits to the same, and eMudhra stops issuing from every intermediate under that root.

    Bugzilla comments 18 to 21

  14. 2026-10-21

    2026-10-2108:29 UTC

    Mozilla releases Firefox for Android 158.0.2 to fix clients that did not apply the bundled blocklist at startup.

    Mozilla Security Blog

  15. 2026-10-27

    2026-10-27

    Planned: the Chrome Root Store update that removes emSign ECC Root CA - G3 reaches all devices, on Tuesday morning Pacific time.

    Google Security Blog

Where the accounts differ

The CA and the root programs describe the exposure differently. Both accounts are summarised with their sources.

eMudhra says

Incident update and press release

  • Seven of the eight intermediates were never used in production, and the one that was had not issued any certificates.
  • Its infrastructure was not breached and no data was lost.
  • The root distrust affects one customer ecosystem in the United States.

Mozilla and Google say

Bugzilla 2083449 and MDSP

Both can be true. Unused intermediates still had keys anyone could use to sign certificates, and a forged certificate does not need the CA's infrastructure. Nobody has published evidence that this happened, and nobody can rule it out for clients that do not enforce Certificate Transparency.

Questions

Are browsers affected by the eMudhra compromise?

Up-to-date browsers are protected. Firefox and Chrome blocked the intermediates on 17 October 2026, Apple platforms on 19 October and Microsoft platforms on 20 October. Chrome also notes that no certificate chaining to the six TLS intermediates was logged to Certificate Transparency before its block, so CT-enforcing browsers could not have accepted a forged certificate.

What do I need to update?

Anything that carries its own list of trusted certificates: the system ca-certificates package, container base images, and runtimes such as Go, Node.js, Python certifi, Rust webpki-roots and curl's CA bundle. Install the fixed versions, then rebuild images, because an image built before the fix keeps the old trust store.

How do I check whether a system still trusts the compromised intermediates?

Run curl against the test hosts published by the incident tracker, such as dv-g3b-emudhra.we-have-a-problem.com. A certificate error means the client no longer trusts the intermediates. Offline, scan each PEM bundle for emSign ECC Root CA - G3 and for the SHA-256 fingerprints of the eight intermediates and their cross-signs.

Were forged certificates issued with the compromised keys?

None have been reported. The keys could have been recovered since April 2025, and clients that do not enforce Certificate Transparency would not reveal an attack in public logs. Detection for those clients has to come from your own TLS telemetry and endpoints.

I have TLS certificates from eMudhra. What should I do?

If they chain to emSign ECC Root CA - G3, replace them now with certificates from a different hierarchy. Mozilla has removed the root from NSS and Chrome removes it from the Chrome Root Store on 27 October 2026, after which those certificates stop working in Chrome.

Why is the root being removed if only intermediates were compromised?

Many clients cannot check revocation or block individual intermediates. Removing the root that the intermediates chain to is the only way to protect them, so Mozilla and Chrome chose emergency removal of emSign ECC Root CA - G3.

Do the two code-signing intermediates matter?

Only on Windows, where they were trusted for code signing. eMudhra states they never issued a certificate, and Microsoft has shipped blocks for them. Treat any signature that chains through either of them as untrusted.

Sources