Go will reject certificate chains containing eight distrusted SPKIs
Posted by mendym 2 days ago
Comments
Comment by agwa 2 days ago
What's alarming and unprecedented is that yesterday, two Certificate Transparency log implementations were updated to block the logging of certificates issued by the CAs. This likely indicates total private key compromise, and the blocking by CT logs is to prevent the logs from being spammed by forged certificates. However, it also means there will be no place to record forged certificates found in the wild. (These certificates won't validate in CT-enforcing clients since they won't be in CT logs, but could be used to attack non-CT-enforcing clients.)
Comment by FiloSottile 2 days ago
Comment by amluto 2 days ago
The bugzilla issues mentioned elsewhere suggest at least a mostly orderly removal of trust with issuance stopped several months ago. Your new cert was issued by “CN=EM DV TLS CA - G3B,O=eMudhra BV,C=NL”, which presumably chains to the G3 root, and the bugzilla issue seems to say that G3 was going to be dropped from the root lists some time ago but that maybe it would be cross-signed by something still trusted. So I assume that something else is going on.
Was that cert issued via normal means (e.g. ACME)?
Comment by rollulus 2 days ago
Comment by chrisjj 2 days ago
This is indeed huge. Allegedly forged certs aren't spam and do need to be logged. Refusal to log them is a dereliction of duty and will righly undermine trust in the system.
Comment by amluto 1 day ago
Comment by chrisjj 1 day ago
Secretly excluding some issued with a key leak that "appears to be what happened" is not transparency.
CT aren't supposed to be gatekeepers.
If the problem is spam then the solution should be antispam - regardless of allegations of leak.
Comment by amluto 1 day ago
Once the private key has been leaked, this is basically all pointless.
Can a site owner trust that a certificate in their name has been logged? Of course not! An attacker could be signing it on the fly.
Can an auditor read the complete record? The complete record is kind of meaningless if the private key is leaked. But the auditor already knows that the private key is leaked!
Will the CA get caught if they issue a cert that isn't in the log? Yes! In fact, all newly signed certs won't be in the log.
Will browsers that check for log inclusion be protected? Yes, because newly signed certs won't be in the log.
Will anyone who sees a signed cert that isn't in the log hold evidence of misbehavior? Yes!
One might argue that the actual change to the CT system that should be made is a way for a CT operator to insert a statement into the append-only log that they believe a signing key to be compromised and that they will therefore no longer accept certificates signed by that key.
Comment by chrisjj 1 day ago
Comment by agwa 2 days ago
Comment by noja 2 days ago
Comment by agwa 2 days ago
Of course, the notion of "trusted" is complicated. These CAs are no longer trusted by up-to-date clients, but out-of-date clients may continue to trust them. The needs of up-to-date clients take priority over the needs of out-of-date clients.
Comment by csense 1 day ago
Normally Eve's attempts fail because Alice requires a message to be signed with the private key matching the public key in a certificate for bob.example.com signed by a legitimate CA.
Unfortunately Bob bought his CA from Mal's Domains, and Mal is working with Eve for some reason (for example, Mal has been bribed, hacked, intimidated, legally pressured, etc.)
So in addition to Bob's regular on-the-books cert, Mal issues a second off-the-books cert for bob.example.com and gives it to Eve.
With CT, Alice's browser doesn't just require the cert's pubkey, it requires the server to provide a Merkle proof it was included in a CT log.
The CT log puts Eve and Mal on the horns of a dilemma: If they keep their new cert out of the CT logs, Alice's browser won't accept it. If they put it in the CT logs, Bob can read the log himself (it's public) and Bob can say "Hold it! I didn't order this!"
Bob will switch away from Mal as a TLS provider and complain "Hey everybody, Mal issued this cert I didn't order, customers should stop using him and the people who create CA lists for browsers and OS's should closely investigate whether Mal's CA activities are legitimate." Mal can't deny issuing the questionable certificate, the evidence is in public append-only CT logs for everyone to see.
Comment by tialaramex 2 days ago
Comment by agwa 2 days ago
Comment by Zamicol 20 hours ago
Comment by ericbarrett 2 days ago
Comment by tveita 2 days ago
But the Go issue is market urgent, and assigns it a CVE, so clearly there's more to it than that.
Comment by ericbarrett 2 days ago
Comment by agwa 2 days ago
Node: https://github.com/nodejs/node/pull/66871
rustls/webpki: https://github.com/rustls/webpki/pull/546
Electron: https://github.com/electron/electron/pull/55126
This is very serious and you should definitely upgrade. Hopefully OpenSSL will have a patch soon as well.
Comment by vladde 2 days ago
> These are the eMudhra/emSign intermediates whose private keys were reported compromised in October 2026.
Comment by wnoise 2 days ago
(The format seems like it would allow it, but nothing supports it, and in practice CAs demand the ability to actually modify some fields, and then sign that.)
Comment by crote 2 days ago
For example, the initial Let's Encrypt Authority X3 was signed by both their own (new, not-yet-universally-trusted) ISRG Root X1, and the universally-trusted third-party IdenTrust DST Root CA X3.
One crucial detail is that it isn't the same certificate. Rather, it is two separate certificates which just so happen to be using the same key pair, so the leaf cert is in essence signed by both intermediate certs at once.
I wonder if it would be possible to do the same thing on your own, actually: can a server present two completely separate cert chains to a connecting client - as long as the leaves use the same key pair? Technically AFAIK the only requirements should be 1) the key pair in use for the connection matches the cert, 2) the domain matches the cert's Subject, and 3) the cert is trusted, so at first glance it might be possible...
Comment by happosai 2 days ago
Of course, the browsers don't use the "certificate_authorities" because the list would be hilariously large for a TLS CLient Hello packet.
Comment by wnoise 2 days ago
Comment by GoblinSlayer 2 days ago
Comment by ycombinatrix 2 days ago
shame it wasn't adopted. rent seeking CAs would never go for it.
Comment by cowlevel 2 days ago
Comment by ycombinatrix 1 day ago
This would effectively be the same "root CAs come pre-installed" but they would be notaries rather than root CAs, with a predefined trust policy (maybe minimum of 2 notaries per leaf certificate)
Users would still just see a green lock icon same as before, no action needed.
Comment by cpach 2 days ago
Another option: Use ACME together with ARI (RFC 9773). The client checks ARI data every hour. If the cert needs to be replaced – for example like in this scenario – the CA will inform the client, which in turn would then request a new cert.
I know it’s not convenient to automate for every kind of device though. I guess in some of those cases it might be better to have a load balancer in front of the device. Or use an alternative PKI.
Comment by lmz 2 days ago
Comment by wnoise 2 days ago
Certificates are not the same as the public key; multiple certs sharing the same key is essentially the way around this. It's not as elegant as identical signing of the same cert, but it could work.
Comment by crote 2 days ago
And turning fields like issuer and serial into arrays risks someone accidentally using index 0 for one field and index 1 for another.
Combine that with the insane back-and-forth nightmare that the issuance process would turn into, and I have a very hard time seeing the benefit in it. After all, nobody is stopping you from requesting multiple certs independently, watching the revocation logs, and switching to the backup when required.
Comment by wnoise 1 day ago
Comment by Puts 2 days ago
And then the browser could present these badges in a nice way to the user.
Comment by calgoo 2 days ago
Comment by LoganDark 2 days ago
And then you have that one website trying to collect them all.
Comment by hannob 2 days ago
I don't think that's the right way to think about it.
Comment by q3k 2 days ago
Yeah okay this is funny. Nice little CTF challenge :).
Comment by q3k 1 day ago
D=156 in my case. Yeah, that's the entire private key.
Comment by accountrequired 2 days ago
Comment by cowlevel 2 days ago
Comment by TheDong 2 days ago
It's just an unfortunate unforced error that the go TLS package is bundled along with the compiler, in the same way Safari being bundled with iOS updates is an unforced error meaning a safari security bug requires a full OS update.
Comment by rollulus 2 days ago
Comment by TheDong 2 days ago
Comment by agwa 2 days ago
Comment by xtajv 2 days ago
Build another one.
Comment by xtajv 2 days ago
Pinning certificates in a browser was a brilliant idea for Chrome because web browsers are not made for technical users.
But pinning certificates in a compiler? It's reminding me of that one time where the NSA handed out DES constants to use and said "just trust me, bro". I don't even care that the DES constants ultimately ended up being protections against differential-cryptanalysis SCA (which, btw, the NSA then undermined by arguing for shorter keylengths in "export-grade crypto").
Get off my lawn.
Comment by mschuster91 2 days ago
Comment by q3k 2 days ago
Comment by mschuster91 2 days ago
Nonetheless, there shouldn't be a mechanism to override or modify the OS trust list embedded in the runtime. If the application code itself wants to do that (e.g. cert pinning), fine. But as an ops person, I repeat myself, it's an utter headache to deal with SSL trust roots already, and really I don't want to have to learn about N different ways that applications manage this crap.
Comment by account42 2 days ago
We already have a functioning system for delegating domain ownership in a hierarchical fashion where compromises are limited to only the subtree under the compromised entity. Let's start using it for domain validation sooner rather than later.
Comment by Hizonner 1 day ago
Of course we should have done that ages ago, but, you see, 20 years ago or so, Verisign (and maybe others) had a profit stream to protect and people to send to the IETF. And it's just possible there may have been other players with vested interests in things not getting too secure.
Comment by arvidtheking 2 days ago
Comment by mendym 2 days ago
data from https://www.ccadb.org/resources
Comment by jeffbee 2 days ago
Comment by Aissen 2 days ago
Comment by direwolf20 2 days ago
Comment by Aissen 2 days ago
Comment by aatd86 2 days ago
Comment by cowlevel 2 days ago
Comment by maerF0x0 1 day ago
Comment by stephbook 2 days ago
I wonder what's so annoying about OS certs.
Comment by quiet35 2 days ago
Comment by nirui 2 days ago
But we're talking about a lib of a programming language here, things happened in there effects your own reputation when you ship something built on top of it.
So the real question is, has others such as OpenSSL done the same? If yes, then yeah it's normal, but if no then I don't trust people from Google.
Comment by fc417fc802 2 days ago
Comment by MrDOS 2 days ago
[0]: https://www.rfc-editor.org/info/rfc5280/#section-4.2.1.10 [1]: https://utcc.utoronto.ca/~cks/space/blog/tech/TLSInternalCAN...
Comment by mook 2 days ago
Comment by whatevaa 2 days ago
Comment by fractorial 2 days ago
Comment by jeffbee 2 days ago
Comment by captn3m0 2 days ago
Comment by zx8080 2 days ago
Comment by fractorial 2 days ago
Comment by Jarred 2 days ago
Comment by computerfriend 2 days ago
Comment by xtajv 2 days ago
Comment by zx8080 2 days ago
It's easy to imagine something like: "give us some grant taxpayers money and we'll add your cert to our trusted list/remove theirs cert/disable cert when run on this hardware/etc."
Comment by direwolf20 2 days ago
Comment by creatonez 1 day ago
Comment by alexcodebytes 2 days ago