What happened

The private keys of eight eMudhra intermediate certificate authorities were generated so weakly that anyone can compute them from the public certificates. Six of the intermediates are for TLS and two are for code signing. The keys were not stolen. Mozilla recovered them independently, and it says multiple other people did too.

A researcher known as Wayne reported the problem on 17 October and proved control of all eight keys. Chrome and Firefox blocked the intermediates within hours. eMudhra revoked them on 18 October and Sectigo revoked its cross-signed copies on 19 October. Microsoft and Apple products now block them as well. Mozilla then moved to remove trust in emSign ECC Root CA - G3 entirely, and Chrome is following.

eMudhra says the flaw was in its key generation step, that its infrastructure was not compromised, and that it has no evidence the weak keys were used before disclosure. No certificate issued from these intermediates has been seen in Certificate Transparency logs, and no abuse is confirmed. Tools that do not enforce Certificate Transparency, such as curl and most language runtimes, would not notice an unlogged certificate.

Browsers already block these intermediates. The risk on a developer Mac is software that checks certificates without checking revocation, or that ships its own root list. Removing the root also breaks legitimate sites that chain to it, and the sources disagree on how many certificates that affects.

Timeline

  1. Chrome Root Program received the report of the compromise.[6]

  2. A Chrome CRLSet update blocking the six TLS intermediates was in place.[6]

  3. Mozilla received the report.[2]

  4. Mozilla recovered the private keys independently.[2]

  5. Firefox OneCRL distrust of the certificates completed.[2]

  6. eMudhra marked the eight certificates as revoked.[2]

  7. Cloudflare became aware of the compromise and began its assessment.[4]

  8. Mozilla announced emergency removal of trust in emSign ECC Root CA - G3.[2]

  9. eMudhra stopped issuing from intermediates chaining to emSign ECC Root CA - G3.[2]

Who is affected

  • Developers on a Mac using tools that check certificates without revocation: the built-in curl, git, python3 and openssl read the system bundle at /etc/ssl/cert.pem.
  • Users of runtimes and tools that ship their own root lists, such as Python certifi, Node.js, Go and Java, until updated.
  • Go programs built before the fixed Go release, since they must be rebuilt to reject the keys.
  • Operators of servers whose certificates chain to emSign ECC Root CA - G3, which will stop working once Chrome's removal reaches devices.
  • Teams running containers, mutual TLS or custom origin certificates, which may need to update their own trust stores.
  • Browser users on current versions are covered. Firefox needs action only if Remote Settings is disabled or blocked.

How to check

  1. Check whether the system bundle used by the built-in curl, git, python3 and openssl still lists emSign ECC Root CA - G3 or AAA Certificate Services. If so, those tools still trust the chain.
  2. Check the installed versions of Python certifi, Node.js, Go, Java and any Electron or Docker Desktop apps against the fixed versions. The disclosure site run by Mozilla's Dennis Jackson has a crowdsourced list of patched versions.
  3. Confirm that Go binaries were rebuilt with the fixed Go release.
  4. The disclosure site also offers test sites. A certificate error from a client means it no longer trusts the compromised intermediates. These are test sites, not indicators.
  5. Validate through the application's real TLS path, because a working browser does not show that a background service is protected.

What to do

  1. Update macOS and your browsers to the latest versions.
  2. Update the runtimes and tools that ship their own root bundles, rebuild Go programs with a fixed Go, and rebuild affected container images.
  3. Restart or redeploy long-running processes so they reload their trust stores.
  4. Do not resolve certificate errors after patching by turning off verification.
  5. The disclosure site explains how to remove the affected roots from /etc/ssl/cert.pem. That edits a system file, so read it carefully first.
  6. If your servers use certificates chaining to emSign ECC Root CA - G3, replace them before Chrome's removal reaches all devices. That is planned for 27 October.
  7. eMudhra says it offers replacement certificates, including ones issued by Sectigo.

Indicators of compromise

Shown defanged so they can't be clicked. Copy copies the real value. Every indicator appears in the cited source.

TypeIndicatorNoteCopy
SHA-256E7568FE6E12331F4FD7DE61DA4C7559D0F8EB192A218D4741A3BA75184333838Certificate SHA-256, EM EV TLS CA - G3B (eMudhra BV), CCADB A012304[1]
Key hashe0254c7fcdc265e2f0f8a428dabb75ab4ae039b4872d62f5ee57f0877d5a8a4SPKI SHA-256 of the exposed key, EM EV TLS CA - G3B (eMudhra BV); 63 hex characters as published[1]
Certificate serialc7c41efe92d825f05eae841a4a82c1Serial, EM EV TLS CA - G3B (eMudhra BV)[1]
SHA-25698B896625C0C230ADEEC3EB2CF6AAD5001ECF9156A68644E82374CE5833BC25BCertificate SHA-256, EM OV TLS CA - G3B (eMudhra BV), CCADB A012308[1]
Key hash43bffa19d6ef651451f6841e019931e96f6f2eaeff28ab4b6f1ce4576de2717SPKI SHA-256 of the exposed key, EM OV TLS CA - G3B (eMudhra BV); 63 hex characters as published[1]
Certificate serial6cada367fb1c100088120ea202d568Serial, EM OV TLS CA - G3B (eMudhra BV)[1]
SHA-25642C4ACCD12C4F59597925E1A08A7A90102608543809308D50EC427E118BA1493Certificate SHA-256, EM DV TLS CA - G3B (eMudhra BV), CCADB A012302[1]
Key hashebed6475c2c2d80fcb199f3fe8dd6e6b3ce60b77eb15d4e42c3dec0c6f5b5105SPKI SHA-256 of the exposed key, EM DV TLS CA - G3B (eMudhra BV)[1]
Certificate seriala4aee678f23362b4c0e460b772f214Serial, EM DV TLS CA - G3B (eMudhra BV)[1]
SHA-256432EC25F0D28DE9006D97BF752F17BBB2CD41F669933FCB072D9A1148D0261F3Certificate SHA-256, EM EV TLS CA - G3C (eMudhra Inc), CCADB A012296[1]
Key hash5c0660a2b164910d8ff589c18e14552e9e0ec237dcefe2cb736d41a4811f81a0SPKI SHA-256 of the exposed key, EM EV TLS CA - G3C (eMudhra Inc)[1]
Certificate serial8009928a64107601af05fa2f19f109Serial, EM EV TLS CA - G3C (eMudhra Inc)[1]
SHA-256CB6E15165AC802E9B3F993F16C25D41F4E81C21EBDE71AE1B012AC00BF9C7C3FCertificate SHA-256, EM OV TLS CA - G3C (eMudhra Inc), CCADB A012300[1]
Key hash63ecefee431d49523bc1136c4e72d0206a477086caf606cd5cf025686c109cf8SPKI SHA-256 of the exposed key, EM OV TLS CA - G3C (eMudhra Inc)[1]
Certificate serial296926c227a3a1526392b19482a504Serial, EM OV TLS CA - G3C (eMudhra Inc)[1]
SHA-2560164D7CEAE5BB909C272AF151FF44B1177AE9B47D9424B94F1D9558C30934D19Certificate SHA-256, EM DV TLS CA - G3C (eMudhra Inc), CCADB A012294[1]
Key hash49dd353dc2b919a3770645117d0e60c16115e7d1bc259eefe734b00ea434fe5fSPKI SHA-256 of the exposed key, EM DV TLS CA - G3C (eMudhra Inc)[1]
Certificate serial588b2e3c2bb8cda13e1a1209254321Serial, EM DV TLS CA - G3C (eMudhra Inc)[1]
SHA-2569E39DE2881273ACC225A149C72BA3E0F51424963669AB633EE1DC7DF5DB067B4Certificate SHA-256, EM OV CS CA - G3B (eMudhra BV), CCADB A012306[1]
Key hashec4ffa1ad0ac88081314b7aaffef6a91f97cd57291bb5ba686c5415f5eb4f6b6SPKI SHA-256 of the exposed key, EM OV CS CA - G3B (eMudhra BV)[1]
Certificate serial7818933f8f85b4619a2b35fba83d0aSerial, EM OV CS CA - G3B (eMudhra BV)[1]
SHA-2564B2460A466F95FD40113BCDCCA2CEB29B3B093921DE45474DA7DF48874C630B1Certificate SHA-256, EM OV CS CA - G3C (eMudhra Inc), CCADB A012298[1]
Key hash92c063d67e8f14db71d288e11266ffdaf69cbf115f7bab14f3bc2f68d25e0e30SPKI SHA-256 of the exposed key, EM OV CS CA - G3C (eMudhra Inc)[1]
Certificate serial544b7f922c31ae220a4a922916f6e6Serial, EM OV CS CA - G3C (eMudhra Inc)[1]
SHA-256579480AEA166290BD3C643589E795FC0D0E54E86505D180F1DFF99EFD3199512Certificate SHA-256, EM EV TLS CA - G3B (Sectigo cross-sign), CCADB A012333[1]
Certificate seriald8f8685e4f2bd9d82402a85a1c1eb731Serial, EM EV TLS CA - G3B (Sectigo cross-sign)[1]
SHA-2565F1DED4DD590AF74631290CF073B122A2AAC6A1FA479778A0BD43579BD832699Certificate SHA-256, EM OV TLS CA - G3B (Sectigo cross-sign), CCADB A012354[1]
Certificate seriale94223bde92f914e5ab9acabfdac3710Serial, EM OV TLS CA - G3B (Sectigo cross-sign)[1]
SHA-25645A883F349AEDFD5F3A649B5498FFB121712BA8B448F3F2A91DBC5A766FCDDBECertificate SHA-256, EM DV TLS CA - G3B (Sectigo cross-sign), CCADB A012347[1]
Certificate seriala024fdf4ba665c785ce4a020483858b7Serial, EM DV TLS CA - G3B (Sectigo cross-sign)[1]
SHA-256FD9D5C2DBBD4995AB69B8D50C439D9527B00529199C2FD01B2174EB58F07021FCertificate SHA-256, EM EV TLS CA - G3C (Sectigo cross-sign), CCADB A012334[1]
Certificate serial05f078752dece7a1bb8595d303167171Serial, EM EV TLS CA - G3C (Sectigo cross-sign)[1]
SHA-2567485B51C0ED192878FA1D2F948FB529AE1842CC5086C4B67F7BE5B2039DE9489Certificate SHA-256, EM OV TLS CA - G3C (Sectigo cross-sign), CCADB A012343[1]
Certificate serial8d5a4811939ef447d77111cdd9849ae9Serial, EM OV TLS CA - G3C (Sectigo cross-sign)[1]
SHA-25662B7F9868263F72F6911FC78CEAF72C1979158B7368BF648683BB2AA39B02E72Certificate SHA-256, EM DV TLS CA - G3C (Sectigo cross-sign), CCADB A012342[1]
Certificate serial91f347f1a5b7d39962b95e0ee4e299d1Serial, EM DV TLS CA - G3C (Sectigo cross-sign)[1]
SHA-256A496E23AC0CAB8155FC9B117B97EAE368EFCBB9041AEC8804D5A308D2D01C2D8Certificate SHA-256, EM OV CS CA - G3B (Sectigo cross-sign), CCADB A012352[1]
Certificate serial41e32b73ac185d6ce0d7480bacf84e69Serial, EM OV CS CA - G3B (Sectigo cross-sign)[1]
SHA-25684112972B8E59D14560AE7E7119654474AAD119990CF3722BFC1E3B91615E1FDCertificate SHA-256, EM OV CS CA - G3C (Sectigo cross-sign), CCADB A012350[1]
Certificate seriald6a5ef613b390f32ef9cdf349f772841Serial, EM OV CS CA - G3C (Sectigo cross-sign)[1]

Sources

  1. openwall.com · eMudhra Intermediates Compromise
  2. emudhra.we-have-a-problem.com · eMudhra Intermediate CA Compromise

Changelog

  1. First published.