tls_process_server_hello: Disallow repeated HRR
authorTomas Mraz <tomas@openssl.org>
Tue, 22 Mar 2022 11:34:07 +0000 (12:34 +0100)
committerTomas Mraz <tomas@openssl.org>
Wed, 30 Mar 2022 09:35:33 +0000 (11:35 +0200)
Repeated HRR must be rejected.

Fixes #17934

Reviewed-by: Todd Short <todd.short@me.com>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17936)

(cherry picked from commit d204a50b898435fbf937316d5693008cebf62eef)

ssl/statem/statem_clnt.c

index 0dc8ee5ad70cc227cd83b2699a61f180ce35a5a4..2f68b15d92befbf976423fd293813e38d59d883a 100644 (file)
@@ -1395,6 +1395,10 @@ MSG_PROCESS_RETURN tls_process_server_hello(SSL *s, PACKET *pkt)
             && sversion == TLS1_2_VERSION
             && PACKET_remaining(pkt) >= SSL3_RANDOM_SIZE
             && memcmp(hrrrandom, PACKET_data(pkt), SSL3_RANDOM_SIZE) == 0) {
+        if (s->hello_retry_request != SSL_HRR_NONE) {
+            SSLfatal(s, SSL_AD_UNEXPECTED_MESSAGE, SSL_R_UNEXPECTED_MESSAGE);
+            goto err;
+        }
         s->hello_retry_request = SSL_HRR_PENDING;
         hrr = 1;
         if (!PACKET_forward(pkt, SSL3_RANDOM_SIZE)) {