OpenSSL Security Advisory
openssl.org
openssl.org
https://jbp.io/2015/06/11/cve-2015-1788-openssl-binpoly-hang...
It's embarrassing rather than terribly dangerous.
edit: Please note: there are other issues in this advisory. You should read the advisory, first and foremost.
(I'm mostly posting this because I don't want anyone to read your post and think they can ignore this whole notice.)
Fixes for the following issues are integrated into LibreSSL 2.1.7 and LibreSSL 2.2.0: - CVE-2015-1788 - Malformed ECParameters causes infinite loop - CVE-2015-1789 - Exploitable out-of-bounds read in X509_cmp_time - CVE-2015-1792 - CMS verify infinite loop with unknown hash function (this code is not enabled by default)
Edit - The updates included are mentioned here: https://github.com/libressl-portable/portable/blob/master/Ch...
https://bugzilla.mozilla.org/show_bug.cgi?id=1166031 and https://bugzilla.mozilla.org/show_bug.cgi?id=1138554 say explicitly wontfix for 38.0.5
Maybe you manually fixed it some time ago and don't remember?
Check both https://weakdh.org/ and https://www.ssllabs.com:10445/
Secure Connection Failed
An error occurred during a connection to 10.xx.yy.xx. SSL received a weak ephemeral Diffie-Hellman key in Server Key Exchange handshake message. (Error code: ssl_error_weak_server_ephemeral_dh_key)
- The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
- Please contact the website owners to inform them of this problem.
I wish they gave option to bypass it.Both on Mac and OpenSuSE.
- Chrome 43.0.2357.124
- Firefox 38.0.5
- Safari 8.0.6 (10600.6.3)
Not vulnerable
- Opera 30.0.1835.59
Reference: https://www.ssllabs.com/ssltest/viewMyClient.html
I'd assume that the null ptr pkcs#7 issue found by Michal Zalewski was also afl and the ecc issue as well (as documented by its founder). The CMS loop issue sounds also like it could've been found by fuzzing.
It's important to keep in mind what fuzzing can and can't do. It is a great method to find some bugs, but it has its limitations and can only find a certain class of bugs.
If you're seeing OpenSSL in the output, you have probably installed SSH via Homebrew.
OpenSSL 0.9.8zd 8 Jan 2015
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
Not sure if you're being sarcastic?
"LibreSSL has the affected code and is thought to be vulnerable (untested)." - https://jbp.io/2015/06/11/cve-2015-1788-openssl-binpoly-hang...
https://github.com/libressl-portable/portable/blob/master/Ch...
The last time a bunch of OpenSSL CVEs dropped, there were 14 of them; two of which were rated sev: High. LibreSSL was affected by 5 out of the 14, none of which were high-severity.
This time around there are seven vulnerabilities and LibreSSL is affected by four of them[1].
So there's at least 12 reasons.
[0] https://marc.info/?l=openbsd-cvs&m=142677372515025&w=2
[1] https://marc.info/?l=openbsd-announce&m=143406498020131&w=2OpenSSL in C has had range errors discovered for over a decade now. Short of going to a safe language or full machine proofs of correctness, it's never going to be fixed. "Many eyes" don't help.
(Of course, one wonders how many OpenSSL security holes are deliberate backdoors.)
For the "many eyes" situation to work, you have to have code which "many eyes" can understand. Asn1-related functions in openssl are not in that situation.
Edit: If you've never looked at openssl code, check this out: https://github.com/openssl/openssl/blob/063dccd027033401912d... - yup - that's part of public interface. It's got a mention on the man page, but no idea what encoding it actually outputs. Maybe ascii, maybe something else. Good luck finding out from source.
Edit2: Just a few lines above you can spot: "/* memory leak, buit should not normally matter */"
For example, the suggestion at this page: https://www.openssl.org/docs/crypto/sha.html to use the higher-level EVP_ functions was difficult to actually adhere to, given that the EVP_ functions themselves don't actually explain how to generate a message digest given some input data. I wasted half a day once trying to understand how those functions worked once before giving up and just using the digest functions directly. It's still not clear to me why the EVP functions provide a significant advantage, or even how I would use them to accomplish the use cases outlined in the digest functions.
I suspect that not understanding the OpenSSL APIs is a common problem, and possibly an underlying cause of a lot of crypto implementation errors.
In case of EVP_... your code is not hardcoding the hash type. You can provide the hash by its name in the config file without any code changes in the app. When using hash contexts directly, you're stuck with what you implement.
E: It also helps that the code with the hardcoded hash type is much easier to understand than the equivalent EVP code.