Don't send a status_request extension in a CertificateRequest message
authorMatt Caswell <matt@openssl.org>
Thu, 5 Sep 2019 15:43:57 +0000 (16:43 +0100)
committerMatt Caswell <matt@openssl.org>
Fri, 6 Sep 2019 09:07:11 +0000 (10:07 +0100)
If a TLSv1.3 server configured to respond to the status_request extension
also attempted to send a CertificateRequest then it was incorrectly
inserting a non zero length status_request extension into that message.

The TLSv1.3 RFC does allow that extension in that message but it must
always be zero length.

In fact we should not be sending the extension at all in that message
because we don't support it.

Fixes #9767

Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
(Merged from https://github.com/openssl/openssl/pull/9780)

ssl/statem/extensions_srvr.c

index e16722cbeb8d6764620b17542986a1def79f1164..1c023fc6c40c5aae3f00e62458d7112bc0ff801e 100644 (file)
@@ -1491,6 +1491,10 @@ EXT_RETURN tls_construct_stoc_status_request(SSL *s, WPACKET *pkt,
                                              unsigned int context, X509 *x,
                                              size_t chainidx)
 {
+    /* We don't currently support this extension inside a CertificateRequest */
+    if (context == SSL_EXT_TLS1_3_CERTIFICATE_REQUEST)
+        return EXT_RETURN_NOT_SENT;
+
     if (!s->ext.status_expected)
         return EXT_RETURN_NOT_SENT;