logoalt Hacker News

whizzter • yesterday at 8:55 PM • 2 replies • view on HN

This caught my eye, remember how the eMudhra certificates had weirdly low parameters, like 4 and others in the single digits?

"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?


Replies

eichin • yesterday at 10:55 PM

Nice thing about this one is that we have the implementation details right in the article:

    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 :-)

➕ show 2 replies
tialaramex • today at 12:23 AM

This specific bug won't have been why eMudhra had crap parameters, that's most likely because somebody didn't understand how to use the hardware the new keys lived in properly.

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.