From 4adb0ea4de51454c6310dd6b358c3e2754c91871469da577398ccade6ae7d050 Mon Sep 17 00:00:00 2001 From: Clemens Famulla-Conrad Date: Tue, 6 Apr 2021 15:47:56 +0000 Subject: [PATCH] Accepting request 883361 from home:cfconrad:branches:hardware - Add CVE-2021-30004.patch -- forging attacks may occur because AlgorithmIdentifier parameters are mishandled in tls/pkcs1.c and tls/x509v3.c (bsc#1184348) OBS-URL: https://build.opensuse.org/request/show/883361 OBS-URL: https://build.opensuse.org/package/show/hardware/wpa_supplicant?expand=0&rev=127 --- CVE-2021-30004.patch | 115 +++++++++++++++++++++++++++++++++++++++++ wpa_supplicant.changes | 11 +++- wpa_supplicant.spec | 1 + 3 files changed, 125 insertions(+), 2 deletions(-) create mode 100644 CVE-2021-30004.patch diff --git a/CVE-2021-30004.patch b/CVE-2021-30004.patch new file mode 100644 index 0000000..e00c010 --- /dev/null +++ b/CVE-2021-30004.patch @@ -0,0 +1,115 @@ +From a0541334a6394f8237a4393b7372693cd7e96f15 Mon Sep 17 00:00:00 2001 +From: Jouni Malinen +Date: Sat, 13 Mar 2021 18:19:31 +0200 +Subject: ASN.1: Validate DigestAlgorithmIdentifier parameters + +The supported hash algorithms do not use AlgorithmIdentifier parameters. +However, there are implementations that include NULL parameters in +addition to ones that omit the parameters. Previous implementation did +not check the parameters value at all which supported both these cases, +but did not reject any other unexpected information. + +Use strict validation of digest algorithm parameters and reject any +unexpected value when validating a signature. This is needed to prevent +potential forging attacks. + +Signed-off-by: Jouni Malinen +--- + src/tls/pkcs1.c | 21 +++++++++++++++++++++ + src/tls/x509v3.c | 20 ++++++++++++++++++++ + 2 files changed, 41 insertions(+) + +diff --git a/src/tls/pkcs1.c b/src/tls/pkcs1.c +index bbdb0d7..5761dfe 100644 +--- a/src/tls/pkcs1.c ++++ b/src/tls/pkcs1.c +@@ -244,6 +244,8 @@ int pkcs1_v15_sig_ver(struct crypto_public_key *pk, + os_free(decrypted); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "PKCS #1: DigestInfo", ++ hdr.payload, hdr.length); + + pos = hdr.payload; + end = pos + hdr.length; +@@ -265,6 +267,8 @@ int pkcs1_v15_sig_ver(struct crypto_public_key *pk, + os_free(decrypted); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "PKCS #1: DigestAlgorithmIdentifier", ++ hdr.payload, hdr.length); + da_end = hdr.payload + hdr.length; + + if (asn1_get_oid(hdr.payload, hdr.length, &oid, &next)) { +@@ -273,6 +277,23 @@ int pkcs1_v15_sig_ver(struct crypto_public_key *pk, + os_free(decrypted); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "PKCS #1: Digest algorithm parameters", ++ next, da_end - next); ++ ++ /* ++ * RFC 5754: The correct encoding for the SHA2 algorithms would be to ++ * omit the parameters, but there are implementation that encode these ++ * as a NULL element. Allow these two cases and reject anything else. ++ */ ++ if (da_end > next && ++ (asn1_get_next(next, da_end - next, &hdr) < 0 || ++ !asn1_is_null(&hdr) || ++ hdr.payload + hdr.length != da_end)) { ++ wpa_printf(MSG_DEBUG, ++ "PKCS #1: Unexpected digest algorithm parameters"); ++ os_free(decrypted); ++ return -1; ++ } + + if (!asn1_oid_equal(&oid, hash_alg)) { + char txt[100], txt2[100]; +diff --git a/src/tls/x509v3.c b/src/tls/x509v3.c +index a8944dd..df337ec 100644 +--- a/src/tls/x509v3.c ++++ b/src/tls/x509v3.c +@@ -1964,6 +1964,7 @@ int x509_check_signature(struct x509_certificate *issuer, + os_free(data); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "X509: DigestInfo", hdr.payload, hdr.length); + + pos = hdr.payload; + end = pos + hdr.length; +@@ -1985,6 +1986,8 @@ int x509_check_signature(struct x509_certificate *issuer, + os_free(data); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "X509: DigestAlgorithmIdentifier", ++ hdr.payload, hdr.length); + da_end = hdr.payload + hdr.length; + + if (asn1_get_oid(hdr.payload, hdr.length, &oid, &next)) { +@@ -1992,6 +1995,23 @@ int x509_check_signature(struct x509_certificate *issuer, + os_free(data); + return -1; + } ++ wpa_hexdump(MSG_MSGDUMP, "X509: Digest algorithm parameters", ++ next, da_end - next); ++ ++ /* ++ * RFC 5754: The correct encoding for the SHA2 algorithms would be to ++ * omit the parameters, but there are implementation that encode these ++ * as a NULL element. Allow these two cases and reject anything else. ++ */ ++ if (da_end > next && ++ (asn1_get_next(next, da_end - next, &hdr) < 0 || ++ !asn1_is_null(&hdr) || ++ hdr.payload + hdr.length != da_end)) { ++ wpa_printf(MSG_DEBUG, ++ "X509: Unexpected digest algorithm parameters"); ++ os_free(data); ++ return -1; ++ } + + if (x509_sha1_oid(&oid)) { + if (signature->oid.oid[6] != 5 /* sha-1WithRSAEncryption */) { +-- +cgit v0.12 + diff --git a/wpa_supplicant.changes b/wpa_supplicant.changes index 15b6916..4b1a376 100644 --- a/wpa_supplicant.changes +++ b/wpa_supplicant.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Tue Apr 6 14:51:18 UTC 2021 - Clemens Famulla-Conrad + +- Add CVE-2021-30004.patch -- forging attacks may occur because + AlgorithmIdentifier parameters are mishandled in tls/pkcs1.c and tls/x509v3.c + (bsc#1184348) + ------------------------------------------------------------------- Wed Mar 3 15:31:02 UTC 2021 - Clemens Famulla-Conrad @@ -13,8 +20,8 @@ Sat Feb 27 23:14:13 UTC 2021 - Clemens Famulla-Conrad ------------------------------------------------------------------- Thu Feb 4 12:27:02 UTC 2021 - Clemens Famulla-Conrad -- Add CVE-2021-0326.patch -- P2P group information processing vulnerability - (bsc#1181777) +- Add CVE-2021-0326.patch -- P2P group information processing vulnerability + (bsc#1181777) ------------------------------------------------------------------- Tue Oct 6 15:20:18 UTC 2020 - Florian diff --git a/wpa_supplicant.spec b/wpa_supplicant.spec index ed4269d..865cc50 100644 --- a/wpa_supplicant.spec +++ b/wpa_supplicant.spec @@ -44,6 +44,7 @@ Patch7: CVE-2019-16275.patch Patch8: wpa_supplicant-p2p_iname_size.diff Patch9: CVE-2021-0326.patch Patch10: CVE-2021-27803.patch +Patch11: CVE-2021-30004.patch BuildRequires: pkgconfig BuildRequires: readline-devel BuildRequires: systemd-rpm-macros