From a8314df9023e4e1d92c04e09e2afb02c98ed5e2b Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Thu, 16 Feb 2012 15:25:39 +0000 Subject: [PATCH] Fix bug in CVE-2011-4619: check we have really received a client hello before rejecting multiple SGC restarts. --- CHANGES | 7 +++++++ ssl/s3_srvr.c | 15 +++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/CHANGES b/CHANGES index 43961e0aa1..1c44009afd 100644 --- a/CHANGES +++ b/CHANGES @@ -285,6 +285,13 @@ Add command line options to s_client/s_server. [Steve Henson] + Changes between 1.0.0g and 1.0.0h [xx XXX xxxx] + + *) Fix CVE-2011-4619: make sure we really are receiving a + client hello before rejecting multiple SGC restarts. Thanks to + Ivan Nestlerode for discovering this bug. + [Steve Henson] + Changes between 1.0.0f and 1.0.0g [18 Jan 2012] *) Fix for DTLS DoS issue introduced by fix for CVE-2011-4109. diff --git a/ssl/s3_srvr.c b/ssl/s3_srvr.c index a60e4d699c..5944d8c484 100644 --- a/ssl/s3_srvr.c +++ b/ssl/s3_srvr.c @@ -870,14 +870,6 @@ int ssl3_check_client_hello(SSL *s) int ok; long n; - /* We only allow the client to restart the handshake once per - * negotiation. */ - if (s->s3->flags & SSL3_FLAGS_SGC_RESTART_DONE) - { - SSLerr(SSL_F_SSL3_CHECK_CLIENT_HELLO, SSL_R_MULTIPLE_SGC_RESTARTS); - return -1; - } - /* this function is called when we really expect a Certificate message, * so permit appropriate message length */ n=s->method->ssl_get_message(s, @@ -890,6 +882,13 @@ int ssl3_check_client_hello(SSL *s) s->s3->tmp.reuse_message = 1; if (s->s3->tmp.message_type == SSL3_MT_CLIENT_HELLO) { + /* We only allow the client to restart the handshake once per + * negotiation. */ + if (s->s3->flags & SSL3_FLAGS_SGC_RESTART_DONE) + { + SSLerr(SSL_F_SSL3_CHECK_CLIENT_HELLO, SSL_R_MULTIPLE_SGC_RESTARTS); + return -1; + } /* Throw away what we have done so far in the current handshake, * which will now be aborted. (A full SSL_clear would be too much.) */ #ifndef OPENSSL_NO_DH -- 2.25.1