Commit 37569e64 authored by Bodo Möller's avatar Bodo Möller
Browse files

Fix SSL 2.0 rollback checking: The previous implementation of the

test was never triggered due to an off-by-one error.

In s23_clnt.c, don't use special rollback-attack detection padding
(RSA_SSLV23_PADDING) if SSL 2.0 is the only protocol enabled in the
client; similarly, in s23_srvr.c, don't do the rollback check if
SSL 2.0 is the only protocol enabled in the server.
parent a657546f
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -4,6 +4,15 @@

 Changes between 0.9.5a and 0.9.6  [xx XXX 2000]

  *) Fix SSL 2.0 rollback checking: The previous implementation of the
     test was never triggered due to an off-by-one error in
     RSA_padding_check_SSLv23().
     In s23_clnt.c, don't use special rollback-attack detection padding
     (RSA_SSLV23_PADDING) if SSL 2.0 is the only protocol enabled in the
     client; similarly, in s23_srvr.c, don't do the rollback check if
     SSL 2.0 is the only protocol enabled in the server.
     [Bodo Moeller]

  *) Make it possible to get hexdumps of unprintable data with 'openssl
     asn1parse'.  By implication, the functions ASN1_parse_dump() and
     BIO_dump_indent() are added.
+1 −1
Original line number Diff line number Diff line
@@ -134,7 +134,7 @@ int RSA_padding_check_SSLv23(unsigned char *to, int tlen, unsigned char *from,
		{
		if (p[k] !=  0x03) break;
		}
	if (k == 0)
	if (k == -1)
		{
		RSAerr(RSA_F_RSA_PADDING_CHECK_SSLV23,RSA_R_SSLV3_ROLLBACK_ATTACK);
		return(-1);
+2 −1
Original line number Diff line number Diff line
@@ -366,6 +366,7 @@ static int ssl23_get_server_hello(SSL *s)
			}

		s->state=SSL2_ST_GET_SERVER_HELLO_A;
		if (!(s->client_version == SSL2_VERSION))
			s->s2->ssl2_rollback=1;

		/* setup the 5 bytes we have read so we get them from
+2 −1
Original line number Diff line number Diff line
@@ -495,7 +495,8 @@ int ssl23_get_client_hello(SSL *s)

		s->state=SSL2_ST_GET_CLIENT_HELLO_A;
		if ((s->options & SSL_OP_MSIE_SSLV2_RSA_PADDING) ||
			use_sslv2_strong)
			use_sslv2_strong ||
			(s->options & SSL_OP_NO_TLSv1 && s->options & SSL_OP_NO_SSLv3))
			s->s2->ssl2_rollback=0;
		else
			s->s2->ssl2_rollback=1;