]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
More correctly handle a selected_len of 0 when processing NPN
authorMatt Caswell <matt@openssl.org>
Fri, 31 May 2024 10:18:27 +0000 (11:18 +0100)
committerMatt Caswell <matt@openssl.org>
Thu, 27 Jun 2024 09:37:54 +0000 (10:37 +0100)
In the case where the NPN callback returns with SSL_TLEXT_ERR_OK, but
the selected_len is 0 we should fail. Previously this would fail with an
internal_error alert because calling OPENSSL_malloc(selected_len) will
return NULL when selected_len is 0. We make this error detection more
explicit and return a handshake failure alert.

Follow on from CVE-2024-5535

Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/24718)

ssl/statem/extensions_clnt.c

index 842be0722bd0348cf4a985caa10f279601f682f6..a07dc62e9a87b4fa603c1a4a6cbec93f335f90b4 100644 (file)
@@ -1536,7 +1536,8 @@ int tls_parse_stoc_npn(SSL *s, PACKET *pkt, unsigned int context, X509 *x,
                                   PACKET_data(pkt),
                                   PACKET_remaining(pkt),
                                   s->ctx->ext.npn_select_cb_arg) !=
-             SSL_TLSEXT_ERR_OK) {
+                                  SSL_TLSEXT_ERR_OK
+            || selected_len == 0) {
         SSLfatal(s, SSL_AD_HANDSHAKE_FAILURE, SSL_R_BAD_EXTENSION);
         return 0;
     }