From 6e0d3b16e6d86b43b7921a01ab67842eedebd3ff Mon Sep 17 00:00:00 2001 From: Dmitry Belyavskiy Date: Wed, 18 Oct 2023 11:20:31 +0200 Subject: [PATCH] Excessive time spent checking DH q parameter value Resolves: RHEL-5308 --- 0127-CVE-2023-3817.patch | 57 ++++++++++++++++++++++++++++++++++++++++ openssl.spec | 3 +++ 2 files changed, 60 insertions(+) create mode 100644 0127-CVE-2023-3817.patch diff --git a/0127-CVE-2023-3817.patch b/0127-CVE-2023-3817.patch new file mode 100644 index 0000000..5fc72e7 --- /dev/null +++ b/0127-CVE-2023-3817.patch @@ -0,0 +1,57 @@ +diff --git a/crypto/dh/dh_check.c b/crypto/dh/dh_check.c +index aef6f9b1b7..fbe2797569 100644 +--- a/crypto/dh/dh_check.c ++++ b/crypto/dh/dh_check.c +@@ -143,7 +143,7 @@ int DH_check(const DH *dh, int *ret) + #ifdef FIPS_MODULE + return DH_check_params(dh, ret); + #else +- int ok = 0, r; ++ int ok = 0, r, q_good = 0; + BN_CTX *ctx = NULL; + BIGNUM *t1 = NULL, *t2 = NULL; + int nid = DH_get_nid((DH *)dh); +@@ -172,6 +172,13 @@ int DH_check(const DH *dh, int *ret) + goto err; + + if (dh->params.q != NULL) { ++ if (BN_ucmp(dh->params.p, dh->params.q) > 0) ++ q_good = 1; ++ else ++ *ret |= DH_CHECK_INVALID_Q_VALUE; ++ } ++ ++ if (q_good) { + if (BN_cmp(dh->params.g, BN_value_one()) <= 0) + *ret |= DH_NOT_SUITABLE_GENERATOR; + else if (BN_cmp(dh->params.g, dh->params.p) >= 0) +diff --git a/test/dhtest.c b/test/dhtest.c +index f8dd8f3aa7..d02b3b7c58 100644 +--- a/test/dhtest.c ++++ b/test/dhtest.c +@@ -124,6 +124,15 @@ static int dh_test(void) + /* We'll have a stale error on the queue from the above test so clear it */ + ERR_clear_error(); + ++ if (!TEST_ptr(BN_copy(q, p)) || !TEST_true(BN_add(q, q, BN_value_one()))) ++ goto err3; ++ ++ if (!TEST_true(DH_check(dh, &i))) ++ goto err3; ++ if (!TEST_true(i & DH_CHECK_INVALID_Q_VALUE) ++ || !TEST_false(i & DH_CHECK_Q_NOT_PRIME)) ++ goto err3; ++ + /* Modulus of size: dh check max modulus bits + 1 */ + if (!TEST_true(BN_set_word(p, 1)) + || !TEST_true(BN_lshift(p, p, OPENSSL_DH_CHECK_MAX_MODULUS_BITS))) +@@ -135,6 +144,9 @@ static int dh_test(void) + if (!TEST_false(DH_check(dh, &i))) + goto err3; + ++ /* We'll have a stale error on the queue from the above test so clear it */ ++ ERR_clear_error(); ++ + /* + * II) key generation + */ diff --git a/openssl.spec b/openssl.spec index ab0c637..a59230a 100644 --- a/openssl.spec +++ b/openssl.spec @@ -199,6 +199,7 @@ Patch122: 0122-CVE-2023-2650.patch Patch123: 0123-ibmca-atexit-crash.patch Patch125: 0125-CVE-2023-2975.patch Patch126: 0126-CVE-2023-3446.patch +Patch127: 0127-CVE-2023-3817.patch License: ASL 2.0 URL: http://www.openssl.org/ @@ -540,6 +541,8 @@ ln -s /etc/crypto-policies/back-ends/openssl_fips.config $RPM_BUILD_ROOT%{_sysco Resolves: RHEL-5302 - Excessive time spent checking DH keys and parameters (CVE-2023-3446) Resolves: RHEL-5306 +- Excessive time spent checking DH q parameter value (CVE-2023-3817) + Resolves: RHEL-5308 * Wed Jul 12 2023 Dmitry Belyavskiy - 1:3.0.7-24 - Make FIPS module configuration more crypto-policies friendly