summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2022-06-29 07:53:58 +0000
committertb <>2022-06-29 07:53:58 +0000
commit4971137ca5f4d3de0801bec3fdc944bc625b0211 (patch)
tree594c4dd3136308d7d86b9e285e5fb25707f9d3f1
parent5a8ebcd55cb4d2f98af3f413f2ae8601241f0891 (diff)
downloadopenbsd-4971137ca5f4d3de0801bec3fdc944bc625b0211.tar.gz
openbsd-4971137ca5f4d3de0801bec3fdc944bc625b0211.tar.bz2
openbsd-4971137ca5f4d3de0801bec3fdc944bc625b0211.zip
Check the security level when building sigalgs
ok beck jsing
-rw-r--r--src/lib/libssl/ssl_sigalgs.c15
-rw-r--r--src/lib/libssl/ssl_sigalgs.h4
-rw-r--r--src/lib/libssl/ssl_srvr.c6
-rw-r--r--src/lib/libssl/ssl_tlsext.c7
4 files changed, 20 insertions, 12 deletions
diff --git a/src/lib/libssl/ssl_sigalgs.c b/src/lib/libssl/ssl_sigalgs.c
index 79239ef597..8a1b5f5198 100644
--- a/src/lib/libssl/ssl_sigalgs.c
+++ b/src/lib/libssl/ssl_sigalgs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_sigalgs.c,v 1.42 2022/06/29 07:53:00 tb Exp $ */ 1/* $OpenBSD: ssl_sigalgs.c,v 1.43 2022/06/29 07:53:58 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018-2020 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018-2020 Bob Beck <beck@openbsd.org>
4 * Copyright (c) 2021 Joel Sing <jsing@openbsd.org> 4 * Copyright (c) 2021 Joel Sing <jsing@openbsd.org>
@@ -241,11 +241,13 @@ ssl_sigalg_from_value(SSL *s, uint16_t value)
241} 241}
242 242
243int 243int
244ssl_sigalgs_build(uint16_t tls_version, CBB *cbb) 244ssl_sigalgs_build(uint16_t tls_version, CBB *cbb, int security_level)
245{ 245{
246 const struct ssl_sigalg *sigalg;
246 const uint16_t *values; 247 const uint16_t *values;
247 size_t len; 248 size_t len;
248 size_t i; 249 size_t i;
250 int ret = 0;
249 251
250 ssl_sigalgs_for_version(tls_version, &values, &len); 252 ssl_sigalgs_for_version(tls_version, &values, &len);
251 253
@@ -254,12 +256,17 @@ ssl_sigalgs_build(uint16_t tls_version, CBB *cbb)
254 /* Do not allow the legacy value for < 1.2 to be used. */ 256 /* Do not allow the legacy value for < 1.2 to be used. */
255 if (values[i] == SIGALG_RSA_PKCS1_MD5_SHA1) 257 if (values[i] == SIGALG_RSA_PKCS1_MD5_SHA1)
256 return 0; 258 return 0;
257 if (ssl_sigalg_lookup(values[i]) == NULL) 259 if ((sigalg = ssl_sigalg_lookup(values[i])) == NULL)
258 return 0; 260 return 0;
261 if (sigalg->security_level < security_level)
262 continue;
263
259 if (!CBB_add_u16(cbb, values[i])) 264 if (!CBB_add_u16(cbb, values[i]))
260 return 0; 265 return 0;
266
267 ret = 1;
261 } 268 }
262 return 1; 269 return ret;
263} 270}
264 271
265static const struct ssl_sigalg * 272static const struct ssl_sigalg *
diff --git a/src/lib/libssl/ssl_sigalgs.h b/src/lib/libssl/ssl_sigalgs.h
index 9f4a3a3c33..5be2122906 100644
--- a/src/lib/libssl/ssl_sigalgs.h
+++ b/src/lib/libssl/ssl_sigalgs.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_sigalgs.h,v 1.24 2022/06/29 07:53:00 tb Exp $ */ 1/* $OpenBSD: ssl_sigalgs.h,v 1.25 2022/06/29 07:53:58 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2018-2019 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2018-2019 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -69,7 +69,7 @@ struct ssl_sigalg {
69 int flags; 69 int flags;
70}; 70};
71 71
72int ssl_sigalgs_build(uint16_t tls_version, CBB *cbb); 72int ssl_sigalgs_build(uint16_t tls_version, CBB *cbb, int security_level);
73const struct ssl_sigalg *ssl_sigalg_select(SSL *s, EVP_PKEY *pkey); 73const struct ssl_sigalg *ssl_sigalg_select(SSL *s, EVP_PKEY *pkey);
74const struct ssl_sigalg *ssl_sigalg_for_peer(SSL *s, EVP_PKEY *pkey, 74const struct ssl_sigalg *ssl_sigalg_for_peer(SSL *s, EVP_PKEY *pkey,
75 uint16_t sigalg_value); 75 uint16_t sigalg_value);
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c
index 20660cbf27..97077a3380 100644
--- a/src/lib/libssl/ssl_srvr.c
+++ b/src/lib/libssl/ssl_srvr.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_srvr.c,v 1.143 2022/06/28 14:51:37 tb Exp $ */ 1/* $OpenBSD: ssl_srvr.c,v 1.144 2022/06/29 07:53:58 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -1567,8 +1567,8 @@ ssl3_send_certificate_request(SSL *s)
1567 if (!CBB_add_u16_length_prefixed(&cert_request, 1567 if (!CBB_add_u16_length_prefixed(&cert_request,
1568 &sigalgs)) 1568 &sigalgs))
1569 goto err; 1569 goto err;
1570 if (!ssl_sigalgs_build( 1570 if (!ssl_sigalgs_build(s->s3->hs.negotiated_tls_version,
1571 s->s3->hs.negotiated_tls_version, &sigalgs)) 1571 &sigalgs, SSL_get_security_level(s)))
1572 goto err; 1572 goto err;
1573 } 1573 }
1574 1574
diff --git a/src/lib/libssl/ssl_tlsext.c b/src/lib/libssl/ssl_tlsext.c
index 53d40157e9..8faf90fde0 100644
--- a/src/lib/libssl/ssl_tlsext.c
+++ b/src/lib/libssl/ssl_tlsext.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssl_tlsext.c,v 1.113 2022/06/04 07:55:44 tb Exp $ */ 1/* $OpenBSD: ssl_tlsext.c,v 1.114 2022/06/29 07:53:58 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2016, 2017, 2019 Joel Sing <jsing@openbsd.org>
4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org> 4 * Copyright (c) 2017 Doug Hogan <doug@openbsd.org>
@@ -587,7 +587,7 @@ tlsext_sigalgs_client_build(SSL *s, uint16_t msg_type, CBB *cbb)
587 587
588 if (!CBB_add_u16_length_prefixed(cbb, &sigalgs)) 588 if (!CBB_add_u16_length_prefixed(cbb, &sigalgs))
589 return 0; 589 return 0;
590 if (!ssl_sigalgs_build(tls_version, &sigalgs)) 590 if (!ssl_sigalgs_build(tls_version, &sigalgs, SSL_get_security_level(s)))
591 return 0; 591 return 0;
592 if (!CBB_flush(cbb)) 592 if (!CBB_flush(cbb))
593 return 0; 593 return 0;
@@ -623,7 +623,8 @@ tlsext_sigalgs_server_build(SSL *s, uint16_t msg_type, CBB *cbb)
623 623
624 if (!CBB_add_u16_length_prefixed(cbb, &sigalgs)) 624 if (!CBB_add_u16_length_prefixed(cbb, &sigalgs))
625 return 0; 625 return 0;
626 if (!ssl_sigalgs_build(s->s3->hs.negotiated_tls_version, &sigalgs)) 626 if (!ssl_sigalgs_build(s->s3->hs.negotiated_tls_version, &sigalgs,
627 SSL_get_security_level(s)))
627 return 0; 628 return 0;
628 if (!CBB_flush(cbb)) 629 if (!CBB_flush(cbb))
629 return 0; 630 return 0;