Skip to content

Commit

Permalink
Fix supported_groups handing in TLSv1.2
Browse files Browse the repository at this point in the history
In TLSv1.2 we should not attempt to use a supported_group value that is
intended for use with TLSv1.3 - even if both the server and the client
support it, e.g. the ffdhe groups are supported by OpenSSL for TLSv1.3 but
not for TLSv1.2.

Fixes #21081

Reviewed-by: Viktor Dukhovni <viktor@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from #21274)
  • Loading branch information
mattcaswell committed Jun 27, 2023
1 parent 810f7dc commit e609a45
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions ssl/t1_lib.c
Expand Up @@ -923,6 +923,7 @@ uint16_t tls1_shared_group(SSL_CONNECTION *s, int nmatch)
const uint16_t *pref, *supp;
size_t num_pref, num_supp, i;
int k;
SSL_CTX *ctx = SSL_CONNECTION_GET_CTX(s);

/* Can't do anything on client side */
if (s->server == 0)
Expand Down Expand Up @@ -959,10 +960,29 @@ uint16_t tls1_shared_group(SSL_CONNECTION *s, int nmatch)

for (k = 0, i = 0; i < num_pref; i++) {
uint16_t id = pref[i];
const TLS_GROUP_INFO *inf;

if (!tls1_in_list(id, supp, num_supp)
|| !tls_group_allowed(s, id, SSL_SECOP_CURVE_SHARED))
continue;
inf = tls1_group_id_lookup(ctx, id);
if (!ossl_assert(inf != NULL))
return 0;
if (SSL_CONNECTION_IS_DTLS(s)) {
if (inf->maxdtls == -1)
continue;
if ((inf->mindtls != 0 && DTLS_VERSION_LT(s->version, inf->mindtls))
|| (inf->maxdtls != 0
&& DTLS_VERSION_GT(s->version, inf->maxdtls)))
continue;
} else {
if (inf->maxtls == -1)
continue;
if ((inf->mintls != 0 && s->version < inf->mintls)
|| (inf->maxtls != 0 && s->version > inf->maxtls))
continue;
}

if (nmatch == k)
return id;
k++;
Expand Down

0 comments on commit e609a45

Please sign in to comment.