From 9f5c89ab4bfc1f530d0d285f367c0c80f8cdf401 Mon Sep 17 00:00:00 2001 From: Kareem Date: Mon, 13 Jan 2025 16:22:28 -0700 Subject: [PATCH] Properly check for signature_algorithms from the client in a TLS 1.3 server. The server was checking ssl->extensions which will always have an entry for TLSX_SIGNATURE_ALGORITHMS as it is unconditionally added by TLSX_PopulateExtensions earlier in the DoTls13ClientHello function. Instead, check args->clSuites->hashSigAlgoSz which is only set if signature_algorithms is found and parsed by TLSX_Parse. --- src/tls13.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tls13.c b/src/tls13.c index 94ae70b6c1..ec9bc83e31 100644 --- a/src/tls13.c +++ b/src/tls13.c @@ -7053,7 +7053,9 @@ int DoTls13ClientHello(WOLFSSL* ssl, const byte* input, word32* inOutIdx, WOLFSSL_MSG("Client did not send a KeyShare extension"); ERROR_OUT(INCOMPLETE_DATA, exit_dch); } - if (TLSX_Find(ssl->extensions, TLSX_SIGNATURE_ALGORITHMS) == NULL) { + /* Can't check ssl->extensions here as SigAlgs are unconditionally + set by TLSX_PopulateExtensions */ + if (args->clSuites->hashSigAlgoSz == 0) { WOLFSSL_MSG("Client did not send a SignatureAlgorithms extension"); ERROR_OUT(INCOMPLETE_DATA, exit_dch); }