Three TLS Bugs in GoAhead
Posted by owenshen24 1 day ago
Comments
Comment by idlewords 1 day ago
Comment by FiloSottile 1 day ago
Skipping CRL checks is not a Critical. A Critical is "whoops we were not checking the signature on the certificates" or "I guess all zeroes is a fine session ticket key" (both happened, the former in wolfSSL, the latter in GnuTLS).
Bypassing chain length limits is... barely a Low? It's definitely not a High.
The DHE one is fun. It'd have been valuable if they spent some tokens figuring out if any open source library would accept those broken parameters. If not, it doesn't really matter. (Another good reason not to negotiate DH parameters ever!)
Comment by jkingsman 1 day ago
Comment by pseudohadamard 1 day ago
Comment by therein 1 day ago
Comment by whizzter 1 day ago
"Mbed TLS - Medium, CVSS 5.9 - A buffer-length typo reduces a 2048-bit DH modulus to one byte. TLS 1.2 DHE_RSA sessions are decryptable when the client accepts the broken parameters. GOAHEAD-SA-2026-0005."
Not familiar with those implementation details but was this the root cause?
Comment by eichin 1 day ago
mbedtls_ssl_conf_dh_param_bin(conf, dhm_p, sizeof(dhm_g), dhm_g, sizeof(dhm_g));
The first sizeof(dhm_g) should have been sizeof(dhm_p). So, do you attribute this to a simple typo (hard to catch at a glance due to similar letter shapes), "single letter variable names are bad" but the wikipedia page on DH also calls them p and g - it takes a little digging to get that "root" and "modulus" would have been better names, but maybe having them directly match the most common form of the equation would have made them easier to review...Or do you just add it to the list of C crimes, that "passing storage length and pointer" is maybe the worst possible way to return written-to storage from a function :-)
Comment by tialaramex 1 day ago
A fat pointer is one ordinary thin pointer, plus a pointer-sized blob of extra information, commonly a length. Examples would be Rust's &[T] slice reference, its &str string reference and a pointer for dynamic dispatch &dyn Shape in which that extra blob is pointing to a v-table of functions for how this particular type implements the Shape trait.
Comment by eichin 1 day ago
But no, the actual problem was so much less subtle.
Comment by gokulravi992 22 hours ago
Comment by tialaramex 1 day ago
But one possibility for their misunderstanding is related in that it'd be a confusion between an item (key #4) and the index to that item (4) and yeah, these APIs do encourage you to make that sort of mistake.
Comment by kfjgi84h 1 day ago
Comment by HexnMarcusWolfe 1 day ago
Comment by JustSkyfall 1 day ago
Comment by monster_truck 1 day ago
Comment by deakmisra 1 day ago
Comment by tnetherton 1 day ago
Comment by nderdweik 1 day ago