From 5a7fae71cbb57e44ec01f92ecbb221a43e91885d Mon Sep 17 00:00:00 2001 From: Abel Thomas Date: Tue, 7 Jul 2026 13:39:31 +0200 Subject: [PATCH] ssl_tls13_server: validate supported_versions extension length MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reject versions_len outside [2,254] or not a multiple of 2, per RFC 8446 §4.2.1 (versions<2..254>) and §3.4 (vector length must be a multiple of element size). Prevents malformed/truncated version lists from being parsed as if well-formed. Fixes #10739 Signed-off-by: Abel Thomas --- library/ssl_tls13_server.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/library/ssl_tls13_server.c b/library/ssl_tls13_server.c index dc7c776830..7fb0852515 100644 --- a/library/ssl_tls13_server.c +++ b/library/ssl_tls13_server.c @@ -782,6 +782,12 @@ static int ssl_tls13_parse_supported_versions_ext(mbedtls_ssl_context *ssl, MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, 1); versions_len = p[0]; + + /* RFC 8446, Section 4.2.1 (versions<2..254>) and Section 3.4 + * (vector length must be a multiple of the element size). */ + if ( (versions_len < 2) || (versions_len > 254) || (versions_len % 2 != 0)) + return MBEDTLS_ERR_SSL_DECODE_ERROR; + p += 1; MBEDTLS_SSL_CHK_BUF_READ_PTR(p, end, versions_len);