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

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