Complete Yocto mirror with license table for TQMa6UL (2038-compliance)
- 264 license table entries with exact download URLs (224/264 resolved) - Complete sources/ directory with all BitBake recipes - Build configuration: tqma6ul-multi-mba6ulx, spaetzle (musl) - Full traceability for Softwarefreigabeantrag - GCC 13.4.0, Linux 6.6.102, U-Boot 2023.04, musl 1.2.4 - License distribution: GPL-2.0 (24), MIT (23), GPL-2.0+ (18), BSD-3 (16)
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
From 57b12a1e43605f71239a21488cb9b541f0751dda Mon Sep 17 00:00:00 2001
|
||||
From: Alex Kiernan <alexk@zuma.ai>
|
||||
Date: Thu, 21 Apr 2022 10:15:29 +0100
|
||||
Subject: [PATCH] Install wpa_passphrase when not disabled
|
||||
|
||||
As part of fixing CONFIG_NO_WPA_PASSPHRASE, whilst wpa_passphrase gets
|
||||
built, its not installed during `make install`.
|
||||
|
||||
Fixes: cb41c214b78d ("build: Re-enable options for libwpa_client.so and wpa_passphrase")
|
||||
Signed-off-by: Alex Kiernan <alexk@zuma.ai>
|
||||
Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
|
||||
Upstream-Status: Submitted [http://lists.infradead.org/pipermail/hostap/2022-April/040448.html]
|
||||
---
|
||||
wpa_supplicant/Makefile | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
|
||||
index 0bab313f2355..12787c0c7d0f 100644
|
||||
--- a/wpa_supplicant/Makefile
|
||||
+++ b/wpa_supplicant/Makefile
|
||||
@@ -73,6 +73,9 @@ $(DESTDIR)$(BINDIR)/%: %
|
||||
|
||||
install: $(addprefix $(DESTDIR)$(BINDIR)/,$(BINALL))
|
||||
$(MAKE) -C ../src install
|
||||
+ifndef CONFIG_NO_WPA_PASSPHRASE
|
||||
+ install -D wpa_passphrase $(DESTDIR)/$(BINDIR)/wpa_passphrase
|
||||
+endif
|
||||
ifdef CONFIG_BUILD_WPA_CLIENT_SO
|
||||
install -m 0644 -D libwpa_client.so $(DESTDIR)/$(LIBDIR)/libwpa_client.so
|
||||
install -m 0644 -D ../src/common/wpa_ctrl.h $(DESTDIR)/$(INCDIR)/wpa_ctrl.h
|
||||
--
|
||||
2.35.1
|
||||
|
||||
@@ -0,0 +1,213 @@
|
||||
From f6f7cead3661ceeef54b21f7e799c0afc98537ec Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 8 Jul 2023 19:55:32 +0300
|
||||
Subject: [PATCH] PEAP client: Update Phase 2 authentication requirements
|
||||
|
||||
The previous PEAP client behavior allowed the server to skip Phase 2
|
||||
authentication with the expectation that the server was authenticated
|
||||
during Phase 1 through TLS server certificate validation. Various PEAP
|
||||
specifications are not exactly clear on what the behavior on this front
|
||||
is supposed to be and as such, this ended up being more flexible than
|
||||
the TTLS/FAST/TEAP cases. However, this is not really ideal when
|
||||
unfortunately common misconfiguration of PEAP is used in deployed
|
||||
devices where the server trust root (ca_cert) is not configured or the
|
||||
user has an easy option for allowing this validation step to be skipped.
|
||||
|
||||
Change the default PEAP client behavior to be to require Phase 2
|
||||
authentication to be successfully completed for cases where TLS session
|
||||
resumption is not used and the client certificate has not been
|
||||
configured. Those two exceptions are the main cases where a deployed
|
||||
authentication server might skip Phase 2 and as such, where a more
|
||||
strict default behavior could result in undesired interoperability
|
||||
issues. Requiring Phase 2 authentication will end up disabling TLS
|
||||
session resumption automatically to avoid interoperability issues.
|
||||
|
||||
Allow Phase 2 authentication behavior to be configured with a new phase1
|
||||
configuration parameter option:
|
||||
'phase2_auth' option can be used to control Phase 2 (i.e., within TLS
|
||||
tunnel) behavior for PEAP:
|
||||
* 0 = do not require Phase 2 authentication
|
||||
* 1 = require Phase 2 authentication when client certificate
|
||||
(private_key/client_cert) is no used and TLS session resumption was
|
||||
not used (default)
|
||||
* 2 = require Phase 2 authentication in all cases
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
CVE: CVE-2023-52160
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=8e6485a1bcb0baffdea9e55255a81270b768439c]
|
||||
|
||||
Signed-off-by: Claus Stovgaard <claus.stovgaard@gmail.com>
|
||||
|
||||
---
|
||||
src/eap_peer/eap_config.h | 8 ++++++
|
||||
src/eap_peer/eap_peap.c | 40 +++++++++++++++++++++++++++---
|
||||
src/eap_peer/eap_tls_common.c | 6 +++++
|
||||
src/eap_peer/eap_tls_common.h | 5 ++++
|
||||
wpa_supplicant/wpa_supplicant.conf | 7 ++++++
|
||||
5 files changed, 63 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/eap_peer/eap_config.h b/src/eap_peer/eap_config.h
|
||||
index 3238f74..047eec2 100644
|
||||
--- a/src/eap_peer/eap_config.h
|
||||
+++ b/src/eap_peer/eap_config.h
|
||||
@@ -469,6 +469,14 @@ struct eap_peer_config {
|
||||
* 1 = use cryptobinding if server supports it
|
||||
* 2 = require cryptobinding
|
||||
*
|
||||
+ * phase2_auth option can be used to control Phase 2 (i.e., within TLS
|
||||
+ * tunnel) behavior for PEAP:
|
||||
+ * 0 = do not require Phase 2 authentication
|
||||
+ * 1 = require Phase 2 authentication when client certificate
|
||||
+ * (private_key/client_cert) is no used and TLS session resumption was
|
||||
+ * not used (default)
|
||||
+ * 2 = require Phase 2 authentication in all cases
|
||||
+ *
|
||||
* EAP-WSC (WPS) uses following options: pin=Device_Password and
|
||||
* uuid=Device_UUID
|
||||
*
|
||||
diff --git a/src/eap_peer/eap_peap.c b/src/eap_peer/eap_peap.c
|
||||
index 12e30df..6080697 100644
|
||||
--- a/src/eap_peer/eap_peap.c
|
||||
+++ b/src/eap_peer/eap_peap.c
|
||||
@@ -67,6 +67,7 @@ struct eap_peap_data {
|
||||
u8 cmk[20];
|
||||
int soh; /* Whether IF-TNCCS-SOH (Statement of Health; Microsoft NAP)
|
||||
* is enabled. */
|
||||
+ enum { NO_AUTH, FOR_INITIAL, ALWAYS } phase2_auth;
|
||||
};
|
||||
|
||||
|
||||
@@ -114,6 +115,19 @@ static void eap_peap_parse_phase1(struct eap_peap_data *data,
|
||||
wpa_printf(MSG_DEBUG, "EAP-PEAP: Require cryptobinding");
|
||||
}
|
||||
|
||||
+ if (os_strstr(phase1, "phase2_auth=0")) {
|
||||
+ data->phase2_auth = NO_AUTH;
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "EAP-PEAP: Do not require Phase 2 authentication");
|
||||
+ } else if (os_strstr(phase1, "phase2_auth=1")) {
|
||||
+ data->phase2_auth = FOR_INITIAL;
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "EAP-PEAP: Require Phase 2 authentication for initial connection");
|
||||
+ } else if (os_strstr(phase1, "phase2_auth=2")) {
|
||||
+ data->phase2_auth = ALWAYS;
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "EAP-PEAP: Require Phase 2 authentication for all cases");
|
||||
+ }
|
||||
#ifdef EAP_TNC
|
||||
if (os_strstr(phase1, "tnc=soh2")) {
|
||||
data->soh = 2;
|
||||
@@ -142,6 +156,7 @@ static void * eap_peap_init(struct eap_sm *sm)
|
||||
data->force_peap_version = -1;
|
||||
data->peap_outer_success = 2;
|
||||
data->crypto_binding = OPTIONAL_BINDING;
|
||||
+ data->phase2_auth = FOR_INITIAL;
|
||||
|
||||
if (config && config->phase1)
|
||||
eap_peap_parse_phase1(data, config->phase1);
|
||||
@@ -454,6 +469,20 @@ static int eap_tlv_validate_cryptobinding(struct eap_sm *sm,
|
||||
}
|
||||
|
||||
|
||||
+static bool peap_phase2_sufficient(struct eap_sm *sm,
|
||||
+ struct eap_peap_data *data)
|
||||
+{
|
||||
+ if ((data->phase2_auth == ALWAYS ||
|
||||
+ (data->phase2_auth == FOR_INITIAL &&
|
||||
+ !tls_connection_resumed(sm->ssl_ctx, data->ssl.conn) &&
|
||||
+ !data->ssl.client_cert_conf) ||
|
||||
+ data->phase2_eap_started) &&
|
||||
+ !data->phase2_eap_success)
|
||||
+ return false;
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+
|
||||
/**
|
||||
* eap_tlv_process - Process a received EAP-TLV message and generate a response
|
||||
* @sm: Pointer to EAP state machine allocated with eap_peer_sm_init()
|
||||
@@ -568,6 +597,11 @@ static int eap_tlv_process(struct eap_sm *sm, struct eap_peap_data *data,
|
||||
" - force failed Phase 2");
|
||||
resp_status = EAP_TLV_RESULT_FAILURE;
|
||||
ret->decision = DECISION_FAIL;
|
||||
+ } else if (!peap_phase2_sufficient(sm, data)) {
|
||||
+ wpa_printf(MSG_INFO,
|
||||
+ "EAP-PEAP: Server indicated Phase 2 success, but sufficient Phase 2 authentication has not been completed");
|
||||
+ resp_status = EAP_TLV_RESULT_FAILURE;
|
||||
+ ret->decision = DECISION_FAIL;
|
||||
} else {
|
||||
resp_status = EAP_TLV_RESULT_SUCCESS;
|
||||
ret->decision = DECISION_UNCOND_SUCC;
|
||||
@@ -887,8 +921,7 @@ continue_req:
|
||||
/* EAP-Success within TLS tunnel is used to indicate
|
||||
* shutdown of the TLS channel. The authentication has
|
||||
* been completed. */
|
||||
- if (data->phase2_eap_started &&
|
||||
- !data->phase2_eap_success) {
|
||||
+ if (!peap_phase2_sufficient(sm, data)) {
|
||||
wpa_printf(MSG_DEBUG, "EAP-PEAP: Phase 2 "
|
||||
"Success used to indicate success, "
|
||||
"but Phase 2 EAP was not yet "
|
||||
@@ -1199,8 +1232,9 @@ static struct wpabuf * eap_peap_process(struct eap_sm *sm, void *priv,
|
||||
static bool eap_peap_has_reauth_data(struct eap_sm *sm, void *priv)
|
||||
{
|
||||
struct eap_peap_data *data = priv;
|
||||
+
|
||||
return tls_connection_established(sm->ssl_ctx, data->ssl.conn) &&
|
||||
- data->phase2_success;
|
||||
+ data->phase2_success && data->phase2_auth != ALWAYS;
|
||||
}
|
||||
|
||||
|
||||
diff --git a/src/eap_peer/eap_tls_common.c b/src/eap_peer/eap_tls_common.c
|
||||
index c1837db..a53eeb1 100644
|
||||
--- a/src/eap_peer/eap_tls_common.c
|
||||
+++ b/src/eap_peer/eap_tls_common.c
|
||||
@@ -239,6 +239,12 @@ static int eap_tls_params_from_conf(struct eap_sm *sm,
|
||||
|
||||
sm->ext_cert_check = !!(params->flags & TLS_CONN_EXT_CERT_CHECK);
|
||||
|
||||
+ if (!phase2)
|
||||
+ data->client_cert_conf = params->client_cert ||
|
||||
+ params->client_cert_blob ||
|
||||
+ params->private_key ||
|
||||
+ params->private_key_blob;
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/src/eap_peer/eap_tls_common.h b/src/eap_peer/eap_tls_common.h
|
||||
index 9ac0012..3348634 100644
|
||||
--- a/src/eap_peer/eap_tls_common.h
|
||||
+++ b/src/eap_peer/eap_tls_common.h
|
||||
@@ -79,6 +79,11 @@ struct eap_ssl_data {
|
||||
* tls_v13 - Whether TLS v1.3 or newer is used
|
||||
*/
|
||||
int tls_v13;
|
||||
+
|
||||
+ /**
|
||||
+ * client_cert_conf: Whether client certificate has been configured
|
||||
+ */
|
||||
+ bool client_cert_conf;
|
||||
};
|
||||
|
||||
|
||||
diff --git a/wpa_supplicant/wpa_supplicant.conf b/wpa_supplicant/wpa_supplicant.conf
|
||||
index 6619d6b..d63f73c 100644
|
||||
--- a/wpa_supplicant/wpa_supplicant.conf
|
||||
+++ b/wpa_supplicant/wpa_supplicant.conf
|
||||
@@ -1321,6 +1321,13 @@ fast_reauth=1
|
||||
# * 0 = do not use cryptobinding (default)
|
||||
# * 1 = use cryptobinding if server supports it
|
||||
# * 2 = require cryptobinding
|
||||
+# 'phase2_auth' option can be used to control Phase 2 (i.e., within TLS
|
||||
+# tunnel) behavior for PEAP:
|
||||
+# * 0 = do not require Phase 2 authentication
|
||||
+# * 1 = require Phase 2 authentication when client certificate
|
||||
+# (private_key/client_cert) is no used and TLS session resumption was
|
||||
+# not used (default)
|
||||
+# * 2 = require Phase 2 authentication in all cases
|
||||
# EAP-WSC (WPS) uses following options: pin=<Device Password> or
|
||||
# pbc=1.
|
||||
#
|
||||
@@ -0,0 +1,52 @@
|
||||
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 1/3] 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>
|
||||
|
||||
CVE: CVE-2024-3596
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=364c2da8741f0979dae497551e70b94c0e6c8636]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
src/ap/ieee802_11.c | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
|
||||
index db4104928..1a62e30cc 100644
|
||||
--- a/src/ap/ieee802_11.c
|
||||
+++ b/src/ap/ieee802_11.c
|
||||
@@ -1258,7 +1258,7 @@ static int check_sae_rejected_groups(struct hostapd_data *hapd,
|
||||
struct sae_data *sae)
|
||||
{
|
||||
const struct wpabuf *groups;
|
||||
- size_t i, count;
|
||||
+ size_t i, count, len;
|
||||
const u8 *pos;
|
||||
|
||||
if (!sae->tmp)
|
||||
@@ -1268,7 +1268,15 @@ static int check_sae_rejected_groups(struct hostapd_data *hapd,
|
||||
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;
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
From cb41c214b78d6df187a31950342e48a403dbd769 Mon Sep 17 00:00:00 2001
|
||||
From: Sergey Matyukevich <geomatsi@gmail.com>
|
||||
Date: Tue, 22 Feb 2022 11:52:19 +0300
|
||||
Subject: [PATCH 1/2] build: Re-enable options for libwpa_client.so and
|
||||
wpa_passphrase
|
||||
|
||||
Commit a41a29192e5d ("build: Pull common fragments into a build.rules
|
||||
file") introduced a regression into wpa_supplicant build process. The
|
||||
build target libwpa_client.so is not built regardless of whether the
|
||||
option CONFIG_BUILD_WPA_CLIENT_SO is set or not. This happens because
|
||||
this config option is used before it is imported from the configuration
|
||||
file. Moving its use after including build.rules does not help: the
|
||||
variable ALL is processed by build.rules and further changes are not
|
||||
applied. Similarly, option CONFIG_NO_WPA_PASSPHRASE also does not work
|
||||
as expected: wpa_passphrase is always built regardless of whether the
|
||||
option is set or not.
|
||||
|
||||
Re-enable these options by adding both build targets to _all
|
||||
dependencies.
|
||||
|
||||
Fixes: a41a29192e5d ("build: Pull common fragments into a build.rules file")
|
||||
Signed-off-by: Sergey Matyukevich <geomatsi@gmail.com>
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Alex Kiernan <alexk@zuma.ai>
|
||||
Signed-off-by: Alex Kiernan <alexk@gmail.com>
|
||||
---
|
||||
wpa_supplicant/Makefile | 19 ++++++++++++-------
|
||||
1 file changed, 12 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
|
||||
index cb66defac7c8..c456825ae75f 100644
|
||||
--- a/wpa_supplicant/Makefile
|
||||
+++ b/wpa_supplicant/Makefile
|
||||
@@ -1,24 +1,29 @@
|
||||
BINALL=wpa_supplicant wpa_cli
|
||||
|
||||
-ifndef CONFIG_NO_WPA_PASSPHRASE
|
||||
-BINALL += wpa_passphrase
|
||||
-endif
|
||||
-
|
||||
ALL = $(BINALL)
|
||||
ALL += systemd/wpa_supplicant.service
|
||||
ALL += systemd/wpa_supplicant@.service
|
||||
ALL += systemd/wpa_supplicant-nl80211@.service
|
||||
ALL += systemd/wpa_supplicant-wired@.service
|
||||
ALL += dbus/fi.w1.wpa_supplicant1.service
|
||||
-ifdef CONFIG_BUILD_WPA_CLIENT_SO
|
||||
-ALL += libwpa_client.so
|
||||
-endif
|
||||
|
||||
EXTRA_TARGETS=dynamic_eap_methods
|
||||
|
||||
CONFIG_FILE=.config
|
||||
include ../src/build.rules
|
||||
|
||||
+ifdef CONFIG_BUILD_WPA_CLIENT_SO
|
||||
+# add the dependency this way to allow CONFIG_BUILD_WPA_CLIENT_SO
|
||||
+# being set in the config which is read by build.rules
|
||||
+_all: libwpa_client.so
|
||||
+endif
|
||||
+
|
||||
+ifndef CONFIG_NO_WPA_PASSPHRASE
|
||||
+# add the dependency this way to allow CONFIG_NO_WPA_PASSPHRASE
|
||||
+# being set in the config which is read by build.rules
|
||||
+_all: wpa_passphrase
|
||||
+endif
|
||||
+
|
||||
ifdef LIBS
|
||||
# If LIBS is set with some global build system defaults, clone those for
|
||||
# LIBS_c and LIBS_p to cover wpa_passphrase and wpa_cli as well.
|
||||
--
|
||||
2.35.1
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
From d001b301ba7987f4b39453a211631b85c48f2ff8 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <quic_jouni@quicinc.com>
|
||||
Date: Thu, 3 Mar 2022 13:26:42 +0200
|
||||
Subject: [PATCH 2/2] Fix removal of wpa_passphrase on 'make clean'
|
||||
|
||||
Fixes: 0430bc8267b4 ("build: Add a common-clean target")
|
||||
Signed-off-by: Jouni Malinen <quic_jouni@quicinc.com>
|
||||
Upstream-Status: Backport
|
||||
Signed-off-by: Alex Kiernan <alexk@zuma.ai>
|
||||
Signed-off-by: Alex Kiernan <alexk@gmail.com>
|
||||
---
|
||||
wpa_supplicant/Makefile | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/wpa_supplicant/Makefile b/wpa_supplicant/Makefile
|
||||
index c456825ae75f..4b4688931b1d 100644
|
||||
--- a/wpa_supplicant/Makefile
|
||||
+++ b/wpa_supplicant/Makefile
|
||||
@@ -2077,3 +2077,4 @@ clean: common-clean
|
||||
rm -f libwpa_client.a
|
||||
rm -f libwpa_client.so
|
||||
rm -f libwpa_test1 libwpa_test2
|
||||
+ rm -f wpa_passphrase
|
||||
--
|
||||
2.35.1
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
From 593a7c2f8c93edd6b552f2d42e28164464b4e6ff Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Tue, 9 Jul 2024 23:33:38 +0300
|
||||
Subject: [PATCH 2/3] SAE: Check for invalid Rejected Groups element length
|
||||
explicitly on STA
|
||||
|
||||
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.
|
||||
|
||||
Fixes: 444d76f74f65 ("SAE: Check that peer's rejected groups are not enabled")
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=593a7c2f8c93edd6b552f2d42e28164464b4e6ff]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
wpa_supplicant/sme.c | 11 +++++++++--
|
||||
1 file changed, 9 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/wpa_supplicant/sme.c b/wpa_supplicant/sme.c
|
||||
index 7f43216c6..c7289f6a8 100644
|
||||
--- a/wpa_supplicant/sme.c
|
||||
+++ b/wpa_supplicant/sme.c
|
||||
@@ -1222,14 +1222,21 @@ static int sme_sae_is_group_enabled(struct wpa_supplicant *wpa_s, int group)
|
||||
static int sme_check_sae_rejected_groups(struct wpa_supplicant *wpa_s,
|
||||
const struct wpabuf *groups)
|
||||
{
|
||||
- size_t i, count;
|
||||
+ size_t i, count, len;
|
||||
const u8 *pos;
|
||||
|
||||
if (!groups)
|
||||
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;
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
From 9716bf1160beb677e965d9e6475d6c9e162e8374 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Tue, 9 Jul 2024 23:34:34 +0300
|
||||
Subject: [PATCH 3/3] SAE: Reject invalid Rejected Groups element in the parser
|
||||
|
||||
There is no need to depend on all uses (i.e., both hostapd and
|
||||
wpa_supplicant) to verify that the length of the Rejected Groups field
|
||||
in the Rejected Groups element is valid (i.e., a multiple of two octets)
|
||||
since the common parser can reject the message when detecting this.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=9716bf1160beb677e965d9e6475d6c9e162e8374]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
src/common/sae.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/common/sae.c b/src/common/sae.c
|
||||
index c0f154e91..620bdf753 100644
|
||||
--- a/src/common/sae.c
|
||||
+++ b/src/common/sae.c
|
||||
@@ -2076,6 +2076,12 @@ static int sae_parse_rejected_groups(struct sae_data *sae,
|
||||
return WLAN_STATUS_UNSPECIFIED_FAILURE;
|
||||
epos++; /* skip ext ID */
|
||||
len--;
|
||||
+ if (len & 1) {
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "SAE: Invalid length of the Rejected Groups element payload: %u",
|
||||
+ len);
|
||||
+ return WLAN_STATUS_UNSPECIFIED_FAILURE;
|
||||
+ }
|
||||
|
||||
wpabuf_free(sae->tmp->peer_rejected_groups);
|
||||
sae->tmp->peer_rejected_groups = wpabuf_alloc(len);
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
d root root 0700 /var/run/wpa_supplicant none
|
||||
@@ -0,0 +1,82 @@
|
||||
From 945acf3ef06a6c312927da4fa055693dbac432d1 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 2 Apr 2022 16:28:12 +0300
|
||||
Subject: [PATCH 1/9] ieee802_11_auth: Coding style cleanup - no string
|
||||
constant splitting
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=945acf3ef06a6c312927da4fa055693dbac432d1]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
src/ap/ieee802_11_auth.c | 27 +++++++++++++++------------
|
||||
1 file changed, 15 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/src/ap/ieee802_11_auth.c b/src/ap/ieee802_11_auth.c
|
||||
index 783ee6dea..47cc625be 100644
|
||||
--- a/src/ap/ieee802_11_auth.c
|
||||
+++ b/src/ap/ieee802_11_auth.c
|
||||
@@ -267,16 +267,16 @@ int hostapd_allowed_address(struct hostapd_data *hapd, const u8 *addr,
|
||||
os_get_reltime(&query->timestamp);
|
||||
os_memcpy(query->addr, addr, ETH_ALEN);
|
||||
if (hostapd_radius_acl_query(hapd, addr, query)) {
|
||||
- wpa_printf(MSG_DEBUG, "Failed to send Access-Request "
|
||||
- "for ACL query.");
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "Failed to send Access-Request for ACL query.");
|
||||
hostapd_acl_query_free(query);
|
||||
return HOSTAPD_ACL_REJECT;
|
||||
}
|
||||
|
||||
query->auth_msg = os_memdup(msg, len);
|
||||
if (query->auth_msg == NULL) {
|
||||
- wpa_printf(MSG_ERROR, "Failed to allocate memory for "
|
||||
- "auth frame.");
|
||||
+ wpa_printf(MSG_ERROR,
|
||||
+ "Failed to allocate memory for auth frame.");
|
||||
hostapd_acl_query_free(query);
|
||||
return HOSTAPD_ACL_REJECT;
|
||||
}
|
||||
@@ -467,19 +467,21 @@ hostapd_acl_recv_radius(struct radius_msg *msg, struct radius_msg *req,
|
||||
if (query == NULL)
|
||||
return RADIUS_RX_UNKNOWN;
|
||||
|
||||
- wpa_printf(MSG_DEBUG, "Found matching Access-Request for RADIUS "
|
||||
- "message (id=%d)", query->radius_id);
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "Found matching Access-Request for RADIUS message (id=%d)",
|
||||
+ query->radius_id);
|
||||
|
||||
if (radius_msg_verify(msg, shared_secret, shared_secret_len, req, 0)) {
|
||||
- wpa_printf(MSG_INFO, "Incoming RADIUS packet did not have "
|
||||
- "correct authenticator - dropped\n");
|
||||
+ wpa_printf(MSG_INFO,
|
||||
+ "Incoming RADIUS packet did not have correct authenticator - dropped");
|
||||
return RADIUS_RX_INVALID_AUTHENTICATOR;
|
||||
}
|
||||
|
||||
if (hdr->code != RADIUS_CODE_ACCESS_ACCEPT &&
|
||||
hdr->code != RADIUS_CODE_ACCESS_REJECT) {
|
||||
- wpa_printf(MSG_DEBUG, "Unknown RADIUS message code %d to ACL "
|
||||
- "query", hdr->code);
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "Unknown RADIUS message code %d to ACL query",
|
||||
+ hdr->code);
|
||||
return RADIUS_RX_UNKNOWN;
|
||||
}
|
||||
|
||||
@@ -506,8 +508,9 @@ hostapd_acl_recv_radius(struct radius_msg *msg, struct radius_msg *req,
|
||||
msg, RADIUS_ATTR_ACCT_INTERIM_INTERVAL,
|
||||
&info->acct_interim_interval) == 0 &&
|
||||
info->acct_interim_interval < 60) {
|
||||
- wpa_printf(MSG_DEBUG, "Ignored too small "
|
||||
- "Acct-Interim-Interval %d for STA " MACSTR,
|
||||
+ wpa_printf(MSG_DEBUG,
|
||||
+ "Ignored too small Acct-Interim-Interval %d for STA "
|
||||
+ MACSTR,
|
||||
info->acct_interim_interval,
|
||||
MAC2STR(query->addr));
|
||||
info->acct_interim_interval = 0;
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,165 @@
|
||||
From adac846bd0e258a0aa50750bbd2b411fa0085c46 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 16 Mar 2024 11:11:44 +0200
|
||||
Subject: [PATCH 2/9] RADIUS: Allow Message-Authenticator attribute as the
|
||||
first attribute
|
||||
|
||||
If a Message-Authenticator attribute was already added to a RADIUS
|
||||
message, use that attribute instead of adding a new one when finishing
|
||||
message building. This allows the Message-Authenticator attribute to be
|
||||
placed as the first attribute in the message.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
CVE: CVE-2024-3596
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=adac846bd0e258a0aa50750bbd2b411fa0085c46]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
src/radius/radius.c | 85 ++++++++++++++++++++++++++++-----------------
|
||||
src/radius/radius.h | 1 +
|
||||
2 files changed, 54 insertions(+), 32 deletions(-)
|
||||
|
||||
diff --git a/src/radius/radius.c b/src/radius/radius.c
|
||||
index be16e27b9..2d2e00b5c 100644
|
||||
--- a/src/radius/radius.c
|
||||
+++ b/src/radius/radius.c
|
||||
@@ -364,25 +364,54 @@ void radius_msg_dump(struct radius_msg *msg)
|
||||
}
|
||||
|
||||
|
||||
+u8 * radius_msg_add_msg_auth(struct radius_msg *msg)
|
||||
+{
|
||||
+ u8 auth[MD5_MAC_LEN];
|
||||
+ struct radius_attr_hdr *attr;
|
||||
+
|
||||
+ os_memset(auth, 0, MD5_MAC_LEN);
|
||||
+ attr = radius_msg_add_attr(msg, RADIUS_ATTR_MESSAGE_AUTHENTICATOR,
|
||||
+ auth, MD5_MAC_LEN);
|
||||
+ if (!attr) {
|
||||
+ wpa_printf(MSG_ERROR,
|
||||
+ "WARNING: Could not add Message-Authenticator");
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ return (u8 *) (attr + 1);
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static u8 * radius_msg_auth_pos(struct radius_msg *msg)
|
||||
+{
|
||||
+ u8 *pos;
|
||||
+ size_t alen;
|
||||
+
|
||||
+ if (radius_msg_get_attr_ptr(msg, RADIUS_ATTR_MESSAGE_AUTHENTICATOR,
|
||||
+ &pos, &alen, NULL) == 0 &&
|
||||
+ alen == MD5_MAC_LEN) {
|
||||
+ /* Use already added Message-Authenticator attribute */
|
||||
+ return pos;
|
||||
+ }
|
||||
+
|
||||
+ /* Add a Message-Authenticator attribute */
|
||||
+ return radius_msg_add_msg_auth(msg);
|
||||
+}
|
||||
+
|
||||
+
|
||||
int radius_msg_finish(struct radius_msg *msg, const u8 *secret,
|
||||
size_t secret_len)
|
||||
{
|
||||
if (secret) {
|
||||
- u8 auth[MD5_MAC_LEN];
|
||||
- struct radius_attr_hdr *attr;
|
||||
+ u8 *pos;
|
||||
|
||||
- os_memset(auth, 0, MD5_MAC_LEN);
|
||||
- attr = radius_msg_add_attr(msg,
|
||||
- RADIUS_ATTR_MESSAGE_AUTHENTICATOR,
|
||||
- auth, MD5_MAC_LEN);
|
||||
- if (attr == NULL) {
|
||||
- wpa_printf(MSG_WARNING, "RADIUS: Could not add "
|
||||
- "Message-Authenticator");
|
||||
+ pos = radius_msg_auth_pos(msg);
|
||||
+ if (!pos)
|
||||
return -1;
|
||||
- }
|
||||
msg->hdr->length = host_to_be16(wpabuf_len(msg->buf));
|
||||
- hmac_md5(secret, secret_len, wpabuf_head(msg->buf),
|
||||
- wpabuf_len(msg->buf), (u8 *) (attr + 1));
|
||||
+ if (hmac_md5(secret, secret_len, wpabuf_head(msg->buf),
|
||||
+ wpabuf_len(msg->buf), pos) < 0)
|
||||
+ return -1;
|
||||
} else
|
||||
msg->hdr->length = host_to_be16(wpabuf_len(msg->buf));
|
||||
|
||||
@@ -398,23 +427,19 @@ int radius_msg_finish(struct radius_msg *msg, const u8 *secret,
|
||||
int radius_msg_finish_srv(struct radius_msg *msg, const u8 *secret,
|
||||
size_t secret_len, const u8 *req_authenticator)
|
||||
{
|
||||
- u8 auth[MD5_MAC_LEN];
|
||||
- struct radius_attr_hdr *attr;
|
||||
const u8 *addr[4];
|
||||
size_t len[4];
|
||||
+ u8 *pos;
|
||||
|
||||
- os_memset(auth, 0, MD5_MAC_LEN);
|
||||
- attr = radius_msg_add_attr(msg, RADIUS_ATTR_MESSAGE_AUTHENTICATOR,
|
||||
- auth, MD5_MAC_LEN);
|
||||
- if (attr == NULL) {
|
||||
- wpa_printf(MSG_ERROR, "WARNING: Could not add Message-Authenticator");
|
||||
+ pos = radius_msg_auth_pos(msg);
|
||||
+ if (!pos)
|
||||
return -1;
|
||||
- }
|
||||
msg->hdr->length = host_to_be16(wpabuf_len(msg->buf));
|
||||
os_memcpy(msg->hdr->authenticator, req_authenticator,
|
||||
sizeof(msg->hdr->authenticator));
|
||||
- hmac_md5(secret, secret_len, wpabuf_head(msg->buf),
|
||||
- wpabuf_len(msg->buf), (u8 *) (attr + 1));
|
||||
+ if (hmac_md5(secret, secret_len, wpabuf_head(msg->buf),
|
||||
+ wpabuf_len(msg->buf), pos) < 0)
|
||||
+ return -1;
|
||||
|
||||
/* ResponseAuth = MD5(Code+ID+Length+RequestAuth+Attributes+Secret) */
|
||||
addr[0] = (u8 *) msg->hdr;
|
||||
@@ -442,21 +467,17 @@ int radius_msg_finish_das_resp(struct radius_msg *msg, const u8 *secret,
|
||||
{
|
||||
const u8 *addr[2];
|
||||
size_t len[2];
|
||||
- u8 auth[MD5_MAC_LEN];
|
||||
- struct radius_attr_hdr *attr;
|
||||
+ u8 *pos;
|
||||
|
||||
- os_memset(auth, 0, MD5_MAC_LEN);
|
||||
- attr = radius_msg_add_attr(msg, RADIUS_ATTR_MESSAGE_AUTHENTICATOR,
|
||||
- auth, MD5_MAC_LEN);
|
||||
- if (attr == NULL) {
|
||||
- wpa_printf(MSG_WARNING, "Could not add Message-Authenticator");
|
||||
+ pos = radius_msg_auth_pos(msg);
|
||||
+ if (!pos)
|
||||
return -1;
|
||||
- }
|
||||
|
||||
msg->hdr->length = host_to_be16(wpabuf_len(msg->buf));
|
||||
os_memcpy(msg->hdr->authenticator, req_hdr->authenticator, 16);
|
||||
- hmac_md5(secret, secret_len, wpabuf_head(msg->buf),
|
||||
- wpabuf_len(msg->buf), (u8 *) (attr + 1));
|
||||
+ if (hmac_md5(secret, secret_len, wpabuf_head(msg->buf),
|
||||
+ wpabuf_len(msg->buf), pos) < 0)
|
||||
+ return -1;
|
||||
|
||||
/* ResponseAuth = MD5(Code+ID+Length+RequestAuth+Attributes+Secret) */
|
||||
addr[0] = wpabuf_head_u8(msg->buf);
|
||||
diff --git a/src/radius/radius.h b/src/radius/radius.h
|
||||
index fb8148180..6b9dfbca2 100644
|
||||
--- a/src/radius/radius.h
|
||||
+++ b/src/radius/radius.h
|
||||
@@ -240,6 +240,7 @@ struct wpabuf * radius_msg_get_buf(struct radius_msg *msg);
|
||||
struct radius_msg * radius_msg_new(u8 code, u8 identifier);
|
||||
void radius_msg_free(struct radius_msg *msg);
|
||||
void radius_msg_dump(struct radius_msg *msg);
|
||||
+u8 * radius_msg_add_msg_auth(struct radius_msg *msg);
|
||||
int radius_msg_finish(struct radius_msg *msg, const u8 *secret,
|
||||
size_t secret_len);
|
||||
int radius_msg_finish_srv(struct radius_msg *msg, const u8 *secret,
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
From 54abb0d3cf35894e7d86e3f7555e95b106306803 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 16 Mar 2024 11:13:32 +0200
|
||||
Subject: [PATCH 3/9] RADIUS server: Place Message-Authenticator attribute as
|
||||
the first one
|
||||
|
||||
Move the Message-Authenticator attribute to be the first attribute in
|
||||
the RADIUS messages. This mitigates certain MD5 attacks against
|
||||
RADIUS/UDP.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
CVE: CVE-2024-3596
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=54abb0d3cf35894e7d86e3f7555e95b106306803]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
src/radius/radius_server.c | 15 +++++++++++++++
|
||||
1 file changed, 15 insertions(+)
|
||||
|
||||
diff --git a/src/radius/radius_server.c b/src/radius/radius_server.c
|
||||
index e02c21540..fa3691548 100644
|
||||
--- a/src/radius/radius_server.c
|
||||
+++ b/src/radius/radius_server.c
|
||||
@@ -920,6 +920,11 @@ radius_server_encapsulate_eap(struct radius_server_data *data,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+ if (!radius_msg_add_msg_auth(msg)) {
|
||||
+ radius_msg_free(msg);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
sess_id = htonl(sess->sess_id);
|
||||
if (code == RADIUS_CODE_ACCESS_CHALLENGE &&
|
||||
!radius_msg_add_attr(msg, RADIUS_ATTR_STATE,
|
||||
@@ -1204,6 +1209,11 @@ radius_server_macacl(struct radius_server_data *data,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+ if (!radius_msg_add_msg_auth(msg)) {
|
||||
+ radius_msg_free(msg);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
if (radius_msg_copy_attr(msg, request, RADIUS_ATTR_PROXY_STATE) < 0) {
|
||||
RADIUS_DEBUG("Failed to copy Proxy-State attribute(s)");
|
||||
radius_msg_free(msg);
|
||||
@@ -1253,6 +1263,11 @@ static int radius_server_reject(struct radius_server_data *data,
|
||||
return -1;
|
||||
}
|
||||
|
||||
+ if (!radius_msg_add_msg_auth(msg)) {
|
||||
+ radius_msg_free(msg);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
os_memset(&eapfail, 0, sizeof(eapfail));
|
||||
eapfail.code = EAP_CODE_FAILURE;
|
||||
eapfail.identifier = 0;
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
From 689a248260c9708e6c92cd8635382725a29e34ca Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 16 Mar 2024 11:16:12 +0200
|
||||
Subject: [PATCH 4/9] eapol_test: Move Message-Authenticator attribute to be
|
||||
the first one
|
||||
|
||||
Even if this is not strictly speaking necessary for mitigating certain
|
||||
RADIUS protocol attacks, be consistent with the RADIUS server behavior
|
||||
and move the Message-Authenticator attribute to be the first attribute
|
||||
in the message from RADIUS client.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
CVE: CVE-2024-3596
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=689a248260c9708e6c92cd8635382725a29e34ca]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
wpa_supplicant/eapol_test.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/wpa_supplicant/eapol_test.c b/wpa_supplicant/eapol_test.c
|
||||
index e256ac50e..57082e4b8 100644
|
||||
--- a/wpa_supplicant/eapol_test.c
|
||||
+++ b/wpa_supplicant/eapol_test.c
|
||||
@@ -194,6 +194,9 @@ static void ieee802_1x_encapsulate_radius(struct eapol_test_data *e,
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (!radius_msg_add_msg_auth(msg))
|
||||
+ goto fail;
|
||||
+
|
||||
radius_msg_make_authenticator(msg);
|
||||
|
||||
hdr = (const struct eap_hdr *) eap;
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
From 37fe8e48ab44d44fe3cf5dd8f52cb0a10be0cd17 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 16 Mar 2024 11:22:43 +0200
|
||||
Subject: [PATCH 5/9] hostapd: Move Message-Authenticator attribute to be the
|
||||
first one in req
|
||||
|
||||
Even if this is not strictly speaking necessary for mitigating certain
|
||||
RADIUS protocol attacks, be consistent with the RADIUS server behavior
|
||||
and move the Message-Authenticator attribute to be the first attribute
|
||||
in the message from RADIUS client in hostapd.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
CVE: CVE-2024-3596
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=37fe8e48ab44d44fe3cf5dd8f52cb0a10be0cd17]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
src/ap/ieee802_11_auth.c | 3 +++
|
||||
src/ap/ieee802_1x.c | 3 +++
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/src/ap/ieee802_11_auth.c b/src/ap/ieee802_11_auth.c
|
||||
index 47cc625be..2a950cf7f 100644
|
||||
--- a/src/ap/ieee802_11_auth.c
|
||||
+++ b/src/ap/ieee802_11_auth.c
|
||||
@@ -119,6 +119,9 @@ static int hostapd_radius_acl_query(struct hostapd_data *hapd, const u8 *addr,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
+ if (!radius_msg_add_msg_auth(msg))
|
||||
+ goto fail;
|
||||
+
|
||||
os_snprintf(buf, sizeof(buf), RADIUS_ADDR_FORMAT, MAC2STR(addr));
|
||||
if (!radius_msg_add_attr(msg, RADIUS_ATTR_USER_NAME, (u8 *) buf,
|
||||
os_strlen(buf))) {
|
||||
diff --git a/src/ap/ieee802_1x.c b/src/ap/ieee802_1x.c
|
||||
index 753c88335..89e3dd30e 100644
|
||||
--- a/src/ap/ieee802_1x.c
|
||||
+++ b/src/ap/ieee802_1x.c
|
||||
@@ -702,6 +702,9 @@ void ieee802_1x_encapsulate_radius(struct hostapd_data *hapd,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
+ if (!radius_msg_add_msg_auth(msg))
|
||||
+ goto fail;
|
||||
+
|
||||
if (sm->identity &&
|
||||
!radius_msg_add_attr(msg, RADIUS_ATTR_USER_NAME,
|
||||
sm->identity, sm->identity_len)) {
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
From f54157077f799d84ce26bed6ad6b01c4a16e31cf Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 16 Mar 2024 11:26:58 +0200
|
||||
Subject: [PATCH 6/9] RADIUS DAS: Move Message-Authenticator attribute to be
|
||||
the first one
|
||||
|
||||
Even if this might not be strictly speaking necessary for mitigating
|
||||
certain RADIUS protocol attacks, be consistent with the RADIUS server
|
||||
behavior and move the Message-Authenticator attribute to be the first
|
||||
attribute in the RADIUS DAS responses from hostapd.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
CVE: CVE-2024-3596
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=f54157077f799d84ce26bed6ad6b01c4a16e31cf]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
src/radius/radius_das.c | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git a/src/radius/radius_das.c b/src/radius/radius_das.c
|
||||
index aaa3fc267..8d7c9b4c4 100644
|
||||
--- a/src/radius/radius_das.c
|
||||
+++ b/src/radius/radius_das.c
|
||||
@@ -177,6 +177,11 @@ fail:
|
||||
if (reply == NULL)
|
||||
return NULL;
|
||||
|
||||
+ if (!radius_msg_add_msg_auth(reply)) {
|
||||
+ radius_msg_free(reply);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
if (error) {
|
||||
if (!radius_msg_add_attr_int32(reply, RADIUS_ATTR_ERROR_CAUSE,
|
||||
error)) {
|
||||
@@ -368,6 +373,11 @@ fail:
|
||||
if (!reply)
|
||||
return NULL;
|
||||
|
||||
+ if (!radius_msg_add_msg_auth(reply)) {
|
||||
+ radius_msg_free(reply);
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
if (error &&
|
||||
!radius_msg_add_attr_int32(reply, RADIUS_ATTR_ERROR_CAUSE, error)) {
|
||||
radius_msg_free(reply);
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
From 934b0c3a45ce0726560ccefbd992a9d385c36385 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sat, 16 Mar 2024 11:31:37 +0200
|
||||
Subject: [PATCH 7/9] Require Message-Authenticator in Access-Reject even
|
||||
without EAP-Message
|
||||
|
||||
Do not allow the exception for missing Message-Authenticator in
|
||||
Access-Reject without EAP-Message. While such exception is allowed in
|
||||
RADIUS definition, there is no strong reason to maintain this since
|
||||
Access-Reject is supposed to include EAP-Message and even if it doesn't,
|
||||
discarding Access-Reject will result in the connection not completing.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
CVE: CVE-2024-3596
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=934b0c3a45ce0726560ccefbd992a9d385c36385]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
src/ap/ieee802_1x.c | 11 +----------
|
||||
1 file changed, 1 insertion(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/ap/ieee802_1x.c b/src/ap/ieee802_1x.c
|
||||
index 89e3dd30e..6e7b75128 100644
|
||||
--- a/src/ap/ieee802_1x.c
|
||||
+++ b/src/ap/ieee802_1x.c
|
||||
@@ -1939,16 +1939,7 @@ ieee802_1x_receive_auth(struct radius_msg *msg, struct radius_msg *req,
|
||||
}
|
||||
sta = sm->sta;
|
||||
|
||||
- /* RFC 2869, Ch. 5.13: valid Message-Authenticator attribute MUST be
|
||||
- * present when packet contains an EAP-Message attribute */
|
||||
- if (hdr->code == RADIUS_CODE_ACCESS_REJECT &&
|
||||
- radius_msg_get_attr(msg, RADIUS_ATTR_MESSAGE_AUTHENTICATOR, NULL,
|
||||
- 0) < 0 &&
|
||||
- radius_msg_get_attr(msg, RADIUS_ATTR_EAP_MESSAGE, NULL, 0) < 0) {
|
||||
- wpa_printf(MSG_DEBUG,
|
||||
- "Allowing RADIUS Access-Reject without Message-Authenticator since it does not include EAP-Message");
|
||||
- } else if (radius_msg_verify(msg, shared_secret, shared_secret_len,
|
||||
- req, 1)) {
|
||||
+ if (radius_msg_verify(msg, shared_secret, shared_secret_len, req, 1)) {
|
||||
wpa_printf(MSG_INFO,
|
||||
"Incoming RADIUS packet did not have correct Message-Authenticator - dropped");
|
||||
return RADIUS_RX_INVALID_AUTHENTICATOR;
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
From 58097123ec5ea6f8276b38cb9b07669ec368a6c1 Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sun, 17 Mar 2024 10:42:56 +0200
|
||||
Subject: [PATCH 8/9] RADIUS: Require Message-Authenticator attribute in MAC
|
||||
ACL cases
|
||||
|
||||
hostapd required Message-Authenticator attribute to be included in EAP
|
||||
authentication cases, but that requirement was not in place for MAC ACL
|
||||
cases. Start requiring Message-Authenticator attribute for MAC ACL by
|
||||
default. Unlike the EAP case, this can still be disabled with
|
||||
radius_require_message_authenticator=1 to maintain compatibility with
|
||||
some RADIUS servers when used in a network where the connection to such
|
||||
a server is secure.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
CVE: CVE-2024-3596
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=58097123ec5ea6f8276b38cb9b07669ec368a6c1]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
src/ap/ap_config.c | 1 +
|
||||
src/ap/ap_config.h | 1 +
|
||||
src/ap/ieee802_11_auth.c | 4 +++-
|
||||
5 files changed, 19 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/ap/ap_config.c b/src/ap/ap_config.c
|
||||
index 86b6e097c..cf497a180 100644
|
||||
--- a/src/ap/ap_config.c
|
||||
+++ b/src/ap/ap_config.c
|
||||
@@ -120,6 +120,7 @@ void hostapd_config_defaults_bss(struct hostapd_bss_config *bss)
|
||||
#endif /* CONFIG_IEEE80211R_AP */
|
||||
|
||||
bss->radius_das_time_window = 300;
|
||||
+ bss->radius_require_message_authenticator = 1;
|
||||
|
||||
bss->anti_clogging_threshold = 5;
|
||||
bss->sae_sync = 5;
|
||||
diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h
|
||||
index 49cd3168a..22ad617f4 100644
|
||||
--- a/src/ap/ap_config.h
|
||||
+++ b/src/ap/ap_config.h
|
||||
@@ -302,6 +302,7 @@ struct hostapd_bss_config {
|
||||
struct hostapd_ip_addr own_ip_addr;
|
||||
char *nas_identifier;
|
||||
struct hostapd_radius_servers *radius;
|
||||
+ int radius_require_message_authenticator;
|
||||
int acct_interim_interval;
|
||||
int radius_request_cui;
|
||||
struct hostapd_radius_attr *radius_auth_req_attr;
|
||||
diff --git a/src/ap/ieee802_11_auth.c b/src/ap/ieee802_11_auth.c
|
||||
index 2a950cf7f..dab9bcde3 100644
|
||||
--- a/src/ap/ieee802_11_auth.c
|
||||
+++ b/src/ap/ieee802_11_auth.c
|
||||
@@ -474,7 +474,9 @@ hostapd_acl_recv_radius(struct radius_msg *msg, struct radius_msg *req,
|
||||
"Found matching Access-Request for RADIUS message (id=%d)",
|
||||
query->radius_id);
|
||||
|
||||
- if (radius_msg_verify(msg, shared_secret, shared_secret_len, req, 0)) {
|
||||
+ if (radius_msg_verify(
|
||||
+ msg, shared_secret, shared_secret_len, req,
|
||||
+ hapd->conf->radius_require_message_authenticator)) {
|
||||
wpa_printf(MSG_INFO,
|
||||
"Incoming RADIUS packet did not have correct authenticator - dropped");
|
||||
return RADIUS_RX_INVALID_AUTHENTICATOR;
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
From f302d9f9646704cce745734af21d540baa0da65f Mon Sep 17 00:00:00 2001
|
||||
From: Jouni Malinen <j@w1.fi>
|
||||
Date: Sun, 17 Mar 2024 10:47:58 +0200
|
||||
Subject: [PATCH 9/9] RADIUS: Check Message-Authenticator if it is present even
|
||||
if not required
|
||||
|
||||
Always check the Message-Authenticator attribute in a received RADIUS
|
||||
message if it is present. Previously, this would have been skipped if
|
||||
the attribute was not required to be present.
|
||||
|
||||
Signed-off-by: Jouni Malinen <j@w1.fi>
|
||||
|
||||
CVE: CVE-2024-3596
|
||||
Upstream-Status: Backport [https://w1.fi/cgit/hostap/commit/?id=f302d9f9646704cce745734af21d540baa0da65f]
|
||||
Signed-off-by: Peter Marko <peter.marko@siemens.com>
|
||||
---
|
||||
src/radius/radius.c | 14 ++++++++++++++
|
||||
1 file changed, 14 insertions(+)
|
||||
|
||||
diff --git a/src/radius/radius.c b/src/radius/radius.c
|
||||
index 2d2e00b5c..a0e3ce399 100644
|
||||
--- a/src/radius/radius.c
|
||||
+++ b/src/radius/radius.c
|
||||
@@ -879,6 +879,20 @@ int radius_msg_verify(struct radius_msg *msg, const u8 *secret,
|
||||
return 1;
|
||||
}
|
||||
|
||||
+ if (!auth) {
|
||||
+ u8 *pos;
|
||||
+ size_t alen;
|
||||
+
|
||||
+ if (radius_msg_get_attr_ptr(msg,
|
||||
+ RADIUS_ATTR_MESSAGE_AUTHENTICATOR,
|
||||
+ &pos, &alen, NULL) == 0) {
|
||||
+ /* Check the Message-Authenticator attribute since it
|
||||
+ * was included even if we are configured to not
|
||||
+ * require it. */
|
||||
+ auth = 1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (auth &&
|
||||
radius_msg_verify_msg_auth(msg, secret, secret_len,
|
||||
sent_msg->hdr->authenticator)) {
|
||||
--
|
||||
2.30.2
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
#!/bin/sh
|
||||
|
||||
|
||||
WPA_SUP_BIN="/usr/sbin/wpa_supplicant"
|
||||
WPA_SUP_PNAME="wpa_supplicant"
|
||||
WPA_SUP_PIDFILE="/var/run/wpa_supplicant.$IFACE.pid"
|
||||
WPA_COMMON_CTRL_IFACE="/var/run/wpa_supplicant"
|
||||
WPA_SUP_OPTIONS="-B -P $WPA_SUP_PIDFILE -i $IFACE"
|
||||
|
||||
VERBOSITY=0
|
||||
|
||||
|
||||
if [ -s "$IF_WPA_CONF" ]; then
|
||||
WPA_SUP_CONF="-c $IF_WPA_CONF"
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ ! -x "$WPA_SUP_BIN" ]; then
|
||||
|
||||
if [ "$VERBOSITY" = "1" ]; then
|
||||
echo "$WPA_SUP_PNAME: binaries not executable or missing from $WPA_SUP_BIN"
|
||||
fi
|
||||
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$MODE" = "start" ] ; then
|
||||
# driver type of interface, defaults to wext when undefined
|
||||
if [ -s "/etc/wpa_supplicant/driver.$IFACE" ]; then
|
||||
IF_WPA_DRIVER=$(cat "/etc/wpa_supplicant/driver.$IFACE")
|
||||
elif [ -z "$IF_WPA_DRIVER" ]; then
|
||||
|
||||
if [ "$VERBOSITY" = "1" ]; then
|
||||
echo "$WPA_SUP_PNAME: wpa-driver not provided, using \"wext\""
|
||||
fi
|
||||
|
||||
IF_WPA_DRIVER="wext"
|
||||
fi
|
||||
|
||||
# if we have passed the criteria, start wpa_supplicant
|
||||
if [ -n "$WPA_SUP_CONF" ]; then
|
||||
|
||||
if [ "$VERBOSITY" = "1" ]; then
|
||||
echo "$WPA_SUP_PNAME: $WPA_SUP_BIN $WPA_SUP_OPTIONS $WPA_SUP_CONF -D $IF_WPA_DRIVER"
|
||||
fi
|
||||
|
||||
start-stop-daemon --start --quiet \
|
||||
--name $WPA_SUP_PNAME --startas $WPA_SUP_BIN --pidfile $WPA_SUP_PIDFILE \
|
||||
-- $WPA_SUP_OPTIONS $WPA_SUP_CONF -D $IF_WPA_DRIVER
|
||||
fi
|
||||
|
||||
# if the interface socket exists, then wpa_supplicant was invoked successfully
|
||||
if [ -S "$WPA_COMMON_CTRL_IFACE/$IFACE" ]; then
|
||||
|
||||
if [ "$VERBOSITY" = "1" ]; then
|
||||
echo "$WPA_SUP_PNAME: ctrl_interface socket located at $WPA_COMMON_CTRL_IFACE/$IFACE"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
||||
fi
|
||||
|
||||
elif [ "$MODE" = "stop" ]; then
|
||||
|
||||
if [ -f "$WPA_SUP_PIDFILE" ]; then
|
||||
|
||||
if [ "$VERBOSITY" = "1" ]; then
|
||||
echo "$WPA_SUP_PNAME: terminating $WPA_SUP_PNAME daemon"
|
||||
fi
|
||||
|
||||
start-stop-daemon --stop --quiet \
|
||||
--name $WPA_SUP_PNAME --pidfile $WPA_SUP_PIDFILE
|
||||
|
||||
if [ -S "$WPA_COMMON_CTRL_IFACE/$IFACE" ]; then
|
||||
rm -f $WPA_COMMON_CTRL_IFACE/$IFACE
|
||||
fi
|
||||
|
||||
if [ -f "$WPA_SUP_PIDFILE" ]; then
|
||||
rm -f $WPA_SUP_PIDFILE
|
||||
fi
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,690 @@
|
||||
##### Example wpa_supplicant configuration file ###############################
|
||||
#
|
||||
# This file describes configuration file format and lists all available option.
|
||||
# Please also take a look at simpler configuration examples in 'examples'
|
||||
# subdirectory.
|
||||
#
|
||||
# Empty lines and lines starting with # are ignored
|
||||
|
||||
# NOTE! This file may contain password information and should probably be made
|
||||
# readable only by root user on multiuser systems.
|
||||
|
||||
# Note: All file paths in this configuration file should use full (absolute,
|
||||
# not relative to working directory) path in order to allow working directory
|
||||
# to be changed. This can happen if wpa_supplicant is run in the background.
|
||||
|
||||
# Whether to allow wpa_supplicant to update (overwrite) configuration
|
||||
#
|
||||
# This option can be used to allow wpa_supplicant to overwrite configuration
|
||||
# file whenever configuration is changed (e.g., new network block is added with
|
||||
# wpa_cli or wpa_gui, or a password is changed). This is required for
|
||||
# wpa_cli/wpa_gui to be able to store the configuration changes permanently.
|
||||
# Please note that overwriting configuration file will remove the comments from
|
||||
# it.
|
||||
#update_config=1
|
||||
|
||||
# global configuration (shared by all network blocks)
|
||||
#
|
||||
# Parameters for the control interface. If this is specified, wpa_supplicant
|
||||
# will open a control interface that is available for external programs to
|
||||
# manage wpa_supplicant. The meaning of this string depends on which control
|
||||
# interface mechanism is used. For all cases, the existence of this parameter
|
||||
# in configuration is used to determine whether the control interface is
|
||||
# enabled.
|
||||
#
|
||||
# For UNIX domain sockets (default on Linux and BSD): This is a directory that
|
||||
# will be created for UNIX domain sockets for listening to requests from
|
||||
# external programs (CLI/GUI, etc.) for status information and configuration.
|
||||
# The socket file will be named based on the interface name, so multiple
|
||||
# wpa_supplicant processes can be run at the same time if more than one
|
||||
# interface is used.
|
||||
# /var/run/wpa_supplicant is the recommended directory for sockets and by
|
||||
# default, wpa_cli will use it when trying to connect with wpa_supplicant.
|
||||
#
|
||||
# Access control for the control interface can be configured by setting the
|
||||
# directory to allow only members of a group to use sockets. This way, it is
|
||||
# possible to run wpa_supplicant as root (since it needs to change network
|
||||
# configuration and open raw sockets) and still allow GUI/CLI components to be
|
||||
# run as non-root users. However, since the control interface can be used to
|
||||
# change the network configuration, this access needs to be protected in many
|
||||
# cases. By default, wpa_supplicant is configured to use gid 0 (root). If you
|
||||
# want to allow non-root users to use the control interface, add a new group
|
||||
# and change this value to match with that group. Add users that should have
|
||||
# control interface access to this group. If this variable is commented out or
|
||||
# not included in the configuration file, group will not be changed from the
|
||||
# value it got by default when the directory or socket was created.
|
||||
#
|
||||
# When configuring both the directory and group, use following format:
|
||||
# DIR=/var/run/wpa_supplicant GROUP=wheel
|
||||
# DIR=/var/run/wpa_supplicant GROUP=0
|
||||
# (group can be either group name or gid)
|
||||
#
|
||||
# For UDP connections (default on Windows): The value will be ignored. This
|
||||
# variable is just used to select that the control interface is to be created.
|
||||
# The value can be set to, e.g., udp (ctrl_interface=udp)
|
||||
#
|
||||
# For Windows Named Pipe: This value can be used to set the security descriptor
|
||||
# for controlling access to the control interface. Security descriptor can be
|
||||
# set using Security Descriptor String Format (see http://msdn.microsoft.com/
|
||||
# library/default.asp?url=/library/en-us/secauthz/security/
|
||||
# security_descriptor_string_format.asp). The descriptor string needs to be
|
||||
# prefixed with SDDL=. For example, ctrl_interface=SDDL=D: would set an empty
|
||||
# DACL (which will reject all connections). See README-Windows.txt for more
|
||||
# information about SDDL string format.
|
||||
#
|
||||
ctrl_interface=/var/run/wpa_supplicant
|
||||
|
||||
# IEEE 802.1X/EAPOL version
|
||||
# wpa_supplicant is implemented based on IEEE Std 802.1X-2004 which defines
|
||||
# EAPOL version 2. However, there are many APs that do not handle the new
|
||||
# version number correctly (they seem to drop the frames completely). In order
|
||||
# to make wpa_supplicant interoperate with these APs, the version number is set
|
||||
# to 1 by default. This configuration value can be used to set it to the new
|
||||
# version (2).
|
||||
eapol_version=1
|
||||
|
||||
# AP scanning/selection
|
||||
# By default, wpa_supplicant requests driver to perform AP scanning and then
|
||||
# uses the scan results to select a suitable AP. Another alternative is to
|
||||
# allow the driver to take care of AP scanning and selection and use
|
||||
# wpa_supplicant just to process EAPOL frames based on IEEE 802.11 association
|
||||
# information from the driver.
|
||||
# 1: wpa_supplicant initiates scanning and AP selection
|
||||
# 0: driver takes care of scanning, AP selection, and IEEE 802.11 association
|
||||
# parameters (e.g., WPA IE generation); this mode can also be used with
|
||||
# non-WPA drivers when using IEEE 802.1X mode; do not try to associate with
|
||||
# APs (i.e., external program needs to control association). This mode must
|
||||
# also be used when using wired Ethernet drivers.
|
||||
# 2: like 0, but associate with APs using security policy and SSID (but not
|
||||
# BSSID); this can be used, e.g., with ndiswrapper and NDIS drivers to
|
||||
# enable operation with hidden SSIDs and optimized roaming; in this mode,
|
||||
# the network blocks in the configuration file are tried one by one until
|
||||
# the driver reports successful association; each network block should have
|
||||
# explicit security policy (i.e., only one option in the lists) for
|
||||
# key_mgmt, pairwise, group, proto variables
|
||||
ap_scan=1
|
||||
|
||||
# EAP fast re-authentication
|
||||
# By default, fast re-authentication is enabled for all EAP methods that
|
||||
# support it. This variable can be used to disable fast re-authentication.
|
||||
# Normally, there is no need to disable this.
|
||||
fast_reauth=1
|
||||
|
||||
# OpenSSL Engine support
|
||||
# These options can be used to load OpenSSL engines.
|
||||
# The two engines that are supported currently are shown below:
|
||||
# They are both from the opensc project (http://www.opensc.org/)
|
||||
# By default no engines are loaded.
|
||||
# make the opensc engine available
|
||||
#opensc_engine_path=/usr/lib/opensc/engine_opensc.so
|
||||
# make the pkcs11 engine available
|
||||
#pkcs11_engine_path=/usr/lib/opensc/engine_pkcs11.so
|
||||
# configure the path to the pkcs11 module required by the pkcs11 engine
|
||||
#pkcs11_module_path=/usr/lib/pkcs11/opensc-pkcs11.so
|
||||
|
||||
# Dynamic EAP methods
|
||||
# If EAP methods were built dynamically as shared object files, they need to be
|
||||
# loaded here before being used in the network blocks. By default, EAP methods
|
||||
# are included statically in the build, so these lines are not needed
|
||||
#load_dynamic_eap=/usr/lib/wpa_supplicant/eap_tls.so
|
||||
#load_dynamic_eap=/usr/lib/wpa_supplicant/eap_md5.so
|
||||
|
||||
# Driver interface parameters
|
||||
# This field can be used to configure arbitrary driver interace parameters. The
|
||||
# format is specific to the selected driver interface. This field is not used
|
||||
# in most cases.
|
||||
#driver_param="field=value"
|
||||
|
||||
# Maximum lifetime for PMKSA in seconds; default 43200
|
||||
#dot11RSNAConfigPMKLifetime=43200
|
||||
# Threshold for reauthentication (percentage of PMK lifetime); default 70
|
||||
#dot11RSNAConfigPMKReauthThreshold=70
|
||||
# Timeout for security association negotiation in seconds; default 60
|
||||
#dot11RSNAConfigSATimeout=60
|
||||
|
||||
# network block
|
||||
#
|
||||
# Each network (usually AP's sharing the same SSID) is configured as a separate
|
||||
# block in this configuration file. The network blocks are in preference order
|
||||
# (the first match is used).
|
||||
#
|
||||
# network block fields:
|
||||
#
|
||||
# disabled:
|
||||
# 0 = this network can be used (default)
|
||||
# 1 = this network block is disabled (can be enabled through ctrl_iface,
|
||||
# e.g., with wpa_cli or wpa_gui)
|
||||
#
|
||||
# id_str: Network identifier string for external scripts. This value is passed
|
||||
# to external action script through wpa_cli as WPA_ID_STR environment
|
||||
# variable to make it easier to do network specific configuration.
|
||||
#
|
||||
# ssid: SSID (mandatory); either as an ASCII string with double quotation or
|
||||
# as hex string; network name
|
||||
#
|
||||
# scan_ssid:
|
||||
# 0 = do not scan this SSID with specific Probe Request frames (default)
|
||||
# 1 = scan with SSID-specific Probe Request frames (this can be used to
|
||||
# find APs that do not accept broadcast SSID or use multiple SSIDs;
|
||||
# this will add latency to scanning, so enable this only when needed)
|
||||
#
|
||||
# bssid: BSSID (optional); if set, this network block is used only when
|
||||
# associating with the AP using the configured BSSID
|
||||
#
|
||||
# priority: priority group (integer)
|
||||
# By default, all networks will get same priority group (0). If some of the
|
||||
# networks are more desirable, this field can be used to change the order in
|
||||
# which wpa_supplicant goes through the networks when selecting a BSS. The
|
||||
# priority groups will be iterated in decreasing priority (i.e., the larger the
|
||||
# priority value, the sooner the network is matched against the scan results).
|
||||
# Within each priority group, networks will be selected based on security
|
||||
# policy, signal strength, etc.
|
||||
# Please note that AP scanning with scan_ssid=1 and ap_scan=2 mode are not
|
||||
# using this priority to select the order for scanning. Instead, they try the
|
||||
# networks in the order that used in the configuration file.
|
||||
#
|
||||
# mode: IEEE 802.11 operation mode
|
||||
# 0 = infrastructure (Managed) mode, i.e., associate with an AP (default)
|
||||
# 1 = IBSS (ad-hoc, peer-to-peer)
|
||||
# Note: IBSS can only be used with key_mgmt NONE (plaintext and static WEP)
|
||||
# and key_mgmt=WPA-NONE (fixed group key TKIP/CCMP). In addition, ap_scan has
|
||||
# to be set to 2 for IBSS. WPA-None requires following network block options:
|
||||
# proto=WPA, key_mgmt=WPA-NONE, pairwise=NONE, group=TKIP (or CCMP, but not
|
||||
# both), and psk must also be set.
|
||||
#
|
||||
# proto: list of accepted protocols
|
||||
# WPA = WPA/IEEE 802.11i/D3.0
|
||||
# RSN = WPA2/IEEE 802.11i (also WPA2 can be used as an alias for RSN)
|
||||
# If not set, this defaults to: WPA RSN
|
||||
#
|
||||
# key_mgmt: list of accepted authenticated key management protocols
|
||||
# WPA-PSK = WPA pre-shared key (this requires 'psk' field)
|
||||
# WPA-EAP = WPA using EAP authentication (this can use an external
|
||||
# program, e.g., Xsupplicant, for IEEE 802.1X EAP Authentication
|
||||
# IEEE8021X = IEEE 802.1X using EAP authentication and (optionally) dynamically
|
||||
# generated WEP keys
|
||||
# NONE = WPA is not used; plaintext or static WEP could be used
|
||||
# If not set, this defaults to: WPA-PSK WPA-EAP
|
||||
#
|
||||
# auth_alg: list of allowed IEEE 802.11 authentication algorithms
|
||||
# OPEN = Open System authentication (required for WPA/WPA2)
|
||||
# SHARED = Shared Key authentication (requires static WEP keys)
|
||||
# LEAP = LEAP/Network EAP (only used with LEAP)
|
||||
# If not set, automatic selection is used (Open System with LEAP enabled if
|
||||
# LEAP is allowed as one of the EAP methods).
|
||||
#
|
||||
# pairwise: list of accepted pairwise (unicast) ciphers for WPA
|
||||
# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
|
||||
# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
|
||||
# NONE = Use only Group Keys (deprecated, should not be included if APs support
|
||||
# pairwise keys)
|
||||
# If not set, this defaults to: CCMP TKIP
|
||||
#
|
||||
# group: list of accepted group (broadcast/multicast) ciphers for WPA
|
||||
# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
|
||||
# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
|
||||
# WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key
|
||||
# WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key [IEEE 802.11]
|
||||
# If not set, this defaults to: CCMP TKIP WEP104 WEP40
|
||||
#
|
||||
# psk: WPA preshared key; 256-bit pre-shared key
|
||||
# The key used in WPA-PSK mode can be entered either as 64 hex-digits, i.e.,
|
||||
# 32 bytes or as an ASCII passphrase (in which case, the real PSK will be
|
||||
# generated using the passphrase and SSID). ASCII passphrase must be between
|
||||
# 8 and 63 characters (inclusive).
|
||||
# This field is not needed, if WPA-EAP is used.
|
||||
# Note: Separate tool, wpa_passphrase, can be used to generate 256-bit keys
|
||||
# from ASCII passphrase. This process uses lot of CPU and wpa_supplicant
|
||||
# startup and reconfiguration time can be optimized by generating the PSK only
|
||||
# only when the passphrase or SSID has actually changed.
|
||||
#
|
||||
# eapol_flags: IEEE 802.1X/EAPOL options (bit field)
|
||||
# Dynamic WEP key required for non-WPA mode
|
||||
# bit0 (1): require dynamically generated unicast WEP key
|
||||
# bit1 (2): require dynamically generated broadcast WEP key
|
||||
# (3 = require both keys; default)
|
||||
# Note: When using wired authentication, eapol_flags must be set to 0 for the
|
||||
# authentication to be completed successfully.
|
||||
#
|
||||
# proactive_key_caching:
|
||||
# Enable/disable opportunistic PMKSA caching for WPA2.
|
||||
# 0 = disabled (default)
|
||||
# 1 = enabled
|
||||
#
|
||||
# wep_key0..3: Static WEP key (ASCII in double quotation, e.g. "abcde" or
|
||||
# hex without quotation, e.g., 0102030405)
|
||||
# wep_tx_keyidx: Default WEP key index (TX) (0..3)
|
||||
#
|
||||
# peerkey: Whether PeerKey negotiation for direct links (IEEE 802.11e DLS) is
|
||||
# allowed. This is only used with RSN/WPA2.
|
||||
# 0 = disabled (default)
|
||||
# 1 = enabled
|
||||
#peerkey=1
|
||||
#
|
||||
# Following fields are only used with internal EAP implementation.
|
||||
# eap: space-separated list of accepted EAP methods
|
||||
# MD5 = EAP-MD5 (unsecure and does not generate keying material ->
|
||||
# cannot be used with WPA; to be used as a Phase 2 method
|
||||
# with EAP-PEAP or EAP-TTLS)
|
||||
# MSCHAPV2 = EAP-MSCHAPv2 (cannot be used separately with WPA; to be used
|
||||
# as a Phase 2 method with EAP-PEAP or EAP-TTLS)
|
||||
# OTP = EAP-OTP (cannot be used separately with WPA; to be used
|
||||
# as a Phase 2 method with EAP-PEAP or EAP-TTLS)
|
||||
# GTC = EAP-GTC (cannot be used separately with WPA; to be used
|
||||
# as a Phase 2 method with EAP-PEAP or EAP-TTLS)
|
||||
# TLS = EAP-TLS (client and server certificate)
|
||||
# PEAP = EAP-PEAP (with tunnelled EAP authentication)
|
||||
# TTLS = EAP-TTLS (with tunnelled EAP or PAP/CHAP/MSCHAP/MSCHAPV2
|
||||
# authentication)
|
||||
# If not set, all compiled in methods are allowed.
|
||||
#
|
||||
# identity: Identity string for EAP
|
||||
# anonymous_identity: Anonymous identity string for EAP (to be used as the
|
||||
# unencrypted identity with EAP types that support different tunnelled
|
||||
# identity, e.g., EAP-TTLS)
|
||||
# password: Password string for EAP
|
||||
# ca_cert: File path to CA certificate file (PEM/DER). This file can have one
|
||||
# or more trusted CA certificates. If ca_cert and ca_path are not
|
||||
# included, server certificate will not be verified. This is insecure and
|
||||
# a trusted CA certificate should always be configured when using
|
||||
# EAP-TLS/TTLS/PEAP. Full path should be used since working directory may
|
||||
# change when wpa_supplicant is run in the background.
|
||||
# On Windows, trusted CA certificates can be loaded from the system
|
||||
# certificate store by setting this to cert_store://<name>, e.g.,
|
||||
# ca_cert="cert_store://CA" or ca_cert="cert_store://ROOT".
|
||||
# Note that when running wpa_supplicant as an application, the user
|
||||
# certificate store (My user account) is used, whereas computer store
|
||||
# (Computer account) is used when running wpasvc as a service.
|
||||
# ca_path: Directory path for CA certificate files (PEM). This path may
|
||||
# contain multiple CA certificates in OpenSSL format. Common use for this
|
||||
# is to point to system trusted CA list which is often installed into
|
||||
# directory like /etc/ssl/certs. If configured, these certificates are
|
||||
# added to the list of trusted CAs. ca_cert may also be included in that
|
||||
# case, but it is not required.
|
||||
# client_cert: File path to client certificate file (PEM/DER)
|
||||
# Full path should be used since working directory may change when
|
||||
# wpa_supplicant is run in the background.
|
||||
# Alternatively, a named configuration blob can be used by setting this
|
||||
# to blob://<blob name>.
|
||||
# private_key: File path to client private key file (PEM/DER/PFX)
|
||||
# When PKCS#12/PFX file (.p12/.pfx) is used, client_cert should be
|
||||
# commented out. Both the private key and certificate will be read from
|
||||
# the PKCS#12 file in this case. Full path should be used since working
|
||||
# directory may change when wpa_supplicant is run in the background.
|
||||
# Windows certificate store can be used by leaving client_cert out and
|
||||
# configuring private_key in one of the following formats:
|
||||
# cert://substring_to_match
|
||||
# hash://certificate_thumbprint_in_hex
|
||||
# for example: private_key="hash://63093aa9c47f56ae88334c7b65a4"
|
||||
# Note that when running wpa_supplicant as an application, the user
|
||||
# certificate store (My user account) is used, whereas computer store
|
||||
# (Computer account) is used when running wpasvc as a service.
|
||||
# Alternatively, a named configuration blob can be used by setting this
|
||||
# to blob://<blob name>.
|
||||
# private_key_passwd: Password for private key file (if left out, this will be
|
||||
# asked through control interface)
|
||||
# dh_file: File path to DH/DSA parameters file (in PEM format)
|
||||
# This is an optional configuration file for setting parameters for an
|
||||
# ephemeral DH key exchange. In most cases, the default RSA
|
||||
# authentication does not use this configuration. However, it is possible
|
||||
# setup RSA to use ephemeral DH key exchange. In addition, ciphers with
|
||||
# DSA keys always use ephemeral DH keys. This can be used to achieve
|
||||
# forward secrecy. If the file is in DSA parameters format, it will be
|
||||
# automatically converted into DH params.
|
||||
# subject_match: Substring to be matched against the subject of the
|
||||
# authentication server certificate. If this string is set, the server
|
||||
# sertificate is only accepted if it contains this string in the subject.
|
||||
# The subject string is in following format:
|
||||
# /C=US/ST=CA/L=San Francisco/CN=Test AS/emailAddress=as@example.com
|
||||
# altsubject_match: Semicolon separated string of entries to be matched against
|
||||
# the alternative subject name of the authentication server certificate.
|
||||
# If this string is set, the server sertificate is only accepted if it
|
||||
# contains one of the entries in an alternative subject name extension.
|
||||
# altSubjectName string is in following format: TYPE:VALUE
|
||||
# Example: EMAIL:server@example.com
|
||||
# Example: DNS:server.example.com;DNS:server2.example.com
|
||||
# Following types are supported: EMAIL, DNS, URI
|
||||
# phase1: Phase1 (outer authentication, i.e., TLS tunnel) parameters
|
||||
# (string with field-value pairs, e.g., "peapver=0" or
|
||||
# "peapver=1 peaplabel=1")
|
||||
# 'peapver' can be used to force which PEAP version (0 or 1) is used.
|
||||
# 'peaplabel=1' can be used to force new label, "client PEAP encryption",
|
||||
# to be used during key derivation when PEAPv1 or newer. Most existing
|
||||
# PEAPv1 implementation seem to be using the old label, "client EAP
|
||||
# encryption", and wpa_supplicant is now using that as the default value.
|
||||
# Some servers, e.g., Radiator, may require peaplabel=1 configuration to
|
||||
# interoperate with PEAPv1; see eap_testing.txt for more details.
|
||||
# 'peap_outer_success=0' can be used to terminate PEAP authentication on
|
||||
# tunneled EAP-Success. This is required with some RADIUS servers that
|
||||
# implement draft-josefsson-pppext-eap-tls-eap-05.txt (e.g.,
|
||||
# Lucent NavisRadius v4.4.0 with PEAP in "IETF Draft 5" mode)
|
||||
# include_tls_length=1 can be used to force wpa_supplicant to include
|
||||
# TLS Message Length field in all TLS messages even if they are not
|
||||
# fragmented.
|
||||
# sim_min_num_chal=3 can be used to configure EAP-SIM to require three
|
||||
# challenges (by default, it accepts 2 or 3)
|
||||
# phase2: Phase2 (inner authentication with TLS tunnel) parameters
|
||||
# (string with field-value pairs, e.g., "auth=MSCHAPV2" for EAP-PEAP or
|
||||
# "autheap=MSCHAPV2 autheap=MD5" for EAP-TTLS)
|
||||
# Following certificate/private key fields are used in inner Phase2
|
||||
# authentication when using EAP-TTLS or EAP-PEAP.
|
||||
# ca_cert2: File path to CA certificate file. This file can have one or more
|
||||
# trusted CA certificates. If ca_cert2 and ca_path2 are not included,
|
||||
# server certificate will not be verified. This is insecure and a trusted
|
||||
# CA certificate should always be configured.
|
||||
# ca_path2: Directory path for CA certificate files (PEM)
|
||||
# client_cert2: File path to client certificate file
|
||||
# private_key2: File path to client private key file
|
||||
# private_key2_passwd: Password for private key file
|
||||
# dh_file2: File path to DH/DSA parameters file (in PEM format)
|
||||
# subject_match2: Substring to be matched against the subject of the
|
||||
# authentication server certificate.
|
||||
# altsubject_match2: Substring to be matched against the alternative subject
|
||||
# name of the authentication server certificate.
|
||||
#
|
||||
# fragment_size: Maximum EAP fragment size in bytes (default 1398).
|
||||
# This value limits the fragment size for EAP methods that support
|
||||
# fragmentation (e.g., EAP-TLS and EAP-PEAP). This value should be set
|
||||
# small enough to make the EAP messages fit in MTU of the network
|
||||
# interface used for EAPOL. The default value is suitable for most
|
||||
# cases.
|
||||
#
|
||||
# EAP-PSK variables:
|
||||
# eappsk: 16-byte (128-bit, 32 hex digits) pre-shared key in hex format
|
||||
# nai: user NAI
|
||||
#
|
||||
# EAP-PAX variables:
|
||||
# eappsk: 16-byte (128-bit, 32 hex digits) pre-shared key in hex format
|
||||
#
|
||||
# EAP-SAKE variables:
|
||||
# eappsk: 32-byte (256-bit, 64 hex digits) pre-shared key in hex format
|
||||
# (this is concatenation of Root-Secret-A and Root-Secret-B)
|
||||
# nai: user NAI (PEERID)
|
||||
#
|
||||
# EAP-GPSK variables:
|
||||
# eappsk: Pre-shared key in hex format (at least 128 bits, i.e., 32 hex digits)
|
||||
# nai: user NAI (ID_Client)
|
||||
#
|
||||
# EAP-FAST variables:
|
||||
# pac_file: File path for the PAC entries. wpa_supplicant will need to be able
|
||||
# to create this file and write updates to it when PAC is being
|
||||
# provisioned or refreshed. Full path to the file should be used since
|
||||
# working directory may change when wpa_supplicant is run in the
|
||||
# background. Alternatively, a named configuration blob can be used by
|
||||
# setting this to blob://<blob name>
|
||||
# phase1: fast_provisioning=1 option enables in-line provisioning of EAP-FAST
|
||||
# credentials (PAC)
|
||||
#
|
||||
# wpa_supplicant supports number of "EAP workarounds" to work around
|
||||
# interoperability issues with incorrectly behaving authentication servers.
|
||||
# These are enabled by default because some of the issues are present in large
|
||||
# number of authentication servers. Strict EAP conformance mode can be
|
||||
# configured by disabling workarounds with eap_workaround=0.
|
||||
|
||||
# Example blocks:
|
||||
|
||||
# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
|
||||
network={
|
||||
ssid="simple"
|
||||
psk="very secret passphrase"
|
||||
priority=5
|
||||
}
|
||||
|
||||
# Same as previous, but request SSID-specific scanning (for APs that reject
|
||||
# broadcast SSID)
|
||||
network={
|
||||
ssid="second ssid"
|
||||
scan_ssid=1
|
||||
psk="very secret passphrase"
|
||||
priority=2
|
||||
}
|
||||
|
||||
# Only WPA-PSK is used. Any valid cipher combination is accepted.
|
||||
network={
|
||||
ssid="example"
|
||||
proto=WPA
|
||||
key_mgmt=WPA-PSK
|
||||
pairwise=CCMP TKIP
|
||||
group=CCMP TKIP WEP104 WEP40
|
||||
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
|
||||
priority=2
|
||||
}
|
||||
|
||||
# Only WPA-EAP is used. Both CCMP and TKIP is accepted. An AP that used WEP104
|
||||
# or WEP40 as the group cipher will not be accepted.
|
||||
network={
|
||||
ssid="example"
|
||||
proto=RSN
|
||||
key_mgmt=WPA-EAP
|
||||
pairwise=CCMP TKIP
|
||||
group=CCMP TKIP
|
||||
eap=TLS
|
||||
identity="user@example.com"
|
||||
ca_cert="/etc/cert/ca.pem"
|
||||
client_cert="/etc/cert/user.pem"
|
||||
private_key="/etc/cert/user.prv"
|
||||
private_key_passwd="password"
|
||||
priority=1
|
||||
}
|
||||
|
||||
# EAP-PEAP/MSCHAPv2 configuration for RADIUS servers that use the new peaplabel
|
||||
# (e.g., Radiator)
|
||||
network={
|
||||
ssid="example"
|
||||
key_mgmt=WPA-EAP
|
||||
eap=PEAP
|
||||
identity="user@example.com"
|
||||
password="foobar"
|
||||
ca_cert="/etc/cert/ca.pem"
|
||||
phase1="peaplabel=1"
|
||||
phase2="auth=MSCHAPV2"
|
||||
priority=10
|
||||
}
|
||||
|
||||
# EAP-TTLS/EAP-MD5-Challenge configuration with anonymous identity for the
|
||||
# unencrypted use. Real identity is sent only within an encrypted TLS tunnel.
|
||||
network={
|
||||
ssid="example"
|
||||
key_mgmt=WPA-EAP
|
||||
eap=TTLS
|
||||
identity="user@example.com"
|
||||
anonymous_identity="anonymous@example.com"
|
||||
password="foobar"
|
||||
ca_cert="/etc/cert/ca.pem"
|
||||
priority=2
|
||||
}
|
||||
|
||||
# EAP-TTLS/MSCHAPv2 configuration with anonymous identity for the unencrypted
|
||||
# use. Real identity is sent only within an encrypted TLS tunnel.
|
||||
network={
|
||||
ssid="example"
|
||||
key_mgmt=WPA-EAP
|
||||
eap=TTLS
|
||||
identity="user@example.com"
|
||||
anonymous_identity="anonymous@example.com"
|
||||
password="foobar"
|
||||
ca_cert="/etc/cert/ca.pem"
|
||||
phase2="auth=MSCHAPV2"
|
||||
}
|
||||
|
||||
# WPA-EAP, EAP-TTLS with different CA certificate used for outer and inner
|
||||
# authentication.
|
||||
network={
|
||||
ssid="example"
|
||||
key_mgmt=WPA-EAP
|
||||
eap=TTLS
|
||||
# Phase1 / outer authentication
|
||||
anonymous_identity="anonymous@example.com"
|
||||
ca_cert="/etc/cert/ca.pem"
|
||||
# Phase 2 / inner authentication
|
||||
phase2="autheap=TLS"
|
||||
ca_cert2="/etc/cert/ca2.pem"
|
||||
client_cert2="/etc/cer/user.pem"
|
||||
private_key2="/etc/cer/user.prv"
|
||||
private_key2_passwd="password"
|
||||
priority=2
|
||||
}
|
||||
|
||||
# Both WPA-PSK and WPA-EAP is accepted. Only CCMP is accepted as pairwise and
|
||||
# group cipher.
|
||||
network={
|
||||
ssid="example"
|
||||
bssid=00:11:22:33:44:55
|
||||
proto=WPA RSN
|
||||
key_mgmt=WPA-PSK WPA-EAP
|
||||
pairwise=CCMP
|
||||
group=CCMP
|
||||
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
|
||||
}
|
||||
|
||||
# Special characters in SSID, so use hex string. Default to WPA-PSK, WPA-EAP
|
||||
# and all valid ciphers.
|
||||
network={
|
||||
ssid=00010203
|
||||
psk=000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
|
||||
}
|
||||
|
||||
|
||||
# IEEE 802.1X/EAPOL with dynamically generated WEP keys (i.e., no WPA) using
|
||||
# EAP-TLS for authentication and key generation; require both unicast and
|
||||
# broadcast WEP keys.
|
||||
network={
|
||||
ssid="1x-test"
|
||||
key_mgmt=IEEE8021X
|
||||
eap=TLS
|
||||
identity="user@example.com"
|
||||
ca_cert="/etc/cert/ca.pem"
|
||||
client_cert="/etc/cert/user.pem"
|
||||
private_key="/etc/cert/user.prv"
|
||||
private_key_passwd="password"
|
||||
eapol_flags=3
|
||||
}
|
||||
|
||||
|
||||
# LEAP with dynamic WEP keys
|
||||
network={
|
||||
ssid="leap-example"
|
||||
key_mgmt=IEEE8021X
|
||||
eap=LEAP
|
||||
identity="user"
|
||||
password="foobar"
|
||||
}
|
||||
|
||||
# Plaintext connection (no WPA, no IEEE 802.1X)
|
||||
network={
|
||||
ssid="plaintext-test"
|
||||
key_mgmt=NONE
|
||||
}
|
||||
|
||||
|
||||
# Shared WEP key connection (no WPA, no IEEE 802.1X)
|
||||
network={
|
||||
ssid="static-wep-test"
|
||||
key_mgmt=NONE
|
||||
wep_key0="abcde"
|
||||
wep_key1=0102030405
|
||||
wep_key2="1234567890123"
|
||||
wep_tx_keyidx=0
|
||||
priority=5
|
||||
}
|
||||
|
||||
|
||||
# Shared WEP key connection (no WPA, no IEEE 802.1X) using Shared Key
|
||||
# IEEE 802.11 authentication
|
||||
network={
|
||||
ssid="static-wep-test2"
|
||||
key_mgmt=NONE
|
||||
wep_key0="abcde"
|
||||
wep_key1=0102030405
|
||||
wep_key2="1234567890123"
|
||||
wep_tx_keyidx=0
|
||||
priority=5
|
||||
auth_alg=SHARED
|
||||
}
|
||||
|
||||
|
||||
# IBSS/ad-hoc network with WPA-None/TKIP.
|
||||
network={
|
||||
ssid="test adhoc"
|
||||
mode=1
|
||||
proto=WPA
|
||||
key_mgmt=WPA-NONE
|
||||
pairwise=NONE
|
||||
group=TKIP
|
||||
psk="secret passphrase"
|
||||
}
|
||||
|
||||
|
||||
# Catch all example that allows more or less all configuration modes
|
||||
network={
|
||||
ssid="example"
|
||||
scan_ssid=1
|
||||
key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
|
||||
pairwise=CCMP TKIP
|
||||
group=CCMP TKIP WEP104 WEP40
|
||||
psk="very secret passphrase"
|
||||
eap=TTLS PEAP TLS
|
||||
identity="user@example.com"
|
||||
password="foobar"
|
||||
ca_cert="/etc/cert/ca.pem"
|
||||
client_cert="/etc/cert/user.pem"
|
||||
private_key="/etc/cert/user.prv"
|
||||
private_key_passwd="password"
|
||||
phase1="peaplabel=0"
|
||||
}
|
||||
|
||||
# Example of EAP-TLS with smartcard (openssl engine)
|
||||
network={
|
||||
ssid="example"
|
||||
key_mgmt=WPA-EAP
|
||||
eap=TLS
|
||||
proto=RSN
|
||||
pairwise=CCMP TKIP
|
||||
group=CCMP TKIP
|
||||
identity="user@example.com"
|
||||
ca_cert="/etc/cert/ca.pem"
|
||||
client_cert="/etc/cert/user.pem"
|
||||
|
||||
engine=1
|
||||
|
||||
# The engine configured here must be available. Look at
|
||||
# OpenSSL engine support in the global section.
|
||||
# The key available through the engine must be the private key
|
||||
# matching the client certificate configured above.
|
||||
|
||||
# use the opensc engine
|
||||
#engine_id="opensc"
|
||||
#key_id="45"
|
||||
|
||||
# use the pkcs11 engine
|
||||
engine_id="pkcs11"
|
||||
key_id="id_45"
|
||||
|
||||
# Optional PIN configuration; this can be left out and PIN will be
|
||||
# asked through the control interface
|
||||
pin="1234"
|
||||
}
|
||||
|
||||
# Example configuration showing how to use an inlined blob as a CA certificate
|
||||
# data instead of using external file
|
||||
network={
|
||||
ssid="example"
|
||||
key_mgmt=WPA-EAP
|
||||
eap=TTLS
|
||||
identity="user@example.com"
|
||||
anonymous_identity="anonymous@example.com"
|
||||
password="foobar"
|
||||
ca_cert="blob://exampleblob"
|
||||
priority=20
|
||||
}
|
||||
|
||||
blob-base64-exampleblob={
|
||||
SGVsbG8gV29ybGQhCg==
|
||||
}
|
||||
|
||||
|
||||
# Wildcard match for SSID (plaintext APs only). This example select any
|
||||
# open AP regardless of its SSID.
|
||||
network={
|
||||
key_mgmt=NONE
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
ctrl_interface=/var/run/wpa_supplicant
|
||||
ctrl_interface_group=0
|
||||
update_config=1
|
||||
|
||||
network={
|
||||
key_mgmt=NONE
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
SUMMARY = "Client for Wi-Fi Protected Access (WPA)"
|
||||
DESCRIPTION = "wpa_supplicant is a WPA Supplicant for Linux, BSD, Mac OS X, and Windows with support for WPA and WPA2 (IEEE 802.11i / RSN). Supplicant is the IEEE 802.1X/WPA component that is used in the client stations. It implements key negotiation with a WPA Authenticator and it controls the roaming and IEEE 802.11 authentication/association of the wlan driver."
|
||||
HOMEPAGE = "http://w1.fi/wpa_supplicant/"
|
||||
BUGTRACKER = "http://w1.fi/security/"
|
||||
SECTION = "network"
|
||||
LICENSE = "BSD-3-Clause"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=5ebcb90236d1ad640558c3d3cd3035df \
|
||||
file://README;beginline=1;endline=56;md5=e3d2f6c2948991e37c1ca4960de84747 \
|
||||
file://wpa_supplicant/wpa_supplicant.c;beginline=1;endline=12;md5=76306a95306fee9a976b0ac1be70f705"
|
||||
|
||||
DEPENDS = "dbus libnl"
|
||||
|
||||
SRC_URI = "http://w1.fi/releases/wpa_supplicant-${PV}.tar.gz \
|
||||
file://wpa-supplicant.sh \
|
||||
file://wpa_supplicant.conf \
|
||||
file://wpa_supplicant.conf-sane \
|
||||
file://99_wpa_supplicant \
|
||||
file://0001-build-Re-enable-options-for-libwpa_client.so-and-wpa.patch \
|
||||
file://0002-Fix-removal-of-wpa_passphrase-on-make-clean.patch \
|
||||
file://0001-Install-wpa_passphrase-when-not-disabled.patch \
|
||||
file://0001-PEAP-client-Update-Phase-2-authentication-requiremen.patch \
|
||||
file://CVE-2024-3596_00.patch \
|
||||
file://CVE-2024-3596_01.patch \
|
||||
file://CVE-2024-3596_02.patch \
|
||||
file://CVE-2024-3596_03.patch \
|
||||
file://CVE-2024-3596_04.patch \
|
||||
file://CVE-2024-3596_05.patch \
|
||||
file://CVE-2024-3596_06.patch \
|
||||
file://CVE-2024-3596_07.patch \
|
||||
file://CVE-2024-3596_08.patch \
|
||||
file://0001-SAE-Check-for-invalid-Rejected-Groups-element-length.patch \
|
||||
file://0002-SAE-Check-for-invalid-Rejected-Groups-element-length.patch \
|
||||
file://0003-SAE-Reject-invalid-Rejected-Groups-element-in-the-pa.patch \
|
||||
"
|
||||
SRC_URI[sha256sum] = "20df7ae5154b3830355f8ab4269123a87affdea59fe74fe9292a91d0d7e17b2f"
|
||||
|
||||
S = "${WORKDIR}/wpa_supplicant-${PV}"
|
||||
|
||||
inherit pkgconfig systemd
|
||||
|
||||
PACKAGECONFIG ?= "openssl"
|
||||
PACKAGECONFIG[gnutls] = ",,gnutls libgcrypt"
|
||||
PACKAGECONFIG[openssl] = ",,openssl"
|
||||
|
||||
CVE_PRODUCT = "wpa_supplicant"
|
||||
|
||||
CVE_STATUS[CVE-2024-5290] = "not-applicable-platform: this only affects Ubuntu and other platforms patching wpa-supplicant"
|
||||
|
||||
EXTRA_OEMAKE = "'LIBDIR=${libdir}' 'INCDIR=${includedir}' 'BINDIR=${sbindir}'"
|
||||
|
||||
do_configure () {
|
||||
${MAKE} -C wpa_supplicant clean
|
||||
sed -e '/^CONFIG_TLS=/d' <wpa_supplicant/defconfig >wpa_supplicant/.config
|
||||
|
||||
if ${@ bb.utils.contains('PACKAGECONFIG', 'openssl', 'true', 'false', d) }; then
|
||||
echo 'CONFIG_TLS=openssl' >>wpa_supplicant/.config
|
||||
elif ${@ bb.utils.contains('PACKAGECONFIG', 'gnutls', 'true', 'false', d) }; then
|
||||
echo 'CONFIG_TLS=gnutls' >>wpa_supplicant/.config
|
||||
sed -i -e 's/\(^CONFIG_DPP=\)/#\1/' \
|
||||
-e 's/\(^CONFIG_EAP_PWD=\)/#\1/' \
|
||||
-e 's/\(^CONFIG_SAE=\)/#\1/' wpa_supplicant/.config
|
||||
fi
|
||||
|
||||
# For rebuild
|
||||
rm -f wpa_supplicant/*.d wpa_supplicant/dbus/*.d
|
||||
}
|
||||
|
||||
do_compile () {
|
||||
oe_runmake -C wpa_supplicant
|
||||
if [ -z "${DISABLE_STATIC}" ]; then
|
||||
oe_runmake -C wpa_supplicant libwpa_client.a
|
||||
fi
|
||||
}
|
||||
|
||||
do_install () {
|
||||
oe_runmake -C wpa_supplicant DESTDIR="${D}" install
|
||||
|
||||
install -d ${D}${docdir}/wpa_supplicant
|
||||
install -m 644 wpa_supplicant/README ${WORKDIR}/wpa_supplicant.conf ${D}${docdir}/wpa_supplicant
|
||||
|
||||
install -d ${D}${sysconfdir}
|
||||
install -m 600 ${WORKDIR}/wpa_supplicant.conf-sane ${D}${sysconfdir}/wpa_supplicant.conf
|
||||
|
||||
install -d ${D}${sysconfdir}/network/if-pre-up.d/
|
||||
install -d ${D}${sysconfdir}/network/if-post-down.d/
|
||||
install -d ${D}${sysconfdir}/network/if-down.d/
|
||||
install -m 755 ${WORKDIR}/wpa-supplicant.sh ${D}${sysconfdir}/network/if-pre-up.d/wpa-supplicant
|
||||
ln -sf ../if-pre-up.d/wpa-supplicant ${D}${sysconfdir}/network/if-post-down.d/wpa-supplicant
|
||||
|
||||
install -d ${D}/${sysconfdir}/dbus-1/system.d
|
||||
install -m 644 ${S}/wpa_supplicant/dbus/dbus-wpa_supplicant.conf ${D}/${sysconfdir}/dbus-1/system.d
|
||||
install -d ${D}/${datadir}/dbus-1/system-services
|
||||
install -m 644 ${S}/wpa_supplicant/dbus/*.service ${D}/${datadir}/dbus-1/system-services
|
||||
|
||||
if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
|
||||
install -d ${D}/${systemd_system_unitdir}
|
||||
install -m 644 ${S}/wpa_supplicant/systemd/*.service ${D}/${systemd_system_unitdir}
|
||||
fi
|
||||
|
||||
install -d ${D}/etc/default/volatiles
|
||||
install -m 0644 ${WORKDIR}/99_wpa_supplicant ${D}/etc/default/volatiles
|
||||
|
||||
install -d ${D}${includedir}
|
||||
install -m 0644 ${S}/src/common/wpa_ctrl.h ${D}${includedir}
|
||||
|
||||
if [ -z "${DISABLE_STATIC}" ]; then
|
||||
install -d ${D}${libdir}
|
||||
install -m 0644 wpa_supplicant/libwpa_client.a ${D}${libdir}
|
||||
fi
|
||||
}
|
||||
|
||||
pkg_postinst:${PN} () {
|
||||
# If we're offline, we don't need to do this.
|
||||
if [ "x$D" = "x" ]; then
|
||||
killall -q -HUP dbus-daemon || true
|
||||
fi
|
||||
}
|
||||
|
||||
PACKAGE_BEFORE_PN += "${PN}-passphrase ${PN}-cli"
|
||||
PACKAGES =+ "${PN}-lib"
|
||||
PACKAGES += "${PN}-plugins"
|
||||
ALLOW_EMPTY:${PN}-plugins = "1"
|
||||
|
||||
PACKAGES_DYNAMIC += "^${PN}-plugin-.*$"
|
||||
NOAUTOPACKAGEDEBUG = "1"
|
||||
|
||||
FILES:${PN}-passphrase = "${sbindir}/wpa_passphrase"
|
||||
FILES:${PN}-cli = "${sbindir}/wpa_cli"
|
||||
FILES:${PN}-lib = "${libdir}/libwpa_client*${SOLIBSDEV}"
|
||||
FILES:${PN} += "${datadir}/dbus-1/system-services/* ${systemd_system_unitdir}/*"
|
||||
FILES:${PN}-dbg += "${sbindir}/.debug ${libdir}/.debug"
|
||||
|
||||
CONFFILES:${PN} += "${sysconfdir}/wpa_supplicant.conf"
|
||||
|
||||
RRECOMMENDS:${PN} = "${PN}-passphrase ${PN}-cli ${PN}-plugins"
|
||||
|
||||
SYSTEMD_SERVICE:${PN} = "wpa_supplicant.service"
|
||||
SYSTEMD_AUTO_ENABLE = "disable"
|
||||
|
||||
python split_wpa_supplicant_libs () {
|
||||
libdir = d.expand('${libdir}/wpa_supplicant')
|
||||
dbglibdir = os.path.join(libdir, '.debug')
|
||||
|
||||
split_packages = do_split_packages(d, libdir, r'^(.*)\.so', '${PN}-plugin-%s', 'wpa_supplicant %s plugin', prepend=True)
|
||||
split_dbg_packages = do_split_packages(d, dbglibdir, r'^(.*)\.so', '${PN}-plugin-%s-dbg', 'wpa_supplicant %s plugin - Debugging files', prepend=True, extra_depends='${PN}-dbg')
|
||||
|
||||
if split_packages:
|
||||
pn = d.getVar('PN')
|
||||
d.setVar('RRECOMMENDS:' + pn + '-plugins', ' '.join(split_packages))
|
||||
d.appendVar('RRECOMMENDS:' + pn + '-dbg', ' ' + ' '.join(split_dbg_packages))
|
||||
}
|
||||
PACKAGESPLITFUNCS += "split_wpa_supplicant_libs"
|
||||
Reference in New Issue
Block a user