Twitter | Pretraživanje | |
Hector Martin
To clarify the Windows crypto fail: The problem isn't in signature validation. The problem is the *root store/cache*. CryptoAPI considers an (attacker-supplied) root CA to be in the trust store if its public key and serial match a cert in the root store, Ignoring curve params.
Reply Retweet Označi sa "sviđa mi se" More
Hector Martin 16. sij
Odgovor korisniku/ci @marcan42
So it's not that Windows uses the wrong curve parameters or anything like that, it's that at some point the key used to index into a validated cert cache is (serial, pub) when it should be (serial, pub, params). As they say, one of the hardest problems in CS is caching.
Reply Retweet Označi sa "sviđa mi se"
Geir-Arne 17. sij
Odgovor korisniku/ci @marcan42
How difficult is it to exploit? Ie. how much processing power does it take to create the key pair with an identical public key? Or perhaos those are already for sale?
Reply Retweet Označi sa "sviđa mi se"
Hector Martin 17. sij
Odgovor korisniku/ci @MrG_A
It takes the same amount of time as to generate a key normally. So microseconds. Maybe milliseconds.
Reply Retweet Označi sa "sviđa mi se"
Elichai Turkel 17. sij
Odgovor korisniku/ci @marcan42
I disagree with your assessment. Yes it could've been fixed by storing cache correctly, but that's like a compiler dev saying "well what you did is UB". He's right but also wrong, crypto should be designed to be resilient. TLS and Crypto32 should've never allowed custom curves.
Reply Retweet Označi sa "sviđa mi se"
Hector Martin 17. sij
Odgovor korisniku/ci @Elichai2
The bug is in not treating EC params as part of certificate identity. However, you *are* correct that supporting custom curves at all is a bug, because RFC5480 explicitly forbids that. I assume they support it because ANSI X9.62 does, because banks or something?
Reply Retweet Označi sa "sviđa mi se"
Kevin Marquette 17. sij
Odgovor korisniku/ci @marcan42
So the attacker provides a cert that gets cached. If that cert has a pub key and serial that matches one the user already has in his local root store, the attacker cert is trusted and used? Is crafting a cert like that possible? I'm assuming yes, or did I miss something?
Reply Retweet Označi sa "sviđa mi se"
Hector Martin 17. sij
Odgovor korisniku/ci @KevinMarquette
The real cert gets cached, then the attacker cert masquerades as the cached cert and gets trusted. Yes, doing this is trivial and there is code on GitHub already. It's standard OpenSSL commands and a few lines of Python.
Reply Retweet Označi sa "sviđa mi se"
Hector Martin 17. sij
Odgovor korisniku/ci @byuu_san
Are you tempting me? :P
Reply Retweet Označi sa "sviđa mi se"
Daniel B 16. sij
Odgovor korisniku/ci @marcan42
Finally! Thanks! This is the first time I get details on this. I was unsure how exactly the “fake cert” was able to impersonate a real root CA!
Reply Retweet Označi sa "sviđa mi se"