Document rollback issues.
authorBodo Möller <bodo@openssl.org>
Sat, 29 Jul 2000 19:27:20 +0000 (19:27 +0000)
committerBodo Möller <bodo@openssl.org>
Sat, 29 Jul 2000 19:27:20 +0000 (19:27 +0000)
CHANGES
ssl/s23_clnt.c
ssl/s23_srvr.c

diff --git a/CHANGES b/CHANGES
index 159c1e27e756f908b48a4df0ecfcbb125e04ab66..74f5bc7d008207428f867844100b64bd83834f32 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,9 +4,11 @@
 
  Changes between 0.9.5a and 0.9.6  [xx XXX 2000]
 
 
  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().
+  *) Fix SSL 2.0 rollback checking: Due to an off-by-one error in
+     RSA_padding_check_SSLv23(), special padding was never detected
+     and thus the SSL 3.0/TLS 1.0 countermeasure against protocol
+     version rollback attacks was not effective.
+
      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
      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
index 99a4358255bc92fcbe67eace3dac2217b1a5ef3d..5050a13ef20602de57b5228f27ca09504eb619ec 100644 (file)
@@ -367,6 +367,7 @@ static int ssl23_get_server_hello(SSL *s)
 
                s->state=SSL2_ST_GET_SERVER_HELLO_A;
                if (!(s->client_version == SSL2_VERSION))
 
                s->state=SSL2_ST_GET_SERVER_HELLO_A;
                if (!(s->client_version == SSL2_VERSION))
+                       /* use special padding (SSL 3.0 draft/RFC 2246, App. E.2) */
                        s->s2->ssl2_rollback=1;
 
                /* setup the 5 bytes we have read so we get them from
                        s->s2->ssl2_rollback=1;
 
                /* setup the 5 bytes we have read so we get them from
index cbf2f5d836f189be840273af9d7e2aaaa6ef8d6a..a81544a1b62a99a15f54cfa2960ca97d3bb6580a 100644 (file)
@@ -499,6 +499,8 @@ int ssl23_get_client_hello(SSL *s)
                        (s->options & SSL_OP_NO_TLSv1 && s->options & SSL_OP_NO_SSLv3))
                        s->s2->ssl2_rollback=0;
                else
                        (s->options & SSL_OP_NO_TLSv1 && s->options & SSL_OP_NO_SSLv3))
                        s->s2->ssl2_rollback=0;
                else
+                       /* reject SSL 2.0 session if client supports SSL 3.0 or TLS 1.0
+                        * (SSL 3.0 draft/RFC 2246, App. E.2) */
                        s->s2->ssl2_rollback=1;
 
                /* setup the n bytes we have read so we get them from
                        s->s2->ssl2_rollback=1;
 
                /* setup the n bytes we have read so we get them from