All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Armin Kuster" <akuster808@gmail.com>
To: openembedded-devel@lists.openembedded.org
Subject: [hardnott 24/50] hostapd: fix CVE-2021-30004
Date: Sat, 17 Apr 2021 14:05:33 -0700	[thread overview]
Message-ID: <98c5cddf677addcb9aa296a7437b92100a478566.1618692905.git.akuster808@gmail.com> (raw)
In-Reply-To: <cover.1618692905.git.akuster808@gmail.com>

From: Stefan Ghinea <stefan.ghinea@windriver.com>

In wpa_supplicant and hostapd 2.9, forging attacks may occur because
AlgorithmIdentifier parameters are mishandled in tls/pkcs1.c and
tls/x509v3.c.

References:
https://nvd.nist.gov/vuln/detail/CVE-2021-30004

Upstream patches:
https://w1.fi/cgit/hostap/commit/?id=a0541334a6394f8237a4393b7372693cd7e96f15

Signed-off-by: Stefan Ghinea <stefan.ghinea@windriver.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
(cherry picked from commit e2bd6a52bf689b77b237eaee3067d2b0b6eee3d5)
Signed-off-by: Armin Kuster <akuster808@gmail.com>
---
 .../hostapd/hostapd/CVE-2021-30004.patch      | 123 ++++++++++++++++++
 .../hostapd/hostapd_2.9.bb                    |   1 +
 2 files changed, 124 insertions(+)
 create mode 100644 meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2021-30004.patch

diff --git a/meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2021-30004.patch b/meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2021-30004.patch
new file mode 100644
index 00000000000..e2540fc26be
--- /dev/null
+++ b/meta-oe/recipes-connectivity/hostapd/hostapd/CVE-2021-30004.patch
@@ -0,0 +1,123 @@
+From a0541334a6394f8237a4393b7372693cd7e96f15 Mon Sep 17 00:00:00 2001
+From: Jouni Malinen <j@w1.fi>
+Date: Sat, 13 Mar 2021 18:19:31 +0200
+Subject: [PATCH] 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 <j@w1.fi>
+
+Upstream-Status: Backport
+CVE: CVE-2021-30004
+
+Reference to upstream patch:
+[https://w1.fi/cgit/hostap/commit/?id=a0541334a6394f8237a4393b7372693cd7e96f15]
+
+Signed-off-by: Stefan Ghinea <stefan.ghinea@windriver.com>
+---
+ 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 141ac50..e09db07 100644
+--- a/src/tls/pkcs1.c
++++ b/src/tls/pkcs1.c
+@@ -240,6 +240,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;
+@@ -261,6 +263,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)) {
+@@ -269,6 +273,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 1bd5aa0..bf2289f 100644
+--- a/src/tls/x509v3.c
++++ b/src/tls/x509v3.c
+@@ -1834,6 +1834,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;
+@@ -1855,6 +1856,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)) {
+@@ -1862,6 +1865,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 */) {
+-- 
+2.17.1
+
diff --git a/meta-oe/recipes-connectivity/hostapd/hostapd_2.9.bb b/meta-oe/recipes-connectivity/hostapd/hostapd_2.9.bb
index 87899f3da20..e5860186857 100644
--- a/meta-oe/recipes-connectivity/hostapd/hostapd_2.9.bb
+++ b/meta-oe/recipes-connectivity/hostapd/hostapd_2.9.bb
@@ -15,6 +15,7 @@ SRC_URI = " \
     file://CVE-2019-5061.patch \
     file://CVE-2021-0326.patch \
     file://CVE-2021-27803.patch \
+    file://CVE-2021-30004.patch \
 "
 
 SRC_URI[md5sum] = "f188fc53a495fe7af3b6d77d3c31dee8"
-- 
2.17.1


  parent reply	other threads:[~2021-04-17 21:06 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-17 21:05 [hardnott 00/50] Patch review April 17th Armin Kuster
2021-04-17 21:05 ` [hardnott 01/50] tbb: upgrade 2020.3 -> 2021.2.0 Armin Kuster
2021-04-17 21:05 ` [hardnott 02/50] tbb: Fix build with musl Armin Kuster
2021-04-17 21:05 ` [hardnott 03/50] ocl-icd: upgrade 2.2.14 -> 2.3.0 Armin Kuster
2021-04-17 21:05 ` [hardnott 04/50] python3-ruamel-yaml: Upgrade 0.17.2 -> 0.17.4 Armin Kuster
2021-04-17 21:05 ` [hardnott 05/50] python3-croniter: Upgrade 1.0.10 -> 1.0.11 Armin Kuster
2021-04-17 21:05 ` [hardnott 06/50] python3-decorator: Upgrade 5.0.5 -> 5.0.6 Armin Kuster
2021-04-17 21:05 ` [hardnott 07/50] python3-grpcio-tools: Upgrade 1.36.1 -> 1.37.0 Armin Kuster
2021-04-17 21:05 ` [hardnott 08/50] python3-speedtest-cli: Upgrade 2.1.2 -> 2.1.3 Armin Kuster
2021-04-17 21:05 ` [hardnott 09/50] python3-python-vlc: Upgrade 3.0.11115 -> 3.0.12117 Armin Kuster
2021-04-17 21:05 ` [hardnott 10/50] python3-robotframework: Upgrade 4.0 -> 4.0.1 Armin Kuster
2021-04-17 21:05 ` [hardnott 11/50] python3-grpcio: Upgrade 1.36.1 -> 1.37.0 Armin Kuster
2021-04-17 21:05 ` [hardnott 12/50] python3-absl: upgrade 0.10.0 -> 0.12.0 Armin Kuster
2021-04-17 21:05 ` [hardnott 13/50] python3-astroid: upgrade 2.5.2 -> 2.5.3 Armin Kuster
2021-04-17 21:05 ` [hardnott 14/50] python3-bitarray: upgrade 1.9.1 -> 1.9.2 Armin Kuster
2021-04-17 21:05 ` [hardnott 15/50] python3-cerberus: Upgrade 1.3.2 -> 1.3.3 Armin Kuster
2021-04-17 21:05 ` [hardnott 16/50] python3-humanize: Upgrade 3.3.0 -> 3.4.0 Armin Kuster
2021-04-17 21:05 ` [hardnott 17/50] python3-monotonic: Upgrade 1.5 -> 1.6 Armin Kuster
2021-04-17 21:05 ` [hardnott 18/50] python3-sqlalchemy: Upgrade 1.4.6 -> 1.4.7 Armin Kuster
2021-04-17 21:05 ` [hardnott 19/50] python3-typed-ast: Upgrade 1.4.2 -> 1.4.3 Armin Kuster
2021-04-17 21:05 ` [hardnott 20/50] python3-backports-functools-lru-cache: Upgrade 1.6.3 -> 1.6.4 Armin Kuster
2021-04-17 21:05 ` [hardnott 21/50] python3-xmlschema: Upgrade 1.6.0 -> 1.6.1 Armin Kuster
2021-04-17 21:05 ` [hardnott 22/50] modemmanager: upgrade 1.14.10 -> 1.16.2 Armin Kuster
2021-04-17 21:05 ` [hardnott 23/50] libqmi: upgrade 1.26.6 -> 1.28.2 Armin Kuster
2021-04-17 21:05 ` Armin Kuster [this message]
2021-04-17 21:05 ` [hardnott 25/50] catfish: add python3-dbus to RDEPENDS Armin Kuster
2021-04-17 21:05 ` [hardnott 26/50] fluidsynth: upgrade 2.1.7 -> 2.2.0 Armin Kuster
2021-04-17 21:05 ` [hardnott 27/50] redis: upgrade 6.0.9 -> 6.2.1 Armin Kuster
2021-04-17 21:05 ` [hardnott 28/50] python3-pyroute2: Upgrade 0.5.17 -> 0.5.18 Armin Kuster
2021-04-17 21:05 ` [hardnott 29/50] python3-sympy: Upgrade 1.7.1 -> 1.8 Armin Kuster
2021-04-17 21:05 ` [hardnott 30/50] python3-pandas: Upgrade 1.2.3 -> 1.2.4 Armin Kuster
2021-04-17 21:05 ` [hardnott 31/50] python3-humanize: Upgrade 3.4.0 -> 3.4.1 Armin Kuster
2021-04-17 21:05 ` [hardnott 32/50] python3-decorator: Upgrade 5.0.6 -> 5.0.7 Armin Kuster
2021-04-17 21:05 ` [hardnott 33/50] python3-colorlog: Upgrade 4.8.0 -> 5.0.1 Armin Kuster
2021-04-17 21:05 ` [hardnott 34/50] python3-google-api-python-client: Upgrade 2.1.0 -> 2.2.0 Armin Kuster
2021-04-17 21:05 ` [hardnott 35/50] python3-croniter: Upgrade 1.0.11 -> 1.0.12 Armin Kuster
2021-04-17 21:05 ` [hardnott 36/50] core-image-minimal-xfce: Use graphical.target as default Armin Kuster
2021-04-17 21:05 ` [hardnott 37/50] opencv: fetch wechat_qrcode files used by dnn PACKAGECONFIG Armin Kuster
2021-04-17 21:05 ` [hardnott 38/50] opencv: link sfm module with Glog Armin Kuster
2021-04-17 21:05 ` [hardnott 39/50] debootstrap: 1.0.67 -> 1.0.123 Armin Kuster
2021-04-17 21:05 ` [hardnott 40/50] bats: upgrade 1.1.0 -> 1.3.0 Armin Kuster
2021-04-17 21:05 ` [hardnott 41/50] fwts: upgrade to 21.03.00 Armin Kuster
2021-04-17 21:05 ` [hardnott 42/50] PEP8 double aggressive E701, E70 and E502 Armin Kuster
2021-04-17 21:05 ` [hardnott 43/50] PEP8 double aggressive E20 and E211 Armin Kuster
2021-04-17 21:05 ` [hardnott 44/50] PEP8 double aggressive E22, E224, E241, E242 and E27 Armin Kuster
2021-04-17 21:05 ` [hardnott 45/50] PEP8 double aggressive E301 ~ E306 Armin Kuster
2021-04-17 21:05 ` [hardnott 46/50] PEP8 double aggressive W291 ~ W293 and W391 Armin Kuster
2021-04-17 21:05 ` [hardnott 47/50] vnstat: Disable install parallism to fix a potential install race Armin Kuster
2021-04-17 21:05 ` [hardnott 48/50] uftrace: Fix error on aarch64 when binutils update to 2.35.1 Armin Kuster
2021-04-17 21:05 ` [hardnott 49/50] open-vm-tools: upgrade 11.0.1 -> 11.2.5 Armin Kuster
2021-04-17 21:05 ` [hardnott 50/50] open-vm-tools: Fix build with gcc 11 Armin Kuster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=98c5cddf677addcb9aa296a7437b92100a478566.1618692905.git.akuster808@gmail.com \
    --to=akuster808@gmail.com \
    --cc=openembedded-devel@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.