diff options
| author | tb <> | 2022-06-29 07:53:58 +0000 |
|---|---|---|
| committer | tb <> | 2022-06-29 07:53:58 +0000 |
| commit | 4971137ca5f4d3de0801bec3fdc944bc625b0211 (patch) | |
| tree | 594c4dd3136308d7d86b9e285e5fb25707f9d3f1 /src | |
| parent | 5a8ebcd55cb4d2f98af3f413f2ae8601241f0891 (diff) | |
| download | openbsd-4971137ca5f4d3de0801bec3fdc944bc625b0211.tar.gz openbsd-4971137ca5f4d3de0801bec3fdc944bc625b0211.tar.bz2 openbsd-4971137ca5f4d3de0801bec3fdc944bc625b0211.zip | |
Check the security level when building sigalgs
ok beck jsing
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libssl/ssl_sigalgs.c | 15 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_sigalgs.h | 4 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_srvr.c | 6 | ||||
| -rw-r--r-- | src/lib/libssl/ssl_tlsext.c | 7 |
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 | ||
| 243 | int | 243 | int |
| 244 | ssl_sigalgs_build(uint16_t tls_version, CBB *cbb) | 244 | ssl_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 | ||
| 265 | static const struct ssl_sigalg * | 272 | static 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 | ||
| 72 | int ssl_sigalgs_build(uint16_t tls_version, CBB *cbb); | 72 | int ssl_sigalgs_build(uint16_t tls_version, CBB *cbb, int security_level); |
| 73 | const struct ssl_sigalg *ssl_sigalg_select(SSL *s, EVP_PKEY *pkey); | 73 | const struct ssl_sigalg *ssl_sigalg_select(SSL *s, EVP_PKEY *pkey); |
| 74 | const struct ssl_sigalg *ssl_sigalg_for_peer(SSL *s, EVP_PKEY *pkey, | 74 | const 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; |
