CVE-2010-4180 fix (from OpenSSL_1_0_0-stable)

This commit is contained in:
Bodo Möller 2011-02-03 10:42:00 +00:00
parent 5080fbbef0
commit 346601bc32
5 changed files with 29 additions and 12 deletions

View File

@ -50,6 +50,11 @@
Changes between 1.0.0b and 1.0.0c [2 Dec 2010] Changes between 1.0.0b and 1.0.0c [2 Dec 2010]
*) Disable code workaround for ancient and obsolete Netscape browsers
and servers: an attacker can use it in a ciphersuite downgrade attack.
Thanks to Martin Rex for discovering this bug. CVE-2010-4180
[Steve Henson]
*) Fixed J-PAKE implementation error, originally discovered by *) Fixed J-PAKE implementation error, originally discovered by
Sebastien Martini, further info and confirmation from Stefan Sebastien Martini, further info and confirmation from Stefan
Arentz and Feng Hao. Note that this fix is a security fix. CVE-2010-4252 Arentz and Feng Hao. Note that this fix is a security fix. CVE-2010-4252
@ -60,6 +65,7 @@
*) Fix extension code to avoid race conditions which can result in a buffer *) Fix extension code to avoid race conditions which can result in a buffer
overrun vulnerability: resumed sessions must not be modified as they can overrun vulnerability: resumed sessions must not be modified as they can
be shared by multiple threads. CVE-2010-3864 be shared by multiple threads. CVE-2010-3864
[Steve Henson]
*) Fix WIN32 build system to correctly link an ENGINE directory into *) Fix WIN32 build system to correctly link an ENGINE directory into
a DLL. a DLL.

14
NEWS
View File

@ -5,6 +5,20 @@
This file gives a brief overview of the major changes between each OpenSSL This file gives a brief overview of the major changes between each OpenSSL
release. For more details please read the CHANGES file. release. For more details please read the CHANGES file.
Major changes between OpenSSL 1.0.0b and OpenSSL 1.0.0c:
o Fix for security issue CVE-2010-4180
o Fix for CVE-2010-4252
o Fix mishandling of absent EC point format extension.
o Fix various platform compilation issues.
o Corrected fix for security issue CVE-2010-3864.
Major changes between OpenSSL 1.0.0a and OpenSSL 1.0.0b:
o Fix for security issue CVE-2010-3864.
o Fix for CVE-2010-2939
o Fix WIN32 build system for GOST ENGINE.
Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a: Major changes between OpenSSL 1.0.0 and OpenSSL 1.0.0a:
o Fix for security issue CVE-2010-1633. o Fix for security issue CVE-2010-1633.

View File

@ -78,18 +78,7 @@ this breaks this server so 16 bytes is the way to go.
=item SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG =item SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
ssl3.netscape.com:443, first a connection is established with RC4-MD5. As of OpenSSL 0.9.8q and 1.0.0c, this option has no effect.
If it is then resumed, we end up using DES-CBC3-SHA. It should be
RC4-MD5 according to 7.6.1.3, 'cipher_suite'.
Netscape-Enterprise/2.01 (https://merchant.netscape.com) has this bug.
It only really shows up when connecting via SSLv2/v3 then reconnecting
via SSLv3. The cipher list changes....
NEW INFORMATION. Try connecting with a cipher list of just
DES-CBC-SHA:RC4-MD5. For some weird reason, each new connection uses
RC4-MD5, but a re-connect tries to use DES-CBC-SHA. So netscape, when
doing a re-connect, always takes the first cipher in the cipher list.
=item SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG =item SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG

View File

@ -867,8 +867,11 @@ int ssl3_get_server_hello(SSL *s)
s->session->cipher_id = s->session->cipher->id; s->session->cipher_id = s->session->cipher->id;
if (s->hit && (s->session->cipher_id != c->id)) if (s->hit && (s->session->cipher_id != c->id))
{ {
/* Workaround is now obsolete */
#if 0
if (!(s->options & if (!(s->options &
SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG)) SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG))
#endif
{ {
al=SSL_AD_ILLEGAL_PARAMETER; al=SSL_AD_ILLEGAL_PARAMETER;
SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED); SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED);

View File

@ -986,6 +986,10 @@ int ssl3_get_client_hello(SSL *s)
break; break;
} }
} }
/* Disabled because it can be used in a ciphersuite downgrade
* attack: CVE-2010-4180.
*/
#if 0
if (j == 0 && (s->options & SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG) && (sk_SSL_CIPHER_num(ciphers) == 1)) if (j == 0 && (s->options & SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG) && (sk_SSL_CIPHER_num(ciphers) == 1))
{ {
/* Special case as client bug workaround: the previously used cipher may /* Special case as client bug workaround: the previously used cipher may
@ -1000,6 +1004,7 @@ int ssl3_get_client_hello(SSL *s)
j = 1; j = 1;
} }
} }
#endif
if (j == 0) if (j == 0)
{ {
/* we need to have the cipher in the cipher /* we need to have the cipher in the cipher