Blame SOURCES/rh1619553-0001-WPA-Ignore-unauthenticated-encrypted-EAPOL-Key-data.patch

41389a
From 3e34cfdff6b192fe337c6fb3f487f73e96582961 Mon Sep 17 00:00:00 2001
41389a
From: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
41389a
Date: Sun, 15 Jul 2018 01:25:53 +0200
41389a
Subject: [PATCH] WPA: Ignore unauthenticated encrypted EAPOL-Key data
41389a
41389a
Ignore unauthenticated encrypted EAPOL-Key data in supplicant
41389a
processing. When using WPA2, these are frames that have the Encrypted
41389a
flag set, but not the MIC flag.
41389a
41389a
When using WPA2, EAPOL-Key frames that had the Encrypted flag set but
41389a
not the MIC flag, had their data field decrypted without first verifying
41389a
the MIC. In case the data field was encrypted using RC4 (i.e., when
41389a
negotiating TKIP as the pairwise cipher), this meant that
41389a
unauthenticated but decrypted data would then be processed. An adversary
41389a
could abuse this as a decryption oracle to recover sensitive information
41389a
in the data field of EAPOL-Key messages (e.g., the group key).
41389a
(CVE-2018-14526)
41389a
41389a
Signed-off-by: Mathy Vanhoef <Mathy.Vanhoef@cs.kuleuven.be>
41389a
---
41389a
 src/rsn_supp/wpa.c | 11 +++++++++++
41389a
 1 file changed, 11 insertions(+)
41389a
41389a
diff -upr wpa_supplicant-2.6.orig/src/rsn_supp/wpa.c wpa_supplicant-2.6/src/rsn_supp/wpa.c
41389a
--- wpa_supplicant-2.6.orig/src/rsn_supp/wpa.c	2016-10-02 21:51:11.000000000 +0300
41389a
+++ wpa_supplicant-2.6/src/rsn_supp/wpa.c	2018-08-08 16:55:11.506831029 +0300
41389a
@@ -2016,6 +2016,17 @@ int wpa_sm_rx_eapol(struct wpa_sm *sm, c
41389a
 
41389a
 	if ((sm->proto == WPA_PROTO_RSN || sm->proto == WPA_PROTO_OSEN) &&
41389a
 	    (key_info & WPA_KEY_INFO_ENCR_KEY_DATA)) {
41389a
+		/*
41389a
+		 * Only decrypt the Key Data field if the frame's authenticity
41389a
+		 * was verified. When using AES-SIV (FILS), the MIC flag is not
41389a
+		 * set, so this check should only be performed if mic_len != 0
41389a
+		 * which is the case in this code branch.
41389a
+		 */
41389a
+		if (!(key_info & WPA_KEY_INFO_MIC)) {
41389a
+			wpa_msg(sm->ctx->msg_ctx, MSG_WARNING,
41389a
+				"WPA: Ignore EAPOL-Key with encrypted but unauthenticated data");
41389a
+			goto out;
41389a
+		}
41389a
 		if (wpa_supplicant_decrypt_key_data(sm, key, ver, key_data,
41389a
 						    &key_data_len))
41389a
 			goto out;