From 1708d586dc2052ca24dff4e6b9c343e27aab1f73dd2ca4845f102c2040300416 Mon Sep 17 00:00:00 2001 From: Otto Hollmann Date: Tue, 6 Feb 2024 12:39:08 +0000 Subject: [PATCH] Accepting request 1144347 from home:ohollmann:branches:security:tls - Add migration script to move old files (bsc#1219562) /etc/ssl/engines.d/* -> /etc/ssl/engines1.1.d /etc/ssl/engdef.d/* -> /etc/ssl/engdef1.1.d - Security fix: [bsc#1219243, CVE-2024-0727] * Add NULL checks where ContentInfo data can be NULL * Add openssl-CVE-2024-0727.patch OBS-URL: https://build.opensuse.org/request/show/1144347 OBS-URL: https://build.opensuse.org/package/show/security:tls/openssl-3?expand=0&rev=91 --- openssl-3.changes | 14 ++++ openssl-3.spec | 17 ++++- openssl-CVE-2024-0727.patch | 120 ++++++++++++++++++++++++++++++ openssl-disable-fipsinstall.patch | 12 +-- 4 files changed, 156 insertions(+), 7 deletions(-) create mode 100644 openssl-CVE-2024-0727.patch diff --git a/openssl-3.changes b/openssl-3.changes index acffc33..c5069af 100644 --- a/openssl-3.changes +++ b/openssl-3.changes @@ -1,3 +1,17 @@ +------------------------------------------------------------------- +Mon Feb 5 16:29:26 UTC 2024 - Otto Hollmann + +- Add migration script to move old files (bsc#1219562) + /etc/ssl/engines.d/* -> /etc/ssl/engines1.1.d + /etc/ssl/engdef.d/* -> /etc/ssl/engdef1.1.d + +------------------------------------------------------------------- +Tue Jan 30 14:15:25 UTC 2024 - Otto Hollmann + +- Security fix: [bsc#1219243, CVE-2024-0727] + * Add NULL checks where ContentInfo data can be NULL + * Add openssl-CVE-2024-0727.patch + ------------------------------------------------------------------- Mon Jan 29 15:17:22 UTC 2024 - Pedro Monreal diff --git a/openssl-3.spec b/openssl-3.spec index 3345989..609a14c 100644 --- a/openssl-3.spec +++ b/openssl-3.spec @@ -79,8 +79,10 @@ Patch23: openssl-load-legacy-provider.patch Patch24: openssl-FIPS-embed-hmac.patch # PATCH-FIX-UPSTREAM: bsc#1218810 CVE-2023-6237: Excessive time spent checking invalid RSA public keys Patch25: openssl-CVE-2023-6237.patch -# PATCH-FIX-SUSE bsc#1194187, bsc#1207472, bsc#1218933 - Add engines section in openssl.cnf +# PATCH-FIX-SUSE bsc#1194187, bsc#1207472, bsc#1218933 - Add engines section in openssl.cnf Patch26: openssl-3-use-include-directive.patch +# PATCH-FIX-UPSTREAM: bsc#1219243 CVE-2024-0727: denial of service via null dereference +Patch27: openssl-CVE-2024-0727.patch BuildRequires: pkgconfig BuildRequires: pkgconfig(zlib) Requires: libopenssl3 = %{version}-%{release} @@ -314,6 +316,19 @@ if [ "$1" -gt 1 ] ; then fi fi +%pre +# Migrate old engines.d to engines1.1.d.rpmsave +if [ ! -L %{ssletcdir}/engines.d ] && [ -d %{ssletcdir}/engines.d ]; then + mkdir %{ssletcdir}/engines1.1.d.rpmsave ||: + mv %{ssletcdir}/engines.d %{ssletcdir}/engines1.1.d.rpmsave ||: +fi + +# Migrate old engdef.d to engdef1.1.d.rpmsave +if [ ! -L %{ssletcdir}/engdef.d ] && [ -d %{ssletcdir}/engdef.d ]; then + mkdir %{ssletcdir}/engdef1.1.d.rpmsave ||: + mv %{ssletcdir}/engdef.d %{ssletcdir}/engdef1.1.d.rpmsave ||: +fi + %post -n libopenssl3 -p /sbin/ldconfig %postun -n libopenssl3 -p /sbin/ldconfig diff --git a/openssl-CVE-2024-0727.patch b/openssl-CVE-2024-0727.patch new file mode 100644 index 0000000..6e1eb5b --- /dev/null +++ b/openssl-CVE-2024-0727.patch @@ -0,0 +1,120 @@ +From 09df4395b5071217b76dc7d3d2e630eb8c5a79c2 Mon Sep 17 00:00:00 2001 +From: Matt Caswell +Date: Fri, 19 Jan 2024 11:28:58 +0000 +Subject: [PATCH] Add NULL checks where ContentInfo data can be NULL + +PKCS12 structures contain PKCS7 ContentInfo fields. These fields are +optional and can be NULL even if the "type" is a valid value. OpenSSL +was not properly accounting for this and a NULL dereference can occur +causing a crash. + +CVE-2024-0727 + +Reviewed-by: Tomas Mraz +Reviewed-by: Hugo Landau +Reviewed-by: Neil Horman +(Merged from https://github.com/openssl/openssl/pull/23362) + +(cherry picked from commit d135eeab8a5dbf72b3da5240bab9ddb7678dbd2c) +--- + crypto/pkcs12/p12_add.c | 18 ++++++++++++++++++ + crypto/pkcs12/p12_mutl.c | 5 +++++ + crypto/pkcs12/p12_npas.c | 5 +++-- + crypto/pkcs7/pk7_mime.c | 7 +++++-- + 4 files changed, 31 insertions(+), 4 deletions(-) + +diff --git a/crypto/pkcs12/p12_add.c b/crypto/pkcs12/p12_add.c +index 6fd4184af5a52..80ce31b3bca66 100644 +--- a/crypto/pkcs12/p12_add.c ++++ b/crypto/pkcs12/p12_add.c +@@ -78,6 +78,12 @@ STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7data(PKCS7 *p7) + ERR_raise(ERR_LIB_PKCS12, PKCS12_R_CONTENT_TYPE_NOT_DATA); + return NULL; + } ++ ++ if (p7->d.data == NULL) { ++ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR); ++ return NULL; ++ } ++ + return ASN1_item_unpack(p7->d.data, ASN1_ITEM_rptr(PKCS12_SAFEBAGS)); + } + +@@ -150,6 +156,12 @@ STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, + { + if (!PKCS7_type_is_encrypted(p7)) + return NULL; ++ ++ if (p7->d.encrypted == NULL) { ++ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR); ++ return NULL; ++ } ++ + return PKCS12_item_decrypt_d2i_ex(p7->d.encrypted->enc_data->algorithm, + ASN1_ITEM_rptr(PKCS12_SAFEBAGS), + pass, passlen, +@@ -188,6 +200,12 @@ STACK_OF(PKCS7) *PKCS12_unpack_authsafes(const PKCS12 *p12) + ERR_raise(ERR_LIB_PKCS12, PKCS12_R_CONTENT_TYPE_NOT_DATA); + return NULL; + } ++ ++ if (p12->authsafes->d.data == NULL) { ++ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR); ++ return NULL; ++ } ++ + p7s = ASN1_item_unpack(p12->authsafes->d.data, + ASN1_ITEM_rptr(PKCS12_AUTHSAFES)); + if (p7s != NULL) { +diff --git a/crypto/pkcs12/p12_mutl.c b/crypto/pkcs12/p12_mutl.c +index 67a885a45f89e..68ff54d0e90ee 100644 +--- a/crypto/pkcs12/p12_mutl.c ++++ b/crypto/pkcs12/p12_mutl.c +@@ -98,6 +98,11 @@ static int pkcs12_gen_mac(PKCS12 *p12, const char *pass, int passlen, + return 0; + } + ++ if (p12->authsafes->d.data == NULL) { ++ ERR_raise(ERR_LIB_PKCS12, PKCS12_R_DECODE_ERROR); ++ return 0; ++ } ++ + salt = p12->mac->salt->data; + saltlen = p12->mac->salt->length; + if (p12->mac->iter == NULL) +diff --git a/crypto/pkcs12/p12_npas.c b/crypto/pkcs12/p12_npas.c +index 62230bc6187ff..1e5b5495991a4 100644 +--- a/crypto/pkcs12/p12_npas.c ++++ b/crypto/pkcs12/p12_npas.c +@@ -77,8 +77,9 @@ static int newpass_p12(PKCS12 *p12, const char *oldpass, const char *newpass) + bags = PKCS12_unpack_p7data(p7); + } else if (bagnid == NID_pkcs7_encrypted) { + bags = PKCS12_unpack_p7encdata(p7, oldpass, -1); +- if (!alg_get(p7->d.encrypted->enc_data->algorithm, +- &pbe_nid, &pbe_iter, &pbe_saltlen)) ++ if (p7->d.encrypted == NULL ++ || !alg_get(p7->d.encrypted->enc_data->algorithm, ++ &pbe_nid, &pbe_iter, &pbe_saltlen)) + goto err; + } else { + continue; +diff --git a/crypto/pkcs7/pk7_mime.c b/crypto/pkcs7/pk7_mime.c +index 49a0da5f819c4..8228315eeaa3a 100644 +--- a/crypto/pkcs7/pk7_mime.c ++++ b/crypto/pkcs7/pk7_mime.c +@@ -33,10 +33,13 @@ int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags) + int ctype_nid = OBJ_obj2nid(p7->type); + const PKCS7_CTX *ctx = ossl_pkcs7_get0_ctx(p7); + +- if (ctype_nid == NID_pkcs7_signed) ++ if (ctype_nid == NID_pkcs7_signed) { ++ if (p7->d.sign == NULL) ++ return 0; + mdalgs = p7->d.sign->md_algs; +- else ++ } else { + mdalgs = NULL; ++ } + + flags ^= SMIME_OLDMIME; + diff --git a/openssl-disable-fipsinstall.patch b/openssl-disable-fipsinstall.patch index 6346150..b5f0593 100644 --- a/openssl-disable-fipsinstall.patch +++ b/openssl-disable-fipsinstall.patch @@ -25,7 +25,7 @@ Index: openssl-3.1.4/apps/fipsinstall.c EVP_MAC *mac = NULL; CONF *conf = NULL; -+ BIO_printf(bio_err, "This command is not enabled in the Red Hat Enterprise Linux OpenSSL build, please consult Red Hat documentation to learn how to enable FIPS mode\n"); ++ BIO_printf(bio_err, "This command is not enabled in SUSE/openSUSE OpenSSL build, please see 'man 8 fips-mode-setup' to learn how to enable FIPS mode\n"); + return 1; + if ((opts = sk_OPENSSL_STRING_new_null()) == NULL) @@ -309,8 +309,8 @@ Index: openssl-3.1.4/doc/man1/openssl-fipsinstall.pod.in -L, -L +This command is disabled. -+Please consult Red Hat Enterprise Linux documentation to learn how to correctly -+enable FIPS mode on Red Hat Enterprise ++Please consult the SUSE/openSUSE documentation to learn how to correctly ++enable FIPS mode. =head1 COPYRIGHT @@ -449,10 +449,10 @@ Index: openssl-3.1.4/doc/man5/fips_config.pod - -L -L -+This command is disabled in Red Hat Enterprise Linux. The FIPS provider is ++This command is disabled in SUSE/openSUSE. The FIPS provider is +automatically loaded when the system is booted in FIPS mode, or when the -+environment variable B is set. See the documentation -+for more information. ++environment variable B is set. ++See the documentation for more information. =head1 HISTORY