328 comments

[ 0.30 ms ] story [ 21.2 ms ] thread
That's some criminal negligence right there.

8 bits is crazytalk!

There absolutely need to be criminal, personal consequences for something like this
“4”

hey chatgbg what is a “private key”

Maybe they were counting on the fact that usually the right answer to “I’m thinking of a number between 1 and 10” is “7”.
As someone from Gothenburg, Sweden (often referred to as gbg) I shall answer:

A private key is a tiny number you don't need to share publicly because it is easy enough to guess.

Isn't 4 simply 2 bits?

Silly 2-bit outfit.

Maybe it's 3 bits.

Of COURSE it's easy to crack, 4 isn't even prime!
In their defense, they were probably targeting the Mersenne prime 2^2 - 1 and just made a typo.
> In their defense, they were probably targeting the Mersenne prime 2^2 - 1 and just made a typo.

There are two hard problems in computer science: naming things, cache invalidation, and off-by-one errors.

Two, and only two?
You have almost understood the joke.
two is off-by-one from three btw
But the cache invalidation failed
It's been a while since this one popped up. It's surprising how many of those doodles are surviving the test if times, in the midst unexpected ways
Hey, that's the same combination I have on my luggage!
Good job the Earth doesn't have an air shield protected by this byte or we'd be Skroob'd.
ok, it's joke. but for those who don't get it: elliptic curves don't need primes
They should have gone with 57. Everyone knows it's prime.
I wonder if anyone wants to over-analyze this joke to come up with the best candidates for the number? 57 falls too easily to the quick divisibility by 3 trick, IMO. (I realize over-analyzing jokes always makes them unfunny but we can pick the best number here and nobody has to know).
Me! I'm in!

Most-nearly-prime number under 100 is.... 91.

13 x 7. You've either memorized that or you're going to have fun deciding it's not prime. And if you did times tables up to 13, congratulations, you're special.

7 is an easy check, not because i did them up to 13.

because 10x7 = 70, i'm left with 21. everyone knows 21 is divisible by 7.

I think 91 is a strong contender. Sejje has a way of working it out, but of course any small non-prime will have some trick to it.
it doesn't have to be and it actually never is: this isn't RSA, it's an elliptic curve algorithm. if you'd have read the article, you'd have understood this
It feels like they chose the private keys by hand.
Artisanal cryptography. Hand-picked private keys salted with organically sourced nonces.
Brooklyn-based. Guy in overalls and a waxed mustache hands out the bits.
My bet is on one of

- A sequence number being accidentally used as the private key or

- The private key being generated securely but then accidentally truncated to 8 bits (e.g. writing a single char into a zeroed buffer when you should've memcpy'd from a char*).

The sequence number idea is supported by the fact that two of the G3B private keys are consecutive numbers. I ran a quick Monte Carlo simulation and if I got it right, sampling 8 keys from [0,255] uniformly at random (as in the truncation scenario), you'd expect them to contain 2 consecutive numbers only about 18% of the time.

All the numbers also have digits going from left to right on a keyboard. I think the manual "random" input theory is plausible.
Oh wow, that is even more damning. Only 146 out of the possible 256 keys have this property. You only have about a 1% chance to get that 8 times in a row (A little more than 1% if sampling with replacement and a little less if sampling without. You'd expect them to at least not use the exact same key twice but at this point???).
(comment deleted)
Some error code being used? FIPS mode gone wrong?
> A sequence number being accidentally used as the private key or

I will never in my life not look up “for of vs for in” before writing a loop in Javascript.

A long time ago one time pads used to be chosen by hand by women picking numbered lottery balls out of a spherical tumbling machine on a table.
The fact that there are more than the "4" one, and all the low numbers are below 384 (384 being the bits for private key) makes me think whoever was creating these thought "Oh a random number between 1-384" let me choose... 4! (156, 230, 115, 56, 66, 237, 155)...

https://xkcd.com/221/

There's a beginning of an explanation in the mozilla bugrepor thttps://bugzilla.mozilla.org/show_bug.cgi?id=2083449
Thanks. The relevant quote:

> We have done some preliminary assessment, there appears to be a flaw in the KGC script that was used on that specific day to create these ECC issuers. As for these ECC keys, our review of the KGC, assessment of the code and view of HSM keys so far indicate that a) a set of original ECC keys were created onboard as expected b) an approved deviation to our usual KGC to test a wrap/unwrap was introduced as these keys were meant for export for this instance c) a flaw in the code resulted in the second pair of keys being created onboard which were weaker d) these second pair of weaker keys were used by mistake to create the csr (because the key labels were similar) and signed by our root e) the CSR from these weaker keys were also sent over to Sectigo for cross signing (we verified the files sent over to Sectigo)

`a flaw in the code resulted in the second pair of keys being created onboard which were weaker`

that sounds like the HSM is capable of generating keys in a range that is smaller than [1..group_order). such a feature makes no sense at all. or is this some kind of weird thing where people want to generate weak keys for 'testing' and HSM vendors have added such a strange feature. its actually satisfying to see someone get burned by this because such a feature should never exist and this is the reason why. if the HSM can generate keys in a smaller range (especially some arbitrary small range) then you are putting a lot of trust in the operators of the HSM. hopefully there are good audit logs and people actually check the audit logs every time keys are generated to make sure the keys being generated aren't from a special range.

Maybe it follows openssl keygen process: you first generate private key, then export public key from it as k*G. In case of ecc private key is a random number, streamed from RNG, but RNG doesn't know for what purpose you generate a random number and can generate a number of any size.
hey, at least it was easy to remember...
Can't lose your key if it's easy to remember!
In retrospect, having 100 trusted certificate authorities might have been excessive.
In retrospect, not having a tiny competency check may have been an oversight.
Indians and competency do not go together
(comment deleted)
Competence is difficult to check systematically. The problem is in the auditing process. The CA auditors check a much shorter list than an application that needs FIPS compliance. They just check that the CA is using a FIPS compliant key generator, and then basic things like following a logged, standard, multi person process.

Anybody writing a system for a bank or the govt needs to have every line of code checked that it’s not doing something stupid with its crypto keys. That level of assurance would have caught this. But the process was defined too weakly.

Oh for sure. And at the time these were done, I'd guess cracking them was a lot more work. But still. 4.
This key 4 was from a new ceremony, they must have hit the highest security key just recently and wrapped around.
That is certainly a theory. Another one would be they mistyped a command and rolled with it.
I mean more than a typo the keys look like some guy just typing in random numbers, and the company did say they had some deviations to procedure.
> They just check that the CA is using a FIPS compliant key generator, and then basic things like following a logged, standard, multi person process.

FIPS-compliant key generator allowed key to be 4 ?

No, they just didn't check thoroughly enough

The key generator is a FIPS certified HSM that created a strong key. They ran the key through some stupid script that zeroed out all the bytes except the last one. The point of a full FIPS audit is to check that you don’t do anything stupid with crypto like try to implement anything yourself and that you only use certified implementations. But that standard apparently doesn’t apply to CA’s. They only have to use FIPS modules to generate the keys but can do whatever idiocy they want after that. Therein lies the real problem.
> They ran the key through some stupid script that zeroed out all the bytes except the last one.

If a script zeroed out the private key, wont the public key not work anymore?

The public key is calculated from the private key, so it all still works, it's just a public key for a private key of 4.
Especially as more of the third world comes online
or, perhaps you need more so that one being stupid doesn't effect so much.
> perhaps you need more so that one being stupid doesn't effect so much.

So you create more surface area for vulnerability? We might already be at or close to the sweet spot. Security is hard.

I would assume that the client would need to validate the certs against more than 1 trust path (for the comment to make sense)
Each CA is like a padlock locked in series with other padlocks. The weakest padlock is the only one that matters.
In a world with CT logs and CAA records, is that actually the case?
Yes, because as we are seeing with this incident, plenty of things don’t check CT logs (and thus can still be hacked if CT isn’t published for bad certs), and CAA records are fundamentally advisory.
Correct, we only need zero.
Interesting, what would be the alternative?

I mean specifically for the use case of the browser warning the user if there is a MITM between them and e.g. their bank.

For me the complexity of anything connected to public internet is now over what I can secure.

I genuinely can't say I secured a PC, when it needs to phone home for a configuration at this point.

We are most likely over the line for needing to airgap a personal PC.

I quite like how i2p does it. Public keys are part of addresses, human readable names are user defined and shared but static.
Scan a QR code when you open the account, add it to the keys you trust as authorities on financial things. When your browser runs accross data tagged "financial" it checks the trusted keys in that domain and renders it only if it was signed by a key that is trusted in that domain. If you ever see something that you can independently verify is false, you untrust whichever keys signed it and take it up with their holders.
That solves integrity but not confidentiality. It does not protect against MITM.
It does protect against MITM. A man in the middle can pass the content along or they can refuse to do so but they can't forge a signature.

If confidentiality is required, well you already have a public key that you're using to verify content, then the content can say: "reach us at 196.7.3.45" and then you encrypt communications to that address with the same public key you use for validating content.

Or maybe they'll specify, in the content, that you should use a different key for that, but either way the chain of trust is preserved.

This would of course all be protocol level stuff, handled by the browser, not a human. They just have to maintain a list of keys they trust.

>It does protect against MITM. A man in the middle can pass the content along or they can refuse to do so but they can't forge a signature.

Um, I don't think you understand this problem near as good as you think you do?

>A man in the middle can pass the content along or they can refuse to do so but they can't forge a signature.

So where do you get this signature exactly so they don't MITM you the first time?

> well you already have a public key that you're using to verify content,

Who what where when why? Where did I get this public key? Who provided it? Is this my public key or their public key? How do I trust it?

>They just have to maintain a list of keys they trust.

So you've solved exactly nothing.

> So where do you get this signature exactly so they don't MITM you the first time?

That's always going to depend on why you're trusting them in the first place. If somebody handed you a business card the key should be on the card. If it was a recommendation from a friend you should use whatever key they use.

If you're expecting to just type random IP addresses into your browser until you hit something and then be told that you should trust what you see... Well that's not in the cards because you shouldn't trust what you see in that scenario.

We already don't type in URL's, we send links to each other. It really wouldn't be so difficult to change the UX so that when we delegate trust in that way it's public keys that are being trafficked instead.

> So you've solved exactly nothing.

Removing untrustworthy third parties and the need to revoke trust in them on the user's behalf is the solution. Users don't know what a CA is or how they should evaluate its trustworthiness. We need a system where they're instead evaluating the trustworthiness of things they understand, like other people.

[delayed]
Well if you find unsigned content, you should probably just not show it to the user at all.

As for tagging... We could use something like color to indicate domain. So if your well trusted plumber is giving financial advice maybe it shows up, but not in the "financial" color? Idk it seems like a solvable UX problem.

Anything relying on user recognising some tag colour seems like an unsolvable UX problem to me.
So, have each domain run its own root CA (scoped to the domain), and have users trust them one at a time when they have cause to interact with them?
More or less.

I'd argue that you should push this into the application layer, so rather than scoping the keys to domain names you scope them to something relevant to whatever the user authentically trusts. So the user (or OS) would pass an object at runtime to indicate which peers they want the app to trust today.

Typically it'll be another human or a company, not a server name, but I suppose it could also be a device. Something that can guard a key pair. That way you're just not relying on globally unique human friendly names at all. Doing so puts you in a cursed corner of zooko's triangle.

Users can assign a pet name for whoever they're trusting at the time they're configuring that trust.

This way your application can work over alternative transport layers: carrier pigeons, whatever, and doesn't break just because the other party has a different names on the new transport. Relevant for when the internet goes down and you still want it to work with other hosts on the LAN or the local mesh or whatever.

In the modern day that's arguably fine, most users only interact with a few actual companies online (though many of them haphazardly use dozens of domains and dozens of unrelated certificates).

The only 'real' problem though with this approach is it requires a trusted path for the bank to get the "JP Morgan Chase root CA cert" into my hands (like a QR code they hand me physically). Serving it up over http: or over an unvalidated SSL context at first use seems to defeat the purpose since I could be being MitMd the first time I hit chase.com. In practice most people would be angry that they couldn't use the bank's website if their new phone or PC didn't have the certificate yet, and if places start advertising their cert QRs everywhere, it will normalize the idea that you add a CA certs all the time, leading to CA cert QRs being on billboards and bus stops and eventually fraudulent ones would be snuck in that way.

QR codes are already everywhere, and are even used to distribute software, it's already normalized.
Sure, but if "scan this and do FaceID and click 'Yes, I trust this CA'" was as common as "Accept terms & conditions" or "Allow necessary cookies" or (the worst:) "Check your email for the six-digit code" then people would be installing CAs so often that everyone would have dozens of extremely shady ones installed at all times.
You are describing key pinning. You have invented QR-code-based key pinning.
My intent is to provide users with the ability to revoke trust if in a source of information if they realize it is malicious, and to gossip that revocation among their peers.

RFC 7469 appears to be more geared towards service providers attempting to protect their users. Laudable, but we're still assuming we know something about who the user deems trustworthy.

Well the user certainly doesn't know how to determine trust, otherwise scams and social engineering wouldn't work.
In practice we have Certificate Transparency Logs that let us check whether a CA has issued a certificate for a domain you control without you asking them to.

This really reduces how much we need to trust the CAs, because we can detect any untrustworthy actions after the fact. Now detecting after it happened is too late. But it does mean that mistakes or malicious actions are much more expensive to a CA. In practice this has really reduced the risk, especially to those whom aren't interesting enough to burn a valuable capacity on. Which is the vast majority of people. Though perhaps if you count TLS traffic weighted by importance that count is different.

I think someone explained that only browsers and maybe some applications check the CT logs in the first place. Most applications don't, so someone can impersonate any URL an application connects to and the attacker doesn't have to publish to a CT log.
How would certificate transparency logs have helped here though? If the private key leaks and anyone can mint a valid certificate that gets accepted, those logs aren't going to reveal it.
If an attacker takes the CA key and issues a valid certificate, but does not log it to CT, mainstream browser clients will not accept it.

When a certificate is logged to CT, you get back an SCT, and the issuing CA will normally include that in the certificate. The browser will then accept this certificate as it has the correct SCTs (there are always at least two).

The attacker issued certificate hasn't been logged, so can't have an SCT, so won't be accepted by the browser.

We can't say that no certificates have been issued by an attacker. We can say that no certificates have been issued by an attacker that a modern browser client would accept.

Oh interesting thank you. I had misunderstood how CT works.
Zero would be hard but we could have signed CA cert put into DNS record and from that the org itself can create the certs for that domain.

Then at the very least one of the CAs leaking isn't automatic compromise, as leaking the key still doesn't make you insecure, that would also require intercepting and changing DNS records

How are they trusted if they can just generate any key they like in their back room?
That's the thing about trust -- in order to get into the root key store for windows, chrome, linux, etc they were trusted not to do that.

they violated that trust.

"Trusted" means how people treated them, it doesn't mean the extent to which they deserved trust.
There are chains of trust which are established for SSL certs, centered around the idea that if we can believe Mozilla et al. that the server responding is who they claim they are. Up until now, that is good enough to establish the trust needed to accept the 2 keys in the connection are connected, and then a secure connection could be established to the host server.

Mozilla et al. could claim trust for Microsoft and then MS would be an intermediary for Mozilla. There is a long history of sketchy intermediaries like GoDaddy and others that root certificate providers like Mozilla would block at times due to abuse.

This leads to users, usually ones that are not that technically savvy, seeing 'insecure' warnings on a page that actually offers HTTP. ..but since the root servers no longer accept them as trusted, everything that GoDaddy supported, and every intermediary (child) cert which they approved would no longer be trusted and you would see a non-secure warning.

Which leads to users that are not that technically savvy learning to always click "Load it anyway!" and not think about it, even in financial management firms. Ask me how I know...
That really depends how you define "trusted certificate authorities".

If you're talking about root certs then it's almost 350 currently trusted by at least one major operator.

If you include intermediates, you're talking more than 3,600!

Certificate transparency requirements effectively take the power away from certificate authorities.

They instead place the burden on individual webmasters again to actually verify that nobody has been falsely issuing for their domains. There are also some new vulnerabilities about CT logs who might be malicious.

I agree this is a burden placed on domain owners, but who else can know if a certificate for my domain 'scotthelme.co.uk' was supposed to be issued other than me, the owner of 'scotthelme.co.uk'?

Do you have any info on the malicious CT logs? I'd be interested to read something on that!

Possibly CT logs revealing information about domain name and IP address spaces, or other information through implementation details, that might not otherwise be public.
CT logs stapling proof, but then never actually including that cert in the log.
But that's detectable and what we have MMD for, a log operator that does this can be found out.
(comment deleted)
eMudhra explanation : https://bugzilla.mozilla.org/show_bug.cgi?id=2083449#c11

Kind of hard to understand how a bug would have generated a second pair of key so bad, and how would human would have ended up using them. Never attribute to malice what can be attributed to stupidity, but sometimes you wonder.

Any sufficiently advanced malice is indistinguishable from stupidity.
Never assume stupidity for what can adequately be explained by profitable malice.

Never assume unprofitable malice for what can adequately be explained by stupidity.

The reverse is also true:

Any sufficiently advanced stupidity is indistinguishable from malice.

And an equal amount of stupidity in the whole ecosystem, apparently there are no "unit-tests" for trivial failure modes, like 8 bits of entropy, before adding a CA to the trusted list.

What next, googling the public key finds a 2 year old pastebin with the private key?

Given the usefulness of this to anybody who knew about it between the ceremony and now - assume malice.
If I was to leak a private key for malicious use, I would leak a good key that only I know.
Could HN start feeding submissions through Pangram so us human readers don't have to suffer with reading the nauseating AI-prose?
It reads fine to me. If it is AI, I'd like to know which one so I can use it too.
It reads okay to me too, yet Pangram says it's mixed - the "What a private key actually is" section is AI, so is 'Why "it cannot be contained"' and some others.
It has parts that are human written and parts that are generated. I couldn't tell at first, but now seeing it in Pangram, it's kind of clear.
It was all written by me and then I had final pass/tweak with Claude.
So parts were generated... Unless you're saying Claude just went "lgtm, ship it"
Fair enough, call it a mix if you like. I'm happy to stand behind every claim in my post, and if something's wrong, tell me and I'll fix it.
I got the impression you did a very good job of writing it by yourself and adding claudisms just makes it feel less trustworthy and slightly grating.

Not calling you out or anything i just take don't understand what people think they're gaining when they add a dash of claudeslop to an otherwise well written article, it confuses me. You do you though

Count yourself lucky - compared to Claude's prose, this is fairly readable.
This is not a good write-up. Yesterday's discussion did contain better data, less self-Promotion and actually asked why it happened, instead of just saying "number small".
I will say, there’s something almost reassuring when something goes boom that badly and the story is really silly. It’s like [horrific human-caused disaster] but it’s because of a Three Stooges episode.
The more cynical among us think that is part of it. Remember when Bush Jr. became a bumbling idiot for a few years?
I wouldn't be surprised if we learn in the near future, that this was deliberate.
I'm not so sure. If you wanted to be deliberate, you'd choose a plausible value that you could control.

No one is going to suspect `98761316832165974216498789746` is anything other than random. But `000000000000000123` looks suspicious.

But that would be obviously intentional. Much more plausible deniability with 0x4.
Sounds more like extremely sloppy procedures. Which depressingly I doubt are unusual among CAs.
As far as I know, to become a CA, with the requirements and ceremonies involved, this type of mistake must never happen. Assuming malice instead of ignorance is reasonable here. The entire premise of a CA, is trust.
There are a lot of CAs that are essentially grandfathered into root programs (and there’s no “one” root program, every OS and verifier gets to choose their own inclusion policies). They might need to jump through hoops to stay in any given program, but being there in the first place is not a strong indicator of quality.
Makes no sense.

If it was deliberate, one would use keys that only the person abusing it has. Not keys everyone can guess if they get a hint.

Deliberate deniability - if you leak a real key, it's pretty obvious you leaked a real key.

Here, you didn't leak anything, you just fucked up.

Exactly :) Its a pity people are so gullible that they cannot see, that people, truly are bastards.
I would be shocked if this was anything other than a bug. A CA already has the power to issue MITM certificates, so what reason would a CA have to deliberately generate bad keys?

In all likelihood it is code that reads 1 byte from /dev/random, or reads 32 bytes but writes it into a 1 byte array, or something to that effect.

> and no TLS certificates chaining to these CAs ever showed up in CT

Why are browsers trusting CAs which issued zero certificates since their creation 1 year ago?

These are intermediate roots, signed by trusted root certs, so the trust from your OS or browser is implicit to the roots it trusts.
Yes, but there was no TLS cert issued that had these intermediate certs in its chain of trust at all anywhere. So why are they a CA if they don't issue any certs?
Their other intermediates have issued certs.
At this point, I think it'd be reasonable to start saying "why do we trust intermediate roots, period".
(comment deleted)
Two more things to note about impact assessment: Flatpak uses the selected runtime's baked-in trust store (I think), so any apps may be susceptible even if you update the system package. Containers also don't inherit the host's trust store and use the one from the base image.
If the application uses p11-kit, or a TLS library that uses p11-kit such as OpenSSL, NSS, or GnuTLS, then Flatpak should automatically give it access to the host system's CA certificates.
All the numbers were under 384. Surely they couldn't have ...
All the numbers were under 256. Surely they did.
"Hah! 0x000...0 is the most secure private key I could use because nobody will think of trying that! Too obvious! Just like my 1234 bank pin!"
What the chances there’s another CA key out there with something like unix time as the key?
Another place to search for private key candidates would be the outputs of various common PRNGs when they have been seeded with a timestamp (for all timestamps in, say, the past 20 years).
Another very unfortunate even next to the php, fun times we are living in.
I wonder how someone stumbled upon this - maybe leaked by someone inside eMudhra?

Since there's nothing to indicate that the private key was all zeroes and one non-zero lsbyte, and presumably nobody would try to brute-force a private key.

I suspect that they read the article last Friday about Claude finding the origin of the ECDSA constants. That was only a few hours before Google received the vulnerability report.

The two cases are very similar. The only difference is that the weak randomness was harmless in the earlier story, and here it’s devastating.

> It's fortunate that the steps required here aren't particularly complicated for the devices you can update, and the advice essentially boils down to 'update them'. The problem is the devices you can't update or update easily.

> Update everything that ships a CA bundle: your OS ca-certificates package, certifi, Node, Homebrew, and rebuild your container images once the base images pick up the change.

> Devices you can't update are the hard part. Routers, printers, TVs, appliances with frozen firmware will trust these certificates until expiry, which is July 2039...

Quick -- we need to MITM all the smart TVs so they can be jailbroken in one fell swoop!

> > Devices you can't update are the hard part. Routers, printers, TVs, appliances with frozen firmware will trust these certificates until expiry, which is July 2039...

The interesting question is, how many of these devices will have the compromised CA root certificate in place?

Oh and another thing is problematic, many a Java app ships with its own keystore.jks if it needs to trust some privately hosted endpoint, and that keystore.jks may or may not contain the compromised CA root certificate... updating the OS will not catch this kind of stuff.

> how many of these devices will have the compromised CA root certificate in place?

I have two Google devices at home and both are compromised still. If Google can't handle pushing out a quick cert chain update, then I truly doubt other manufacturers can.

I'm rather surprised google doesn't require cert pinning for all connections to any google server....
These devices are already very weak and many of them even do non-TLS updates with no signing check anyway.

If it has been so weak already, it can't be weaker.

Not always true. I have IoT devices where a valid certificate is useful because the original host doesn't exist anymore and the certificate isn't pinned.

Flashing the devices require direct UART/USB access which may involve soldering, if it even exists. This leak is gold for those because these devices will never get an updated CRL.

Devices that are smart enough to talk to the internet but not smart enough to let the user install their own certs should not exist.
"let the user install their own certs should not exist"

are you sure that this is not opening to more attack vector ?????

Users aren't supposed to be considered an attack vector. I don't care what the advertisers think.
Users are attack vectors in one of the more commonly successful attacks: social engineering.
Like: To verify you are human, clik on the two ducks and install this new certificate.

Bonus points if it's during a fake job interview.

Absolutely. "To access our secure site, install this certificate as follows..."
I did a job interview in a VM once and my legitimate accounts on some platforms got banned for using them in a VM. So you can't even protect yourself.
> my legitimate accounts on some platforms got banned for using them in a VM

Which legitimate accounts get banned for use in a VM?

That seems like an incredibly important thing I should know as I use legitimate accounts in VMs.

Bullshit. How would a website even detect a VM?
RCE then run an exploit to break out VM. If it's success, then you are on VM.
Yes, however, this causes people who know what they do suffer because of people who don't. My question is whether this affects innovation, because the same thing at different places definitely does, and we actively fight against this exactly to help innovation.
Right. Let's no longer sell computers then.
Which is better - two attack vectors that can be mitigated by an expert, or one attack vector that can't be mitigated by anyone?
You can even install your own certs into the golden cage (also known as iPhones).
Yes. We're giving the user the ability to protect themselves from the vendor.

Your logic only makes sense if the user is your enemy.

I am the vendor and the user is my enemy. Fortunately I get to decide his capabilities and not the other way around, so I win.
The device is in the user's possession, so you'll lose eventually, it's just a matter of how long it takes.
(comment deleted)
Just imagine how much stuff you're going to be able to MiTM now!!
If you just take them offline you can do this without having to rush.

Just change your WiFi password, don’t give them the new one and don’t update them lol.

You can't hardly use the TVs then. I've seen TVs that don't let you use the HDMI port without it being connected if you have a streaming dongle connected. Hopefully that practice has mostly died off now (Samsung used to do this on some models, iirc), but it's still a risk and only kicks the can down the road a bit.
I have a terrible LG smart TV (that seems to connect to WiFi that is not mine), but I would instantly return a TV that did this.
Yeah those devices also need to be “opened up” as it were. Some of them already have been. Just think about it like fermented whiskey. Leave them alone for a month or two until they run an opensource firmware you control.
It's easy enough to apt upgrade, and curl shows it's not vulnerable.

But what about python pip and node and bun which bundle their own certs?

And then you'll have a compiled binary like Claude Code, which was built with bun, and has its vulnerable certificates bundled in, ignoring the system certs.

Yep, it's a long tail. Anything that ships it's own CA bundle will ignore whatever you fix at the OS level. Those bundles are generally root-only and don't have revocation checking, so they can't block a bad intermediate cert.

The fix can only come from the tool shipping an updated bundle, or if there's some way you can point it at the OS store once that's updated.

[delayed]