Konfirmity
All security advisories

//security advisory

eMudhra Intermediate CA Private Key Compromise

Anyone can recover the private keys of eight eMudhra intermediate certificate authorities. Browsers are already protected. Servers, containers and tools that keep their own list of trusted certificates need an update.

On this page
  1. Are you affected?
  2. What to do
  3. Patched versions
  4. Check a trust store
  5. Workarounds
  6. What happened
  7. Timeline
  8. Affected certificates
  9. Where the accounts differ
  10. Recording it for compliance
  11. Sources

Are you affected?

Find the row that describes you. Most organisations only need to install updates.

  • You use a mainstream browser

    Chrome, Firefox, Safari, Edge

    Protected

    Keep the browser and operating system updated. Firefox and Chrome blocked the intermediates within hours of the report.

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

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

    Update needed

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

  • Your TLS certificates come from eMudhra

    Chaining to emSign ECC Root CA - G3

    Act now

    Reissue under a different chain or CA. Mozilla and Chrome are removing trust in this root. Details

  • You verify code signed through eMudhra

    The two code-signing intermediates

    Low risk

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

What to do

For most teams this is a patching exercise. Work through these in order.

  1. Update browsers and operating systems

    Firefox users on standard settings were protected on 17 October without updating; the 20 October releases cover users who had disabled remote blocklist updates.
  2. 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.
  3. 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.
  4. Confirm the root is gone

    Run the offline trust store check against each bundle you rely on.

If you are an eMudhra TLS customer

If any of your certificates chain to emSign ECC Root CA - G3, reissue them now under a different chain or a different CA. eMudhra estimates about 30,000 certificates need migrating, about 97% of them issued through ACME, and says it is moving subscribers to its RSA root, emSign Root CA - G1, which Mozilla is not removing at this time.

Code signing

The two code-signing intermediates were trusted only by Microsoft. eMudhra states they never issued a certificate. Treat any binary whose signature chains through either of them as untrusted.

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, 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 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)Not yet in testing. No fix for Debian 11 bullseye.20260816+nmu1Debian changelog
Fedora (ca-certificates)Stable on Rawhide only. Fedora 43 to 45 updates are 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
Gentoo (app-misc/ca-certificates)20260816.3.125 or laterGentoo bug 984601
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_1 or laterhomebrew-core #319674

Languages, runtimes and libraries

Patched language, runtime and library versions
SoftwareFixed inSource
NSS3.131.1NSS commit
curl CA bundle (cacert.pem)2026-10-20curl CA extract
Cloudflare cfssl_trust2026.10.1cfssl_trust #411
GoGO-2026-6809, CVE-2026-111943.1.27.3, 1.26.10Go issue 82345
Node.js26.12.1, 24.22.1, 22.23.4Node.js #66871
Electron44.9.1, 43.8.1, 42.11.16Electron #55126
BunFixed on main after 1.4.3.Not yet releasedBun #46300
Python certifi2026.10.19certifi #440
pip26.2.2pip changelog
uv0.13.4uv #22760
Rust rustls-webpki0.103.16webpki #546
Rust webpki-roots, webpki-root-certs1.0.10webpki-roots #133
PHP composer/ca-bundle1.4.16, 1.6.0ca-bundle 1.6.0
Elixir castore1.0.22castore #90
Perl Mozilla::CA20261020Mozilla::CA changes

If your software is not listed, check its release notes before assuming it is affected or fixed. The fixes take two forms: Go, rustls-webpki and Electron block the eight compromised intermediates directly, Node.js does that and also updates its root store, and every root bundle above drops emSign ECC Root CA - G3. The curl bundle of 20 October also drops emSign Root CA - C1 and emSign ECC Root CA - C3, which Python certifi and Perl Mozilla::CA keep. Some updates, such as Debian’s, also remove AAA Certificate Services to cut off the Sectigo cross-signed path.

Check a trust store offline

Works on any PEM bundle without contacting a test server. No output means the bundle has been updated.

Shell
# Prints a line if the bundle still trusts the distrusted root.
# No output means the bundle has been updated.
openssl storeutl -noout -text -certs /path/to/ca-bundle.pem \
  | grep -E "CN ?= ?emSign ECC Root CA - G3"
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
Python certifiThe path printed by python3 -m certifi

This check covers the root removal. It does not tell you whether a client honours the intermediate revocations, so a bundle that passes still needs the client software itself to be current.

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 are not needed on systems that already have a patched version.

macOS command-line toolsTested by Konfirmity
Shell
sudo cp /etc/ssl/cert.pem /etc/ssl/cert.pem.bak &&
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

Tested on macOS against /etc/ssl/cert.pem: removes exactly the two roots and keeps a backup. A later macOS update may restore the file.

Debian, Ubuntu and AlpineTested by Konfirmity
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

Tested on Debian 12, Ubuntu 22.04 and Alpine 3.18 with pre-fix packages. On Alpine, install ca-certificates first if only ca-certificates-bundle is present.

Fedora, RHEL, CentOS Stream, Rocky Linux, AlmaLinux and Amazon Linux 2023Tested by Konfirmity
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

Tested on Fedora 42.

openSUSE and SLESTested by Konfirmity
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

Tested on openSUSE Leap 15.6.

Arch LinuxTested by Konfirmity
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

Tested on the current archlinux image.

NixOSNot tested by us
configuration.nix
security.pki.caCertificateBlacklist = [
  "Comodo AAA Services root"
  "emSign ECC Root CA - G3"
];

Not run by us. The option is documented in the NixOS security.pki module.

In our tests, removing AAA Certificate Services did not break connections to current Sectigo-issued sites, because their chains also lead to the USERTrust roots. Older clients that lack those roots could still be affected, so test before rolling the change out widely. For FreeBSD, NetBSD and other platforms, follow your vendor’s guidance; we have not tested a workaround for them.

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, Google Chrome, Microsoft and Mozilla root programs. The other two are for code signing and were trusted by Microsoft.

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. Mainstream browsers were protected within hours of the report. The remaining exposure is software that carries its own trust store and does not check revocation: language runtimes, command-line tools, container images, appliances and embedded devices.

Separately, Mozilla and Chrome are removing trust in the root these intermediates chain to, emSign ECC Root CA - G3. Every certificate issued under that root, including ones unrelated to the compromised keys, will stop working in those clients and has to be reissued under a different chain.

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. 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, and had not yet examined the RSA keys.

eMudhra states that the keys were generated on FIPS 140-2 Level 3 hardware security modules, and that a wrap and unwrap step in the ceremony produced a second, weak set of keys that were then published in place of the strong ones. eMudhra has said it has not yet confirmed the root cause.

Timeline

All times are UTC and taken from Mozilla’s incident record unless the source says otherwise. eMudhra’s own statement gives later dates, which appear to be in India time and rounded.

  1. 2025-04-30

    The eight intermediates are created in an eMudhra key generation ceremony.

    Bugzilla comment 5

  2. 2026-10-17 · 18:05 UTC

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

    Bugzilla comment 2

  3. 2026-10-17 · 21:48 UTC

    Mozilla independently recovers the private keys, confirming the flaw.

    Bugzilla report

  4. 2026-10-17 · 22:46 UTC

    Chrome's CRLSet lists the six TLS intermediates as revoked (as observed by the reporter).

    Bugzilla comment 2

  5. 2026-10-17 · 22:59 UTC

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

    Mozilla Security Blog

  6. 2026-10-18 · 09:24 to 09:38 UTC

    eMudhra revokes all eight intermediates with reason cACompromise.

    Bugzilla comment 10

  7. 2026-10-19 · 14:55 UTC

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

    Bugzilla comment 13

  8. 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 affected root.

    Mozilla Security Blog

  9. 2026-10-20 · 13:06 UTC

    Mozilla announces emergency removal of trust in emSign ECC Root CA - G3. Chrome commits to the same path at 14:36.

    Bugzilla comment 18

  10. 2026-10-20 · 16:27 UTC

    eMudhra confirms it has stopped issuing from every intermediate under emSign ECC Root CA - G3.

    Bugzilla comment 21

Affected certificates

Identify certificates by SHA-256 fingerprint rather than by name: names can be reused, fingerprints cannot. Each fingerprint links to its entry in the crt.sh Certificate Transparency search.

The eight compromised eMudhra intermediate certificates
IntermediatePurposeIssuerSHA-256 fingerprint
EM EV TLS CA - G3BTLSemSign Root TLS CA - G3E7568FE6E12331F4FD7DE61DA4C7559D0F8EB192A218D4741A3BA75184333838
EM OV TLS CA - G3BTLSemSign Root TLS CA - G398B896625C0C230ADEEC3EB2CF6AAD5001ECF9156A68644E82374CE5833BC25B
EM DV TLS CA - G3BTLSemSign Root TLS CA - G342C4ACCD12C4F59597925E1A08A7A90102608543809308D50EC427E118BA1493
EM EV TLS CA - G3CTLSemSign Root TLS CA - G3432EC25F0D28DE9006D97BF752F17BBB2CD41F669933FCB072D9A1148D0261F3
EM OV TLS CA - G3CTLSemSign Root TLS CA - G3CB6E15165AC802E9B3F993F16C25D41F4E81C21EBDE71AE1B012AC00BF9C7C3F
EM DV TLS CA - G3CTLSemSign Root TLS CA - G30164D7CEAE5BB909C272AF151FF44B1177AE9B47D9424B94F1D9558C30934D19
EM OV CS CA - G3BCode signingemSign Root CS CA - G39E39DE2881273ACC225A149C72BA3E0F51424963669AB633EE1DC7DF5DB067B4
EM OV CS CA - G3CCode signingemSign Root CS CA - G34B2460A466F95FD40113BCDCCA2CEB29B3B093921DE45474DA7DF48874C630B1

The same eight keys were also cross-signed by Sectigo under AAA Certificate Services, a root that Chrome and Mozilla no longer trust but Apple and Microsoft still do. Sectigo revoked those eight cross-certificates on 19 October. Their fingerprints are listed in comment 2 of the Mozilla incident record.

Where the accounts differ

The CA and Mozilla describe the exposure differently. Both accounts are summarised here with their sources.

eMudhra says

Press release, 21 October 2026

  • Seven of the eight intermediates were never used in production.
  • The one that was in production had not issued any certificates.
  • Its infrastructure was not breached.

Mozilla says

Bugzilla 2083449

Both can be true: unused intermediates still had valid keys that anyone could have used to sign certificates. Nobody has published evidence that this happened, and nobody can rule it out for clients that do not enforce Certificate Transparency.

Recording it for compliance

For most organisations this is a third-party vulnerability, not an incident on their own systems. It is still worth a dated record, because an auditor will ask how you learned of it and what you did.

Controls to record this event against
FrameworkControlWhat to record
ISO 27001:2022A.5.25Assessment and decision on information security events. Log your assessment here.
ISO 27001:2022A.8.8Management of technical vulnerabilities. Record the remediation.
ISO 27001:2022A.5.22Monitoring, review and change management of supplier services, if eMudhra is one of your suppliers.
SOC 2CC7.1Identifying newly discovered vulnerabilities.
SOC 2CC7.3Evaluating security events.
SOC 2CC9.2Vendor risk, if eMudhra is a vendor.

Evidence to keep: the date you assessed it, the systems and images you checked, the package versions before and after, and any certificates you reissued.

Sources