mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 23:12:32 +00:00
db7f70fe61
This patch backports fixes for a security vulnerability impacting the hostapd implementation of SAE H2E. As upgrading hostapd would require more testing, the second mitigation step which involves backporting several patches was adopted as outlined in the official advisory[1]. An explanation of the impact of the vulnerability is provided from the advisory[1]: This vulnerability allows the attacker to downgrade the negotiated group to another enabled group if both the AP and STA have enabled SAE H2E and multiple groups. It should be noted that the H2E option is not enabled by default and the attack is not applicable to the default option, i.e., hunting-and-pecking, since it does not have any downgrade protection for group negotiation. In addition, the default configuration for enabled SAE groups in hostapd is to enable only a single group, so the vulnerability is not applicable unless hostapd has been explicitly configured to enable more groups for SAE. [1]: https://w1.fi/security/2024-2/sae-h2h-and-incomplete-downgrade-protection-for-group-negotiation.txt Signed-off-by: Rany Hany <rany_hany@riseup.net> Link: https://github.com/openwrt/openwrt/pull/16042 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
44 lines
1.2 KiB
Diff
44 lines
1.2 KiB
Diff
From 364c2da8741f0979dae497551e70b94c0e6c8636 Mon Sep 17 00:00:00 2001
|
|
From: Jouni Malinen <j@w1.fi>
|
|
Date: Sun, 7 Jul 2024 11:46:49 +0300
|
|
Subject: [PATCH] SAE: Check for invalid Rejected Groups element length
|
|
explicitly
|
|
|
|
Instead of practically ignoring an odd octet at the end of the element,
|
|
check for such invalid case explicitly. This is needed to avoid a
|
|
potential group downgrade attack.
|
|
|
|
Signed-off-by: Jouni Malinen <j@w1.fi>
|
|
---
|
|
src/ap/ieee802_11.c | 12 ++++++++++--
|
|
1 file changed, 10 insertions(+), 2 deletions(-)
|
|
|
|
--- a/src/ap/ieee802_11.c
|
|
+++ b/src/ap/ieee802_11.c
|
|
@@ -1229,7 +1229,7 @@ static int check_sae_rejected_groups(str
|
|
struct sae_data *sae)
|
|
{
|
|
const struct wpabuf *groups;
|
|
- size_t i, count;
|
|
+ size_t i, count, len;
|
|
const u8 *pos;
|
|
|
|
if (!sae->tmp)
|
|
@@ -1239,7 +1239,15 @@ static int check_sae_rejected_groups(str
|
|
return 0;
|
|
|
|
pos = wpabuf_head(groups);
|
|
- count = wpabuf_len(groups) / 2;
|
|
+ len = wpabuf_len(groups);
|
|
+ if (len & 1) {
|
|
+ wpa_printf(MSG_DEBUG,
|
|
+ "SAE: Invalid length of the Rejected Groups element payload: %zu",
|
|
+ len);
|
|
+ return 1;
|
|
+ }
|
|
+
|
|
+ count = len / 2;
|
|
for (i = 0; i < count; i++) {
|
|
int enabled;
|
|
u16 group;
|