DROWN attack
The DROWN (Decrypting RSA with Obsolete and Weakened eNcryption) attack is a cross-protocol security bug that attacks servers supporting modern SSLv3/TLS protocol suites by using their support for the obsolete, insecure, SSL v2 protocol to leverage an attack on connections using up-to-date protocols that would otherwise be secure.[1][2] DROWN can affect all types of servers that offer services encrypted with SSLv3/TLS yet still support SSLv2, provided they share the same public key credentials between the two protocols.[3] Additionally, if the same public key certificate is used on a different server that supports SSLv2, the TLS server is also vulnerable due to the SSLv2 server leaking key information that can be used against the TLS server.[3]
CVE identifier(s) | CVE-2016-0800 |
---|---|
Date discovered | March 2016 |
Discoverer | Nimrod Aviram, Sebastian Schinzel |
Affected software | SSL (v2) |
Website | drownattack |
Full details of DROWN were announced in March 2016, along with a patch that disables SSLv2 in OpenSSL; the vulnerability was assigned the ID CVE-2016-0800.[4] The patch alone will not be sufficient to mitigate the attack if the certificate can be found on another SSLv2 host. The only viable countermeasure is to disable SSLv2 on all servers.
The researchers estimated that 33% of all HTTPS sites were affected by this vulnerability as of March 1, 2016.[5]
Details
DROWN is an acronym for "Decrypting RSA with Obsolete and Weakened eNcryption".[6] It exploits a vulnerability in the combination of protocols used and the configuration of the server, rather than any specific implementation error. According to the discoverers, the exploit cannot be fixed by making changes to client software such as web browsers.[3]
The exploit includes a chosen-ciphertext attack with the use of a SSLv2 server as a Bleichenbacher oracle. SSLv2 worked by encrypting the master secret directly using RSA, and 40-bit export ciphersuites worked by encrypting only 40-bit of the master secret and revealing the other 88-bits as plaintext. The 48-byte SSLv3/TLS encrypted RSA ciphertext is "trimmed" to 40-bit parts and is then used in the SSLv2 ClientMasterKey message, which the server treats as the 40-bit part of the SSLv2 master secret (the other 88 bits can be any value sent by the client as plaintext). By brute forcing the 40-bit encryption, the ServerVerify message can be used as the oracle. The proof-of-concept attack demonstrated how both multi-GPU configurations and commercial cloud computing could perform part of the codebreaking calculations, at a cost of around $18,000 for the GPU setup and a per-attack cost of $400 for the cloud. A successful attack will provide the session key for a captured TLS handshake.
The investigators, who described the attack above as the general DROWN attack also found a specific weakness in the OpenSSL implementation of SSLv2 that allowed what they called a special DROWN attack. This vastly reduced the effort required to break the encryption, making real-time man-in-the-middle attacks possible that required only modest computing resources. The OpenSSL implementation of SSLv2 until 2015 did not check that the clear and encrypted key lengths are correct, allowing for example only 8-bit of the master secret to be encrypted. Until 2015, OpenSSL would also overwrite the wrong bytes in the SSLv2 master secret during its attempt at the Bleichenbacher countermeasure. Until 2016, OpenSSL would also happily negotiate disabled SSLv2 ciphersuites. Unlike SSLv3 and later, in SSLv2 the client was supposed to choose from a list of ciphersuites offered by the server but OpenSSL would allow use of unlisted ciphersuites.
The original reporters of the bug were the security researchers Nimrod Aviram and Sebastian Schinzel.[7]
Mitigation
To protect against DROWN, server operators need to ensure that their private keys are not used anywhere with server software that allows SSLv2 connections. This includes web servers, SMTP servers, IMAP and POP servers, and any other software that supports SSL/TLS.[8]
The OpenSSL group has released a security advisory, and a set of patches intended to mitigate the vulnerability by removing support for obsolete protocols and ciphers.[9] However, if the server's certificate is used on other servers that support SSLv2, it is still vulnerable, and so are the patched servers.
Numerous sources have recommended that the vulnerability be patched as soon as possible by site operators.
References
- Leyden, John (1 March 2016). "One-third of all HTTPS websites open to DROWN attack". The Register. Retrieved 2016-03-02.
- Goodin, Dan (1 March 2016). "More than 11 million HTTPS websites imperiled by new decryption attack". Ars Technica. Retrieved 2016-03-02.
- Nimrod Aviram, Sebastian Schinzel, Juraj Somorovsky, Nadia Heninger, Maik Dankel, Jens Steube, Luke Valenta, David Adrian, J. Alex Halderman, Viktor Dukhovni, Emilia Käsper, Shaanan Cohney, Susanne Engels, Christof Paar, and Yuval Shavitt. DROWN: Breaking TLS using SSLv2, 2016
- "National Cyber Awareness System Vulnerability Summary for CVE-2016-0800". web.nvd.nist.gov. Retrieved 2016-03-02.
- "DROWN Attack". drownattack.com. Retrieved 2016-03-24.
- "New TLS decryption attack affects one in three servers due to legacy SSLv2 support". PCWorld. Retrieved 2016-03-02.
- "DROWN - Cross-protocol attack on TLS using SSLv2 - CVE-2016-0800 - Red Hat Customer Portal". access.redhat.com. Retrieved 2016-03-02.
- "DROWN Attack". 1 March 2016.
- "Cross-protocol attack on TLS using SSLv2 (DROWN) (CVE-2016-0800)". OpenSSL. 1 March 2016.