[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"public-config":3,"i-flag:ph-4x3":14,"i-flag:us-4x3":19,"i-flag:de-4x3":21,"i-flag:hk-4x3":23,"i-tabler:lifebuoy":25,"i-tabler:timeline":28,"i-tabler:apps":30,"i-tabler:package":32,"i-tabler:circle-half-2":34,"i-tabler:sun":36,"i-tabler:moon":38,"i-tabler:menu-2":40,"i-tabler:user":42,"i-tabler:notebook":44,"i-simple-icons:forgejo":46,"i-tabler:shield-lock":48,"i-tabler:tools":50,"i-tabler:calendar":52,"i-tabler:x":54,"$fc7u9kut9txlj":56,"i-tabler:arrow-left":120,"i-tabler:tag":122},{"matomo":4,"booking":7,"site":9,"blog":11,"newsletter":12},{"enabled":5,"siteId":6},true,"7",{"enabled":5,"url":8},"https:\u002F\u002Fcal.com\u002Fjdbungart",{"url":10},"https:\u002F\u002Fjdneer.com",{"enabled":5},{"enabled":13},false,{"left":15,"top":15,"width":16,"height":17,"rotate":15,"vFlip":13,"hFlip":13,"body":18},0,640,480,"\u003Cpath fill=\"#0038a8\" d=\"M0 0h640v240H0z\"\u002F>\u003Cpath fill=\"#ce1126\" d=\"M0 240h640v240H0z\"\u002F>\u003Cpath fill=\"#fff\" d=\"M415.7 240L0 480V0\"\u002F>\u003Cpath fill=\"#fcd116\" d=\"M26.7 42.4L41 55l16.6-9.2l-7.4 17.5l14 13l-19-1.6l-8.1 17.2l-4.3-18.5L14 71l16.3-10zm323.8 172.3l.4 19l18 6.3l-18 6.2l-.4 19l-11.5-15.1l-18.2 5.5l10.8-15.6l-10.8-15.6l18.2 5.5zM37.2 388.1l8 17.2l19-1.6l-13.9 13l7.4 17.5l-16.6-9.1l-14.4 12.4l3.6-18.7L14 409l18.9-2.4zm114.2-249l-6.2 6.2l3.1 47l-3 .3l-5.7-42.9l-5.1 5l7.6 38.4a48 48 0 0 0-17.2 7.1l-21.7-32.4H96l26.4 34.3l-2.4 2l-31.1-35.5h-8.8v8.8l35.4 31l-2 2.5l-34.3-26.3v7.1l32.5 21.7q-5.2 7.8-7.1 17.2L66.3 223l-5.1 5l42.9 5.7q-.3 1.6-.3 3.1l-47-3l-6.2 6.2l6.2 6.2l47-3.1l.3 3.1l-42.9 5.7l5 5l38.4-7.6a48 48 0 0 0 7.1 17.2l-32.5 21.7v7.2l34.3-26.3l2 2.4l-35.4 31v8.8H89l31-35.4l2.5 2L96 312.2h7.2l21.7-32.5q7.8 5.2 17.2 7.1l-7.6 38.4l5 5l5.7-42.9q1.5.3 3.1.3l-3 47l6.1 6.2l6.3-6.2l-3.1-47l3-.3l5.7 43l5.1-5.1l-7.6-38.4a48 48 0 0 0 17.2-7.1l21.7 32.5h7.2l-26.4-34.3l2.4-2l31.1 35.4h8.8v-8.8l-35.4-31l2-2.4l34.3 26.3v-7.2l-32.5-21.7q5.2-7.8 7.1-17.2l38.3 7.6l5.1-5l-42.9-5.7q.3-1.5.3-3.1l47 3l6.2-6.1l-6.2-6.2l-47 3l-.3-3l42.9-5.7l-5-5l-38.4 7.5a48 48 0 0 0-7.1-17.2l32.5-21.7v-7.1l-34.3 26.3l-2-2.4l35.4-31v-8.9H214l-31 35.5l-2.5-2l26.4-34.3h-7.2L178 200.2q-7.8-5.2-17.2-7.1l7.6-38.3l-5-5l-5.7 42.8l-3.1-.3l3-47z\"\u002F>",{"left":15,"top":15,"width":16,"height":17,"rotate":15,"vFlip":13,"hFlip":13,"body":20},"\u003Cpath fill=\"#bd3d44\" d=\"M0 0h640v480H0\"\u002F>\u003Cpath stroke=\"#fff\" stroke-width=\"37\" d=\"M0 55.3h640M0 129h640M0 203h640M0 277h640M0 351h640M0 425h640\"\u002F>\u003Cpath fill=\"#192f5d\" d=\"M0 0h364.8v258.5H0\"\u002F>\u003Cmarker id=\"SVGEq3dreKJ\" markerHeight=\"30\" markerWidth=\"30\">\u003Cpath fill=\"#fff\" d=\"m14 0l9 27L0 10h28L5 27z\"\u002F>\u003C\u002Fmarker>\u003Cpath fill=\"none\" marker-mid=\"url(#SVGEq3dreKJ)\" d=\"m0 0l16 11h61h61h61h61h60L47 37h61h61h60h61L16 63h61h61h61h61h60L47 89h61h61h60h61L16 115h61h61h61h61h60L47 141h61h61h60h61L16 166h61h61h61h61h60L47 192h61h61h60h61L16 218h61h61h61h61h60z\"\u002F>",{"left":15,"top":15,"width":16,"height":17,"rotate":15,"vFlip":13,"hFlip":13,"body":22},"\u003Cpath fill=\"#fc0\" d=\"M0 320h640v160H0z\"\u002F>\u003Cpath fill=\"#000001\" d=\"M0 0h640v160H0z\"\u002F>\u003Cpath fill=\"red\" d=\"M0 160h640v160H0z\"\u002F>",{"left":15,"top":15,"width":16,"height":17,"rotate":15,"vFlip":13,"hFlip":13,"body":24},"\u003Cpath fill=\"#ec1b2e\" d=\"M0 0h640v480H0\"\u002F>\u003Cpath id=\"SVG5tfvBPpj\" fill=\"#fff\" d=\"M346.3 103.1C267 98 230.6 201.9 305.6 240.3c-26-22.4-20.6-55.3-10.1-72.4l1.9 1.1c-13.8 23.5-11.2 52.7 11.1 71c-12.7-12.3-9.5-39 12.1-48.9s23.6-39.3 16.4-49.1q-14.7-25.6 9.3-38.9M307.9 164l-4.7 7.4l-1.8-8.6l-8.6-2.3l7.8-4.3l-.6-8.9l6.5 6.1l8.3-3.3l-3.7 8.1l5.6 6.8z\"\u002F>\u003Cuse href=\"#SVG5tfvBPpj\" transform=\"rotate(72 312.5 243.5)\"\u002F>\u003Cuse href=\"#SVG5tfvBPpj\" transform=\"rotate(144 312.5 243.5)\"\u002F>\u003Cuse href=\"#SVG5tfvBPpj\" transform=\"rotate(216 312.5 243.5)\"\u002F>\u003Cuse href=\"#SVG5tfvBPpj\" transform=\"rotate(288 312.5 243.5)\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":27},24,"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M8 12a4 4 0 1 0 8 0a4 4 0 1 0-8 0\"\u002F>\u003Cpath d=\"M3 12a9 9 0 1 0 18 0a9 9 0 1 0-18 0m12 3l3.35 3.35M9 15l-3.35 3.35m0-12.7L9 9m9.35-3.35L15 9\"\u002F>\u003C\u002Fg>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":29},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"m4 16l6-7l5 5l5-6\"\u002F>\u003Cpath d=\"M14 14a1 1 0 1 0 2 0a1 1 0 1 0-2 0M9 9a1 1 0 1 0 2 0a1 1 0 1 0-2 0m-6 7a1 1 0 1 0 2 0a1 1 0 1 0-2 0m16-8a1 1 0 1 0 2 0a1 1 0 1 0-2 0\"\u002F>\u003C\u002Fg>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":31},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1zm0 10a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1zm10 0a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-4a1 1 0 0 1-1-1zm0-8h6m-3-3v6\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":33},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m12 3l8 4.5v9L12 21l-8-4.5v-9zm0 9l8-4.5M12 12v9m0-9L4 7.5m12-2.25l-8 4.5\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":35},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M3 12a9 9 0 1 0 18 0a9 9 0 1 0-18 0m9-9v18m0-7l7-7m-7 12l8.5-8.5M12 9l4.5-4.5\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":37},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 12a4 4 0 1 0 8 0a4 4 0 1 0-8 0m-5 0h1m8-9v1m8 8h1m-9 8v1M5.6 5.6l.7.7m12.1-.7l-.7.7m0 11.4l.7.7m-12.1-.7l-.7.7\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":39},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 3h.393a7.5 7.5 0 0 0 7.92 12.446A9 9 0 1 1 12 2.992z\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":41},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":43},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 7a4 4 0 1 0 8 0a4 4 0 0 0-8 0M6 21v-2a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v2\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":45},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 4h11a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m3 0v18m4-14h2m-2 4h2\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":47},"\u003Cpath fill=\"currentColor\" d=\"M16.777 0a2.9 2.9 0 1 1-2.529 4.322H12.91a4.266 4.266 0 0 0-4.265 4.195v2.118a7.08 7.08 0 0 1 4.147-1.42l.118-.002h1.338a2.9 2.9 0 0 1 5.43 1.422a2.9 2.9 0 0 1-5.43 1.422H12.91a4.266 4.266 0 0 0-4.265 4.195v2.319A2.9 2.9 0 0 1 7.222 24A2.9 2.9 0 0 1 5.8 18.57V8.589a7.11 7.11 0 0 1 6.991-7.108l.118-.001h1.338A2.9 2.9 0 0 1 16.778 0M7.223 19.905a1.194 1.194 0 1 0 0 2.389a1.194 1.194 0 0 0 0-2.389m9.554-10.464a1.194 1.194 0 1 0 0 2.389a1.194 1.194 0 0 0 0-2.39m0-7.735a1.194 1.194 0 1 0 0 2.389a1.194 1.194 0 0 0 0-2.389\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":49},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12 3a12 12 0 0 0 8.5 3A12 12 0 0 1 12 21A12 12 0 0 1 3.5 6A12 12 0 0 0 12 3\"\u002F>\u003Cpath d=\"M11 11a1 1 0 1 0 2 0a1 1 0 1 0-2 0m1 1v2.5\"\u002F>\u003C\u002Fg>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":51},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M3 21h4L20 8a1.5 1.5 0 0 0-4-4L3 17zM14.5 5.5l4 4\"\u002F>\u003Cpath d=\"M12 8L7 3L3 7l5 5M7 8L5.5 9.5M16 12l5 5l-4 4l-5-5m4 1l-1.5 1.5\"\u002F>\u003C\u002Fg>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":53},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 7a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2zm12-4v4M8 3v4m-4 4h16m-9 4h1m0 0v3\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":55},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M18 6L6 18M6 6l12 12\"\u002F>",{"slug":57,"title":58,"excerpt":59,"image":60,"publishedAt":61,"topics":62,"readMinutes":69,"html":70,"metaTitle":58,"metaDescription":71,"shareImage":72,"updatedAt":61,"author":76,"related":78},"emudhra-ca-weak-keys-chain-of-trust","eMudhra Broke Almost Nothing, and Still Dented the Chain of Trust","Eight eMudhra intermediate CA keys turned out to be numbers under 256. Browsers blocked them within hours, almost no site broke, and eMudhra is leaving the TLS business. The service impact was tiny. The lesson for the chain of trust is not.","\u002Fcontent\u002Fimages\u002F2026\u002F10\u002Femudhra-keys-iolandino-baiano-unsplash.jpg","2026-10-25T16:00:00.000+08:00",[63,66],{"key":64,"label":65},"opinion","Opinion",{"key":67,"label":68},"security","Security",7,"\u003Cp>On October 17, a researcher found that eight intermediate certificate authorities run by eMudhra, an Indian CA, had private keys anyone could work out in seconds. Within hours, Chrome and Firefox had blocked them. Five days later, eMudhra announced it is leaving the global TLS certificate business altogether.\u003C\u002Fp>\u003Cp>If you missed it, that is kind of the point. Almost nothing broke. But I think this is one of the more important WebPKI incidents in years, and not because of outages.\u003C\u002Fp>\u003Ch2 id=\"what-happened\">What happened\u003C\u002Fh2>\u003Cp>According to \u003Ca href=\"https:\u002F\u002Fbugzilla.mozilla.org\u002Fshow_bug.cgi?id=2083449&amp;ref=ghost.jdneer.com\">Mozilla's incident report (Bug 2083449)\u003C\u002Fa>, the eight affected intermediates came out of a single key ceremony on April 30, 2025. They used P-384 elliptic curve keys. A P-384 private key is supposed to be a random number roughly 384 bits long. Mozilla's Dennis Jackson wrote that \"the 8 impacted keys all used integers less than 256.\" In other words, each private key was a single byte. You could recover it by simply trying the first 256 keys.\u003C\u002Fp>\u003Cp>Six of the eight were TLS intermediates trusted by Chrome, Mozilla, Microsoft and Apple. The other two were code-signing intermediates trusted by Microsoft. Sectigo had also cross-signed all eight from its AAA Certificate Services root, so there were two certificate copies of each weak key. Chrome and Mozilla had already dropped that Sectigo root, but Microsoft and Apple still trust it.\u003C\u002Fp>\u003Cp>The researcher, who goes by Wayne, says his scan flagged the keys at 16:27 UTC on October 17 and that he emailed Apple, Chrome, Microsoft, Mozilla and eMudhra at 18:05 UTC, with each message signed by the compromised keys as proof. He later \u003Ca href=\"https:\u002F\u002Fgroups.google.com\u002Fa\u002Fmozilla.org\u002Fg\u002Fdev-security-policy\u002Fc\u002F0R3XLJL6FuE\u002Fm\u002FVAgSvefvAAAJ?ref=ghost.jdneer.com\">said\u003C\u002Fa> he found them by running Google's open source paranoid_crypto checks against the public CCADB corpus, \"out of the box.\"\u003C\u002Fp>\u003Ch2 id=\"why-the-service-impact-was-so-small\">Why the service impact was so small\u003C\u002Fh2>\u003Cp>A CA whose keys anyone can recover can, in theory, sign a certificate for any website on the internet. That is the worst case in this business. Here is why it barely registered for users and site owners:\u003C\u002Fp>\u003Cul>\u003Cli>\u003Cstrong>The browsers moved in hours.\u003C\u002Fstrong> \u003Ca href=\"https:\u002F\u002Fblog.google\u002Fsecurity\u002Fprotecting-chrome-and-android-users-from-compromised-emudhra-intermediate-ca-certificates\u002F?ref=ghost.jdneer.com\">Google says\u003C\u002Fa> Chrome landed a CRLSet update at 19:45 UTC, blocking the six TLS keys by public key hash, which covered the Sectigo cross-signs too, with no browser update or restart needed. \u003Ca href=\"https:\u002F\u002Fblog.mozilla.org\u002Fsecurity\u002F2026\u002F10\u002F20\u002Fprotecting-firefox-users-following-the-compromise-of-emudhra-intermediate-certificates\u002F?ref=ghost.jdneer.com\">Mozilla says\u003C\u002Fa> its OneCRL block reached all Firefox users with standard settings by 22:59 UTC the same day. According to the \u003Ca href=\"https:\u002F\u002Femudhra.we-have-a-problem.com\u002F?ref=ghost.jdneer.com\">community incident tracker\u003C\u002Fa>, Microsoft platforms followed on October 20 and Apple products on October 22.\u003C\u002Fli>\u003Cli>\u003Cstrong>eMudhra never issued from them.\u003C\u002Fstrong> eMudhra \u003Ca href=\"https:\u002F\u002Femudhra.com\u002Fen\u002Fpost\u002Fcertificate-security-incident?ref=ghost.jdneer.com\">says\u003C\u002Fa> seven of the eight were never used in production, and that the one live intermediate, EM DV TLS CA - G3C, never issued a customer certificate. That does not make the keys harmless: they are public now, and anyone can sign with them. The \u003Ca href=\"https:\u002F\u002Fbugzilla.mozilla.org\u002Fshow_bug.cgi?id=2083449&amp;ref=ghost.jdneer.com\">Chrome Root Program\u003C\u002Fa> has already noted certificates logged after October 17 under the compromised EM DV TLS CA - G3B. eMudhra revoked all eight intermediates on the morning of October 18 (UTC), and Sectigo revoked its cross-signs on October 19.\u003C\u002Fli>\u003Cli>\u003Cstrong>Certificate Transparency closed the window.\u003C\u002Fstrong> Chrome enforces CT by default. Google says no TLS certificates chaining to these intermediates were logged to CT before its block, so no forged certificate from them could have been trusted by default in Chrome or other CT-enforcing browsers before the block landed.\u003C\u002Fli>\u003Cli>\u003Cstrong>The collateral damage is small and concentrated.\u003C\u002Fstrong> Mozilla has already removed the parent root, emSign ECC Root CA - G3, in NSS 3.131.1, and Google is removing it from the Chrome Root Store, expected October 27 (Pacific time). That breaks legitimate certificates under that root. eMudhra estimated in the \u003Ca href=\"https:\u002F\u002Fbugzilla.mozilla.org\u002Fshow_bug.cgi?id=2083449&amp;ref=ghost.jdneer.com\">bug\u003C\u002Fa> \"about 30,000 certs that require migration and about 97% came via ACME.\" Chrome counts about 30,800 unexpired certificates under the root as of October 21, and 30,791 of them were issued by two Internet2\u002FInCommon intermediates: InCommon Intermediate CA - OVG3C (23,806) and InCommon Intermediate CA - DVG3C (6,985). Only 18 came from eMudhra's own intermediates. That is what eMudhra's \u003Ca href=\"https:\u002F\u002Femudhra.com\u002Fen\u002Fpost\u002Fcertificate-security-incident?ref=ghost.jdneer.com\">status page\u003C\u002Fa> means by \"one customer ecosystem in the United States.\"\u003C\u002Fli>\u003Cli>\u003Cstrong>It was a sideline for eMudhra.\u003C\u002Fstrong> The company \u003Ca href=\"https:\u002F\u002Femudhra.com\u002Fen\u002Fpress-release\u002Femudhra-statement-distrust-global-tls-intermediate-root-ca?ref=ghost.jdneer.com\">says\u003C\u002Fa> global TLS is about 1% of its revenue, and that its Indian digital signature and eSign services run on separate infrastructure and are unaffected.\u003C\u002Fli>\u003C\u002Ful>\u003Cp>So the honest summary on services is this: the system worked fast, and very few people noticed anything at all.\u003C\u002Fp>\u003Ch2 id=\"where-the-real-damage-is\">Where the real damage is\u003C\u002Fh2>\u003Cp>The chain of trust does not run on math alone. Every padlock in your browser rests on a promise that a few dozen organizations keep their keys properly. Root programs check that promise with audits, policies and public incident reports. This incident shows the limits of each of those.\u003C\u002Fp>\u003Cp>\u003Cstrong>The audits did not catch it.\u003C\u002Fstrong> eMudhra says the hierarchy \"passed two independent audit cycles\" and that the weak keys went undetected for about 18 months. The keys were generated on FIPS 140-2 Level 3 HSMs, according to eMudhra, which blames \"a flaw in one step of the ceremony procedure,\" a key wrap\u002Funwrap step that produced a second, weak set of keys that were then used by mistake. Commenters in the bug point out that properly generated keys could not come out that small, so that explanation is still incomplete. The full root cause is not published yet. One free open source tool, run against public data, found what two audits did not.\u003C\u002Fp>\u003Cp>\u003Cstrong>There was an early warning.\u003C\u002Fstrong> In June 2025, Sectigo filed a \u003Ca href=\"https:\u002F\u002Fbugzilla.mozilla.org\u002Fshow_bug.cgi?id=1970728&amp;ref=ghost.jdneer.com\">Mozilla bug\u003C\u002Fa> reporting that CRLs for six of these same G3B and G3C intermediates had invalid signatures. eMudhra called it an \"incorrect CA key configuration,\" fixed it, and the bug was closed. Mozilla's Dennis Jackson later found archived data showing the bad CRLs going back to May 23, 2025, earlier than eMudhra's May 29. And this month eMudhra admitted in the \u003Ca href=\"https:\u002F\u002Fbugzilla.mozilla.org\u002Fshow_bug.cgi?id=2083449&amp;ref=ghost.jdneer.com\">new bug\u003C\u002Fa> that the CRLs had been signed with the original keys, failed to verify, and were then \"resigned with flawed keys.\" In other words, the mismatch was found in 2025 and fixed by switching to the weak keys instead of asking why there were two sets.\u003C\u002Fp>\u003Cp>\u003Cstrong>Revocation only protects clients that check it.\u003C\u002Fstrong> Browsers have their own push channels (CRLSet, OneCRL, CRLite). Much of the rest of the world does not. The \u003Ca href=\"https:\u002F\u002Femudhra.we-have-a-problem.com\u002F?ref=ghost.jdneer.com\">community incident site published by Mozilla's Dennis Jackson\u003C\u002Fa> lists curl, Go, Node.js, Java, pip and Electron apps like Slack and Discord among the clients that depend on their own CA bundle or need a software update. Many of them do not enforce CT either. \u003Ca href=\"https:\u002F\u002Fgroups.google.com\u002Fg\u002Fgolang-announce\u002Fc\u002F66pojueaQek?ref=ghost.jdneer.com\">Go 1.27.3 and 1.26.10\u003C\u002Fa> built in a block on the affected intermediates, so certificate verification now filters out any chain that contains them. That is also why Mozilla and Google removed the whole root: for clients like these, a root removal is the only lever that works.\u003C\u002Fp>\u003Cp>\u003Cstrong>The response tells you what trust actually requires.\u003C\u002Fstrong> Chrome's \u003Ca href=\"https:\u002F\u002Fblog.google\u002Fsecurity\u002Fprotecting-chrome-and-android-users-from-compromised-emudhra-intermediate-ca-certificates\u002F?ref=ghost.jdneer.com\">post\u003C\u002Fa> puts it plainly: inclusion requires that a CA \"continuously demonstrate the technical competence and operational rigor necessary to protect Chrome users,\" and it is reviewing eMudhra's remaining roots. When eMudhra wrote in the bug on October 23 that social media scrutiny and investor analysis had made meaningful analysis \"pretty much impossible,\" the \u003Ca href=\"https:\u002F\u002Fbugzilla.mozilla.org\u002Fshow_bug.cgi?id=2083449&amp;ref=ghost.jdneer.com\">Chrome Root Program replied\u003C\u002Fa> that those \"are not acceptable explanations for delayed responses here,\" and that eMudhra's obligations \"do not relax because the consequences are uncomfortable.\" Mozilla added that it had sent eMudhra questions on October 20 and, as of October 23, had no answer.\u003C\u002Fp>\u003Cp>I like that answer. Being in a root store is not a license, it is a standing obligation to the billions of people who never chose you. eMudhra's \u003Ca href=\"https:\u002F\u002Femudhra.com\u002Fen\u002Fpress-release\u002Femudhra-to-exit-global-ssl-tls-certificate-business?ref=ghost.jdneer.com\">exit announcement\u003C\u002Fa> blames, among other things, \"social media amplification\" and scrutiny \"out of proportion\" to TLS's place in its business. I read it the other way. Public scrutiny is the system working. Bugzilla, CCADB and CT logs are where that scrutiny happens, and in this case outsiders did the checking that the audits should have done.\u003C\u002Fp>\u003Ch2 id=\"what-to-check-on-your-side\">What to check on your side\u003C\u002Fh2>\u003Cp>For most people, keeping the browser and OS updated is enough. If you run servers or build software, take five minutes for these:\u003C\u002Fp>\u003Col>\u003Cli>\u003Cstrong>Know who issued your certificates.\u003C\u002Fstrong> Servers rarely send the root itself, so look for the root's name on the issuer line of the top intermediate in the chain your server sends:\u003Cbr \u002F>\u003Ccode>openssl s_client -connect example.com:443 -servername example.com -showcerts &lt;\u002Fdev\u002Fnull 2&gt;\u002Fdev\u002Fnull | grep -E \"^ *[0-9]+ s:| i:\" | grep -iE \"emSign|InCommon Intermediate CA - (OV|DV)G3C|EM (DV|OV|EV) TLS CA\"\u003C\u002Fcode>\u003Cbr \u002F>Any output means you are in the affected hierarchy: emSign ECC Root CA - G3, InCommon Intermediate CA - OVG3C or DVG3C, or an \"EM ... TLS CA\" intermediate. Mozilla has already removed the root, and distributions including Debian, Ubuntu, RHEL, Fedora, Alpine and Arch, plus Python's certifi, have shipped the removal. Google says site owners \"must immediately\" get a new certificate. Replace it now; Chrome follows on October 27 (PDT). To see every current certificate for your domain, open \u003Ccode>https:\u002F\u002Fcrt.sh\u002F?q=example.com&amp;exclude=expired\u003C\u002Fcode> (or \u003Ccode>?q=%25.example.com\u003C\u002Fcode> for subdomains) and check the Issuer column.\u003C\u002Fli>\u003Cli>\u003Cstrong>Use ACME, and know how to switch CAs.\u003C\u002Fstrong> Most of the affected certificates came via ACME, which is what makes this migration manageable. With certbot, acme.sh, Caddy or Traefik, moving to another publicly trusted ACME CA is a config change and a reissue. One catch: ACME clients will not renew early on their own unless you force it or the client supports ACME Renewal Information (ARI). Do not wait for the normal renewal window. Test the switching path before you need it.\u003C\u002Fli>\u003Cli>\u003Cstrong>Check your CAA records.\u003C\u002Fstrong> If you publish CAA, make sure the CA you would fall back to is allowed. Some people list a second CA there on purpose. Remember that CAA only limits future issuance. It does nothing about certificates that already exist.\u003C\u002Fli>\u003Cli>\u003Cstrong>Update the trust stores outside the browser.\u003C\u002Fstrong> Your distro's ca-certificates package, Go, Node.js, Java, container base images and Electron apps all carry or depend on their own copy. On the Python side, CPython on Linux uses the OS trust store, but pip always loads its own bundled certifi, so \u003Ca href=\"https:\u002F\u002Fblog.python.org\u002F2026\u002F10\u002Fpython-3151-3149-31317\u002F?ref=ghost.jdneer.com\">upgrade pip in every virtual environment\u003C\u002Fa>. The Python 3.15.1, 3.14.9 and 3.13.17 installers from python.org ship the fixed pip with certifi 2026.10.19. The \u003Ca href=\"https:\u002F\u002Femudhra.we-have-a-problem.com\u002F?ref=ghost.jdneer.com\">incident site\u003C\u002Fa> keeps a list of patched versions and test hosts you can hit with curl.\u003C\u002Fli>\u003Cli>\u003Cstrong>Do not rip out roots casually.\u003C\u002Fstrong> The Sectigo cross-signs chain to AAA Certificate Services, which Microsoft and Apple still trust and which sits in many legitimate chains. Removing it by hand can break unrelated sites. Let your OS and software vendors handle it, and patch.\u003C\u002Fli>\u003Cli>\u003Cstrong>Watch the root programs, not the headlines.\u003C\u002Fstrong> The facts here came first from Bugzilla, the dev-security-policy list and the browser security blogs. If a CA you rely on shows up there, read the bug.\u003C\u002Fli>\u003C\u002Fol>\u003Cp>The chain of trust survived this one with barely a scratch on the service side. That is a credit to the people running Chrome's and Mozilla's root programs. The lesson is that it took one person with a free tool to find a hole that sat in plain sight for 18 months, and that a lot of software outside the browser is still trusting whatever was in its CA bundle the day it shipped.\u003C\u002Fp>\u003Cp>\u003Cem>Sources: \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Fbugzilla.mozilla.org\u002Fshow_bug.cgi?id=2083449&amp;ref=ghost.jdneer.com\">\u003Cem>Mozilla Bug 2083449\u003C\u002Fem>\u003C\u002Fa>\u003Cem>, \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Fblog.google\u002Fsecurity\u002Fprotecting-chrome-and-android-users-from-compromised-emudhra-intermediate-ca-certificates\u002F?ref=ghost.jdneer.com\">\u003Cem>Google: Protecting Chrome and Android users\u003C\u002Fem>\u003C\u002Fa>\u003Cem>, \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Fblog.mozilla.org\u002Fsecurity\u002F2026\u002F10\u002F20\u002Fprotecting-firefox-users-following-the-compromise-of-emudhra-intermediate-certificates\u002F?ref=ghost.jdneer.com\">\u003Cem>Mozilla Security Blog\u003C\u002Fem>\u003C\u002Fa>\u003Cem>, \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Fgroups.google.com\u002Fa\u002Fmozilla.org\u002Fg\u002Fdev-security-policy\u002Fc\u002F0R3XLJL6FuE\u002Fm\u002FVAgSvefvAAAJ?ref=ghost.jdneer.com\">\u003Cem>dev-security-policy thread\u003C\u002Fem>\u003C\u002Fa>\u003Cem>, \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Femudhra.com\u002Fen\u002Fpost\u002Fcertificate-security-incident?ref=ghost.jdneer.com\">\u003Cem>eMudhra status page\u003C\u002Fem>\u003C\u002Fa>\u003Cem>, \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Femudhra.com\u002Fen\u002Fpress-release\u002Femudhra-statement-distrust-global-tls-intermediate-root-ca?ref=ghost.jdneer.com\">\u003Cem>eMudhra press release (Oct 21)\u003C\u002Fem>\u003C\u002Fa>\u003Cem>, \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Femudhra.com\u002Fen\u002Fpress-release\u002Femudhra-to-exit-global-ssl-tls-certificate-business?ref=ghost.jdneer.com\">\u003Cem>eMudhra exit announcement (Oct 22)\u003C\u002Fem>\u003C\u002Fa>\u003Cem>, \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Fbugzilla.mozilla.org\u002Fshow_bug.cgi?id=1970728&amp;ref=ghost.jdneer.com\">\u003Cem>Mozilla Bug 1970728\u003C\u002Fem>\u003C\u002Fa>\u003Cem>, \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Fgroups.google.com\u002Fg\u002Fgolang-announce\u002Fc\u002F66pojueaQek?ref=ghost.jdneer.com\">\u003Cem>Go 1.27.3 and 1.26.10 announcement\u003C\u002Fem>\u003C\u002Fa>\u003Cem>, \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Fblog.python.org\u002F2026\u002F10\u002Fpython-3151-3149-31317\u002F?ref=ghost.jdneer.com\">\u003Cem>Python 3.15.1, 3.14.9 and 3.13.17 release notes\u003C\u002Fem>\u003C\u002Fa>\u003Cem>, \u003C\u002Fem>\u003Ca href=\"https:\u002F\u002Femudhra.we-have-a-problem.com\u002F?ref=ghost.jdneer.com\">\u003Cem>community incident site\u003C\u002Fem>\u003C\u002Fa>\u003Cem>.\u003C\u002Fem>\u003C\u002Fp>","Eight eMudhra intermediate CA keys were numbers under 256. Browsers blocked them in hours and almost no site broke, but the lesson for the chain of trust is serious. What happened and what to check.",{"src":60,"height":73,"width":74,"type":75},1125,2000,"image\u002Fjpeg",{"name":77,"url":10,"owner":5},"JD Bungart",[79,91,102,111],{"slug":80,"title":81,"excerpt":82,"image":83,"publishedAt":84,"topics":85,"readMinutes":90},"http2shell-cve-2026-111497-brotli-decoder","HTTP2Shell (CVE-2026-111497): What the Brotli Decoder Bug Really Hits, and How to Patch","CVE-2026-111497 is an out-of-bounds write in Google's Brotli decoder, 1.0.3 through 1.2.0. Fixed in 1.0.10, 1.1.1 and 1.2.1, plus Node.js, Bun, Python, Envoy and .NET updates. You are exposed if you decode untrusted Brotli data. Not in CISA KEV.","\u002Fcontent\u002Fimages\u002F2026\u002F10\u002Fhttp2shell_cve_2026_111497_v2.png","2026-10-26T20:51:27.000+08:00",[86,89],{"key":87,"label":88},"advisories","Advisories",{"key":67,"label":68},1,{"slug":92,"title":93,"excerpt":94,"image":95,"publishedAt":96,"topics":97,"readMinutes":90},"package-cooldowns-github-package-firewall-npm-pnpm-bun-pip-uv-poetry","Package Cooldowns Compared: GitHub Package Firewall vs. What npm, pnpm, Yarn, Bun, pip, uv and Poetry Already Do","GitHub now offers an install-time firewall for npm, free in preview and metered later. Most package managers already ship a free cooldown. Here is what each tool does, the copy-paste config, and where cooldowns stop helping.","\u002Fcontent\u002Fimages\u002F2026\u002F10\u002Fpkg-cooldowns-conveyor-alberto-rodriguez-unsplash.jpg","2026-10-26T14:00:00.000+08:00",[98,101],{"key":99,"label":100},"guides","Guides",{"key":67,"label":68},{"slug":103,"title":104,"excerpt":105,"image":106,"publishedAt":107,"topics":108,"readMinutes":90},"tailscale-ssh-tailworm-mesh-vpn-agent-risk","Your Mesh VPN Agent Is Root on Every Box. Tailworm Is the Reminder.","A researcher showed one hacked Tailscale node reaching root on other servers through Tailscale SSH forwarding. No patch yet. Here is why mesh VPN agents deserve the same suspicion as any privileged daemon.","\u002Fcontent\u002Fimages\u002F2026\u002F10\u002Ftailworm-padlock-light-trails-flyd-unsplash.jpg","2026-10-26T12:00:00.000+08:00",[109,110],{"key":64,"label":65},{"key":67,"label":68},{"slug":112,"title":113,"excerpt":114,"image":115,"publishedAt":116,"topics":117,"readMinutes":90},"insider-threat-lab-poisoning-cases","The Threat Was Already Badged In: Insider Lessons From Two Lab Poisoning Cases","A Wyoming grad student is accused of poisoning an officemate, and the internet already called it espionage. The charge says assault. What the court record actually shows, and the access, procurement, and reporting controls that would have caught it sooner.","\u002Fcontent\u002Fimages\u002F2026\u002F10\u002Finsider-night-office-brunobd-unsplash.jpg","2026-10-25T14:00:00.000+08:00",[118,119],{"key":64,"label":65},{"key":67,"label":68},{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":121},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14M5 12l6 6m-6-6l6-6\"\u002F>",{"left":15,"top":15,"width":26,"height":26,"rotate":15,"vFlip":13,"hFlip":13,"body":123},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M6.5 7.5a1 1 0 1 0 2 0a1 1 0 1 0-2 0\"\u002F>\u003Cpath d=\"M3 6v5.172a2 2 0 0 0 .586 1.414l7.71 7.71a2.41 2.41 0 0 0 3.408 0l5.592-5.592a2.41 2.41 0 0 0 0-3.408l-7.71-7.71A2 2 0 0 0 11.172 3H6a3 3 0 0 0-3 3\"\u002F>\u003C\u002Fg>"]