blob: 316c0700ce629fb7fc26e19363a7e71422b9aeac [file] [log] [blame]
Baruch Siachf6c2e552016-05-03 09:40:19 +03001From 73e4abb24a936014727924d8b0b2965edfc117dd Mon Sep 17 00:00:00 2001
2From: Jouni Malinen <jouni@qca.qualcomm.com>
3Date: Fri, 4 Mar 2016 18:46:41 +0200
4Subject: [PATCH] Reject psk parameter set with invalid passphrase character
5
6WPA/WPA2-Personal passphrase is not allowed to include control
7characters. Reject a passphrase configuration attempt if that passphrase
8includes an invalid passphrase.
9
10This fixes an issue where wpa_supplicant could have updated the
11configuration file psk parameter with arbitrary data from the control
12interface or D-Bus interface. While those interfaces are supposed to be
13accessible only for trusted users/applications, it may be possible that
14an untrusted user has access to a management software component that
15does not validate the passphrase value before passing it to
16wpa_supplicant.
17
18This could allow such an untrusted user to inject up to 63 characters of
19almost arbitrary data into the configuration file. Such configuration
20file could result in wpa_supplicant trying to load a library (e.g.,
21opensc_engine_path, pkcs11_engine_path, pkcs11_module_path,
22load_dynamic_eap) from user controlled location when starting again.
23This would allow code from that library to be executed under the
24wpa_supplicant process privileges.
25
26Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
27Signed-off-by: Baruch Siach <baruch@tkos.co.il>
28---
29Patch status: upstream (73e4abb24a936014727924d8b0b2965edfc117dd)
30
31 wpa_supplicant/config.c | 6 ++++++
32 1 file changed, 6 insertions(+)
33
34diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c
35index b1c7870dafe0..fdd964356afa 100644
36--- a/wpa_supplicant/config.c
37+++ b/wpa_supplicant/config.c
38@@ -478,6 +478,12 @@ static int wpa_config_parse_psk(const struct parse_data *data,
39 }
40 wpa_hexdump_ascii_key(MSG_MSGDUMP, "PSK (ASCII passphrase)",
41 (u8 *) value, len);
42+ if (has_ctrl_char((u8 *) value, len)) {
43+ wpa_printf(MSG_ERROR,
44+ "Line %d: Invalid passphrase character",
45+ line);
46+ return -1;
47+ }
48 if (ssid->passphrase && os_strlen(ssid->passphrase) == len &&
49 os_memcmp(ssid->passphrase, value, len) == 0) {
50 /* No change to the previously configured value */
51--
522.8.1
53