Engineer working on a laptop connected to a device test rig, surrounded by wiring harnesses and test hardware

Firmware vulnerabilities & fixes

Hostapd and wpa_supplicant vulnerabilities in embedded firmware: identify, prioritise and fix

Last updated:

The hostapd and wpa_supplicant CVEs that matter most in Wi-Fi firmware are the 2017 KRACK key-reinstallation set, the 2019 Dragonblood SAE and EAP-pwd set, the WPS UPnP and Wi-Fi Direct (P2P) memory bugs, the PEAP and RADIUS fixes, and five 2026 advisories fixed in version 2.12. Whether each one applies depends on three things: the version, the build options (CONFIG_WPS, CONFIG_SAE, CONFIG_EAP_PWD, CONFIG_P2P, CONFIG_MESH) and the runtime configuration. Find all three in the image, rank by reachability, then upgrade, patch and switch off unused features.

Key takeaways

  • Because on Linux-based Wi-Fi products they are the code that handles every authentication frame.
  • Upstream publishes its own advisories at w1.fi/security, each with the affected versions, the build option and runtime setting that make it reachable, and the fixing commits.
  • Read the version from the binary, the build options from the build artefacts or the binary, and the enabled features from the configuration files, in that order.
  • Rank by reachability first: is the feature compiled in, is it enabled, and is the product an access point, a client or both?

Why do hostapd and wpa_supplicant matter in embedded firmware?

Because on Linux-based Wi-Fi products they are the code that handles every authentication frame. hostapd is the access point side: the hostapd project page describes it as a "user space daemon for access point and authentication servers" that implements the WPA/WPA2/WPA3 and EAP authenticators, a RADIUS client and an EAP server. wpa_supplicant is the client side, and it runs on Wi-Fi cameras, smart plugs, gateways in client mode, Android devices and routers acting as repeaters. Both come from the same hostap source tree and share the SAE, EAP and key-management code.

That position makes their bugs reachable over the air. Many of the issues below need nothing more than an attacker "in radio range", the phrase the upstream advisories use repeatedly, and no password. On OpenWrt and the vendor SDKs derived from it, both programs often ship as one combined binary: the OpenWrt hostapd package builds wpad variants described as an "Authenticator and Supplicant" in one package, so a router image can carry the client-side CVEs too.

Which hostapd and wpa_supplicant CVEs matter for routers and IoT devices?

Upstream publishes its own advisories at w1.fi/security, each with the affected versions, the build option and runtime setting that make it reachable, and the fixing commits. The table maps the main CVEs to those conditions. "AP" means hostapd (or wpa_supplicant in AP mode), "STA" means a wpa_supplicant client.

CVE(s) Issue Side Needs Fixed upstream in
CVE-2017-13082 KRACK: TK reinstall in FT handshake AP FT (802.11r) enabled 2.7 (patches for 2.6)
CVE-2017-13077 to -13081, -13087, -13088 KRACK: key reinstallation on the client STA WPA/WPA2 2.7 (patches for 2.6)
CVE-2018-14526 Unauthenticated EAPOL-Key decryption STA TKIP as pairwise cipher 2.7
CVE-2019-9494, -9495 Dragonblood cache side channels AP, STA CONFIG_SAE or CONFIG_EAP_PWD 2.8
CVE-2019-9496 SAE confirm NULL dereference (DoS) AP CONFIG_SAE 2.8
CVE-2019-9497, -9498, -9499 EAP-pwd reflection and invalid scalar/element AP, STA CONFIG_EAP_PWD; crypto library dependent 2.8
CVE-2019-11555 EAP-pwd fragment reassembly (DoS) AP, STA CONFIG_EAP_PWD 2.8
CVE-2019-13377 SAE/EAP-pwd Brainpool timing leak AP, STA Brainpool groups 28-30 enabled 2.9
CVE-2015-4141 WPS UPnP chunked encoding AP CONFIG_WPS_UPNP plus upnp_iface 2.5
CVE-2020-12695 WPS UPnP SUBSCRIBE (CallStranger) AP CONFIG_WPS_UPNP plus upnp_iface 2.10
CVE-2019-16275 PMF disconnection protection bypass AP PMF and user-space MLME 2.10
CVE-2021-0326, CVE-2021-27803 Wi-Fi Direct heap overflow, use-after-free STA CONFIG_P2P 2.10
CVE-2022-23303, -23304 Incomplete SAE/EAP-pwd side-channel fix AP, STA CONFIG_SAE or CONFIG_EAP_PWD 2.10
CVE-2023-52160 PEAP Phase 2 bypass STA PEAP without ca_cert 2.11
CVE-2026-58374 (w1.fi 2026-1) Wi-Fi 7 multi-link parsing AP, STA 2.11+; AP needs CONFIG_IEEE80211BE 2.12
CVE-2026-78807 (w1.fi 2026-2) PMKSA cache context check STA Driver-based PMKSA selection 2.12
w1.fi 2026-3, 2026-4 SAE H2E crash; mesh AMPE heap overflow STA CONFIG_SAE 2.10-2.11; CONFIG_MESH 2.12
w1.fi 2026-5 RADIUS Message-Authenticator length AP RADIUS configured Commit aa02cfa

KRACK (2017). The w1.fi 2017-1 advisory separates the two sides clearly. On hostapd, the TK reinstallation (CVE-2017-13082) applies only "where hostapd is used to operate an RSN/WPA2 network with FT (Fast BSS Transition from IEEE 802.11r) enabled", plus a related ANonce reuse during PTK rekeying that affects all hostapd versions. On wpa_supplicant, all versions were affected, and older ones worse: v2.4 and v2.5 "end up configuring an all-zero TK", which lets an attacker decrypt the client's frames. The researcher's KRACK site draws the same line for products: routers and access points "are only vulnerable to our attack if they support the Fast BSS Transition (FT) handshake, or if they support client (repeater) functionality." For IoT clients, every KRACK client CVE applies. CVE-2017-13084 (PeerKey) is the exception; upstream calls it "not applicable in practice."

Dragonblood (2019). Mathy Vanhoef and Eyal Ronen's Dragonblood research found side channels and implementation bugs in the Dragonfly handshake behind SAE (WPA3-Personal) and EAP-pwd. In hostapd and wpa_supplicant this produced several advisories: the SAE side-channel advisory states that the cache attack "requires the attacker to be able to run a program on the target device", which it notes "is not commonly the case on access points, so the most likely target for this would be a client device." The SAE confirm crash (CVE-2019-9496) is different: any attacker in radio range of a hostapd SAE network could terminate the process. The EAP-pwd commit-validation bugs depend on the crypto library; the 2019-4 advisory lists OpenSSL 1.0.2 or older, LibreSSL and wolfSSL as vulnerable to the invalid scalar/element attack, and OpenSSL 1.1.0 or newer as not vulnerable. The researchers later confirmed a Brainpool-curve timing leak (CVE-2019-13377) against the then-current hostapd release, and a further incomplete fix led to CVE-2022-23303 and -23304, fixed in 2.10.

WPS, P2P and EAP. Both WPS UPnP issues need UPnP compiled in and enabled: the 2020-1 advisory lists "CONFIG_WPS_UPNP=y" in the build and upnp_iface in the runtime configuration. The Wi-Fi Direct heap overflow in the 2020-2 advisory affects wpa_supplicant v1.0 to v2.9 with CONFIG_P2P and can lead to "potentially arbitrary code execution" from radio range. For enterprise clients, CVE-2023-52160 lets a rogue network skip PEAP Phase 2 when the client does not verify the server certificate; the wpa_supplicant 2.11 changelog answers it by making PEAP "require Phase 2 authentication by default (phase2_auth=1)".

The 2026 advisories. Five were published between June and August 2026. The 2026-1 advisory covers Wi-Fi 7 multi-link parsing in "hostapd v2.11 and newer snapshots ... before v2.12 with CONFIG_IEEE80211BE", reachable "without needing authentication or user action". The mesh AMPE advisory describes a write of "up to 239 bytes of attacker controlled data after the end of an allocated heap buffer", though only after a successful SAE mesh login. The RADIUS advisory 2026-5 applies to all hostapd versions with RADIUS configured. Advisories 2026-3, 2026-4 and 2026-5 list no CVE ID, so a scanner that matches by CVE alone will miss them.

How do you identify the hostapd and wpa_supplicant version and build options?

Read the version from the binary, the build options from the build artefacts or the binary, and the enabled features from the configuration files, in that order.

  1. Unpack the imageExtract the SquashFS, UBIFS or ext4 root file system. If parts will not unpack, our firmware entropy analysis guide covers telling encryption from compression.
  2. Find every binaryLook for hostapd, wpa_supplicant, and, on OpenWrt-style images, wpad, which provides both through symlinks. Vendor SDKs sometimes carry a second, older copy for a mesh or repeater mode.
  3. Read the versionwpa_supplicant embeds the literal string wpa_supplicant v2.x. hostapd prints its version through the format string hostapd v%s, so look for that string and the bare version number nearby. Upstream git snapshots carry a -devel suffix (the hostap tree's version.h reads 2.13-devel on 2026-11-11). OpenWrt builds from a git commit rather than a release: its current Makefile pins a snapshot dated 2026-08-07, the same day 2.12 was released, and the package version is derived from that snapshot, so map it to the hostap git history.
  4. Read the build optionsThe best evidence is the .config in the vendor's GPL source release, or the OpenWrt package variant recorded in the opkg database. In OpenWrt's Makefile, the "full" OpenSSL variant adds CONFIG_EAP_PWD and CONFIG_MESH, while the wpad-basic-mbedtls variant is described as a basic build with WPA-PSK, SAE, 802.11r and 802.11w support. Without build files, use the configuration parser: in hostapd's config_file.c, the keyword wps_state exists only with CONFIG_WPS, sae_password only with CONFIG_SAE, and pwd_group only with the EAP-pwd server, so their presence in strings output shows the feature was compiled in.
  5. Know the upstream defaultsThey point in opposite directions. The hostapd defconfig leaves CONFIG_WPS, CONFIG_WPS_UPNP, CONFIG_SAE and CONFIG_EAP_PWD commented out. The wpa_supplicant defconfig turns on CONFIG_WPS, CONFIG_SAE, CONFIG_EAP_PWD, CONFIG_P2P and CONFIG_IEEE80211BE, and leaves CONFIG_MESH off. A client built from defconfig therefore carries the P2P and EAP-pwd code paths even if the product never uses them.
  6. Read the runtime configurationIn hostapd.conf, record wpa_key_mgmt (FT-* entries mean 802.11r), wpa_pairwise (TKIP), sae_groups, sae_pwe, wps_state, upnp_iface, ieee80211w and auth_server_addr. In wpa_supplicant.conf, record key_mgmt, eap, ca_cert, phase2, p2p_disabled and any mesh networks. On OpenWrt the source of truth is /etc/config/wireless, from which these files are generated at runtime.
  7. Look for backportsThe version string is the upstream base, not the patch level. Debian builds both programs from one source package, wpa, and its security tracker shows that a backport cannot be assumed either way. bookworm's 2:2.10-12+deb12u3 carries fixes for older CVEs, yet the tracker lists CVE-2026-78807 as vulnerable in bookworm and trixie and fixed in unstable's 2:2.11-4. Conversely, CVE-2026-58374 is "not-affected" on 2.10 because the Wi-Fi 7 code arrived in 2.11. Vendor SDKs do the same, so check the patch directory in the GPL source.

The output is a short record per device: binary, version or snapshot, patch evidence, compiled-in features and enabled features. Our Yocto and Buildroot SBOM guide shows how to capture the same facts at build time, where they are exact.

How should you prioritise hostapd and wpa_supplicant CVEs?

Rank by reachability first: is the feature compiled in, is it enabled, and is the product an access point, a client or both? Then look at exploitation data, and use the CVSS base score only to break ties. Data as of 2026-11-10 (CISA KEV catalog version 2026.11.10, FIRST EPSS scores dated 2026-11-10):

CVE(s) In KEV EPSS (percentile) Typical priority
CVE-2020-12695 No 0.152 (96.8th) High if WPS UPnP is built in and upnp_iface is set; otherwise not affected
CVE-2021-0326, CVE-2021-27803 No 0.050 (92.3rd), 0.012 (69.1st) High on any client with CONFIG_P2P before 2.10: radio range, possible code execution
CVE-2019-9496, -9497 No 0.046 (91.8th), 0.050 (92.3rd) High on SAE or EAP-pwd access points before 2.8
CVE-2017-13082 No 0.046 (91.7th) High on APs with FT enabled; not affected without FT
CVE-2017-13077 to -13088 (client) No 0.017 to 0.024 (78th to 84th) High on IoT clients before 2.7, critical on 2.4 and 2.5 (all-zero key)
CVE-2026-58374 (2026-1) No 0.003 (22nd) High on Wi-Fi 7 builds of 2.11: unauthenticated crash from radio range
CVE-2023-52160 No 0.012 (67.8th) High on enterprise clients without ca_cert; low otherwise
CVE-2019-9494, -9495, CVE-2022-23303, -23304 No 0.021 to 0.039 (81st to 90th) Medium on clients, low on APs that run no third-party code
CVE-2026-78807 (2026-2), w1.fi 2026-3, 2026-4 No 0.001 (0.2nd) for CVE-2026-78807 Medium; 2026-4 only with mesh enabled

None of the CVEs above was in CISA's KEV catalog in its 2026.11.10 release. Two lessons stand out. First, EPSS does not know your build: CVE-2020-12695 scores highest, yet hostapd's defconfig leaves WPS UPnP off. Second, CVSS base scores can mislead in the other direction. NVD scores CVE-2022-23303 at 9.8, while the 2022-1 advisory says it needs an attacker "able to run unprivileged code on the same processor", which a locked-down access point rarely allows. Our KEV and EPSS prioritisation guide covers how the two signals combine, and CVSS v4 vs v3.1 explains why base scores need environmental context.

Device role changes the ranking. A home router without FT, WPS UPnP or repeater mode is outside most of the KRACK set, while a battery-powered sensor running wpa_supplicant 2.6 is exposed to all of it and may never get the update that closes it.

How do you fix hostapd and wpa_supplicant vulnerabilities in firmware?

Upgrade or patch, switch off features the product does not use, harden the configuration, then rebuild and re-scan.

Upgrade or patch. Version 2.12, released on 2026-08-07 according to the w1.fi release directory, contains the fixes for every advisory up to 2026-4; the wpa_supplicant ChangeLog lists the PMKSA caching, SAE and mesh AMPE fixes under v2.12. Advisory 2026-5 was published on 2026-08-17, after that release, and the newest release in the w1.fi directory on 2026-11-11 is still 2.12, so hostapd builds that use RADIUS also need commit aa02cfa569477f67f3915c8b9a83d1a7ca93693d. When a full upgrade is too large for one release cycle, each w1.fi advisory lists its fixing commits, and many ship patches rebased onto the release in use (2017-1 has a set for v2.6, 2026-1 a set for v2.11).

Disable unused features. Each row removes whole CVE groups from reach:

If the product does not need Do this Removes
Fast BSS Transition Remove FT-* entries from wpa_key_mgmt CVE-2017-13082
WPS external registrars Build without CONFIG_WPS_UPNP, or drop upnp_iface CVE-2015-4141, CVE-2020-12695
Wi-Fi Direct on a client Build without CONFIG_P2P, or set p2p_disabled=1 CVE-2021-0326, CVE-2021-27803
EAP-pwd Build without CONFIG_EAP_PWD CVE-2019-9495, -9497 to -9499, -11555, CVE-2022-23304
802.11s mesh Build without CONFIG_MESH w1.fi 2026-4
Wi-Fi 7 multi-link Build without CONFIG_IEEE80211BE on 2.11 CVE-2026-58374 on the AP side
TKIP Remove TKIP from the pairwise ciphers CVE-2018-14526

Unlike the rows above, SAE is a security feature to keep. Where it stays on, patch it, leave the weak MODP groups (1, 2, 5, 22, 23, 24) and the Brainpool groups (28-30) out of sae_groups, as the 2019-1 and 2019-6 advisories recommend, and require strong passwords; Dragonblood's transition-mode downgrade is a protocol design issue that a code patch does not remove.

Harden the configuration. On enterprise clients, set ca_cert and a server domain match so PEAP and TTLS verify the network, and keep phase2_auth=1. On access points, enable PMF (ieee80211w) where clients allow it. For EAP-pwd on an older base, link against OpenSSL 1.1.0 or newer, which the 2019-4 advisory lists as not vulnerable to the invalid-point attack; our OpenSSL vulnerabilities guide covers keeping that library current.

Rebuild, re-scan, release. Regenerate the firmware SBOM, compare it with the previous release, and confirm the new version, snapshot or patch level is what actually shipped; our firmware diffing and patch analysis guide covers the binary-level comparison. Then publish the result with affected versions, fixed version and the CVE and w1.fi advisory IDs. Where a build option rules a CVE out, record that in a VEX statement; our CSAF and VEX for device makers guide shows the format. The same router image usually ships dnsmasq and BusyBox too; see our guides on dnsmasq vulnerabilities and BusyBox vulnerabilities.

AI-assisted analysis: what SoftWSP actually runs

SoftWSP's automated scan unpacks a firmware image, catalogs the software components in the extracted file system, and identifies hostapd and wpa_supplicant by name and version. It then matches those versions against CVE records, CISA's KEV catalog and FIRST's EPSS scores. This is deterministic code: the code scores, and AI narrates.

AI's part is the written explanation on top of that matching. It summarises which hostapd and wpa_supplicant CVEs matched, which are KEV-listed or have a high EPSS score, and what the version evidence was, and every sentence cites the component, version and record it relies on. An engineer reviews every finding before the report is delivered. The judgements this guide describes as manual stay with that engineer: whether WPS UPnP, SAE, EAP-pwd, P2P or mesh are compiled in and switched on, whether the device acts as an access point, a client or both, and whether a vendor backport already closes a version-matched CVE. Advisories without a CVE ID, such as w1.fi 2026-3 to 2026-5, are also checked in that review, because version-to-CVE matching does not see them.

For where Wi-Fi stack review fits in a full assessment, see the OWASP Firmware Security Testing Methodology guide, or device & firmware security services to have a specific image reviewed.

This guide draws on the w1.fi hostapd and wpa_supplicant security advisories, ChangeLogs, defconfig files and source, the KRACK and Dragonblood research sites, the Debian Security Tracker, OpenWrt's hostapd package Makefile, NVD, CISA's KEV catalog (version 2026.11.10) and FIRST EPSS data dated 2026-11-10, all read directly on 2026-11-11.

Put this guide to work

Frequently asked questions

Which hostapd and wpa_supplicant CVEs matter most for routers, access points and IoT clients?

Five groups. The 2017 KRACK key-reinstallation set (CVE-2017-13077 to CVE-2017-13088) hits every wpa_supplicant client and, on the access point side, hostapd only with Fast BSS Transition (802.11r) enabled. The 2019 Dragonblood set (CVE-2019-9494 to CVE-2019-9499, CVE-2019-11555, CVE-2019-13377) affects SAE (WPA3-Personal) and EAP-pwd builds. WPS UPnP flaws (CVE-2015-4141, CVE-2020-12695) need CONFIG_WPS_UPNP and an upnp_iface setting. Wi-Fi Direct heap bugs (CVE-2021-0326, CVE-2021-27803) need CONFIG_P2P. The 2026 advisories cover Wi-Fi 7 multi-link parsing, PMKSA caching, SAE H2E, mesh and RADIUS. Which of them apply depends on the version, the build options and the runtime configuration.

How do I find the hostapd or wpa_supplicant version in a firmware image?

Unpack the root file system and run strings on the binaries. wpa_supplicant embeds the literal string "wpa_supplicant v2.x". hostapd prints its version through a "hostapd v%s" format string, so look for that string and the bare version number next to it. A "-devel" suffix means a git snapshot, not a release. On OpenWrt-based images, hostapd, wpa_supplicant or the combined wpad binary come from one package whose version is a git snapshot date, so map that date to the hostap git history rather than reading it as a 2.x release.

How can I tell which build options, such as CONFIG_WPS or CONFIG_SAE, are compiled in?

The best evidence is the build .config in the GPL source release or the OpenWrt package variant name. From the binary alone, hostapd's configuration parser only contains keywords for features that were compiled in: wps_state appears only with CONFIG_WPS, sae_password only with CONFIG_SAE, and pwd_group only with the EAP-pwd server. Upstream defaults differ by program: hostapd's defconfig leaves WPS, SAE and EAP-pwd off, while wpa_supplicant's defconfig turns WPS, SAE, EAP-pwd and P2P on.

Is upgrading to hostapd and wpa_supplicant 2.12 enough?

Almost. Version 2.12, released on 2026-08-07, contains the fixes for every advisory up to w1.fi 2026-4. Advisory 2026-5, a RADIUS Message-Authenticator length check in hostapd, was published on 2026-08-17, after 2.12, so a hostapd that uses RADIUS also needs commit aa02cfa569477f67f3915c8b9a83d1a7ca93693d. If a full upgrade is not possible, w1.fi publishes per-advisory patches, often rebased onto the release in use.

Does SoftWSP check hostapd and wpa_supplicant in my firmware?

SoftWSP's automated scan identifies hostapd and wpa_supplicant as components, with their versions, from the unpacked firmware file system, and matches those versions against CVE records, CISA's KEV catalog and FIRST EPSS scores. AI then writes a plain-language summary that cites the component, version and record behind every finding, and an engineer reviews it. Deciding which build options and runtime settings are active, and whether a vendor backport already closes a matched CVE, is part of that engineer review rather than an automatic verdict.

Sources

  1. hostapd and wpa_supplicant security advisories (w1.fi, 2014-1 to 2026-5)
  2. w1.fi advisory 2017-1: WPA packet number reuse with replayed messages and key reinstallation
  3. w1.fi advisory 2019-1: SAE side-channel attacks
  4. w1.fi advisory 2019-4: EAP-pwd missing commit validation
  5. w1.fi advisory 2020-1: UPnP SUBSCRIBE misbehavior in hostapd WPS AP
  6. w1.fi advisory 2020-2: wpa_supplicant P2P group information processing vulnerability
  7. w1.fi advisory 2022-1: SAE/EAP-pwd side-channel attack update 2
  8. w1.fi advisory 2026-1: Missing multi-link parsing validation in wpa_supplicant and hostapd
  9. w1.fi advisory 2026-4: Incomplete bounds checking of mesh AMPE messages in wpa_supplicant
  10. w1.fi advisory 2026-5: Incomplete RADIUS Message-Authenticator attribute validation in hostapd
  11. wpa_supplicant ChangeLog (v2.7 to v2.12)
  12. hostapd ChangeLog (v2.7 to v2.12)
  13. hostapd defconfig (hostap git tree)
  14. wpa_supplicant defconfig (hostap git tree)
  15. Mathy Vanhoef: Key Reinstallation Attacks (KRACK)
  16. Mathy Vanhoef and Eyal Ronen: Dragonblood, analysing WPA3's Dragonfly handshake
  17. Debian Security Tracker: source package wpa (hostapd and wpasupplicant)
  18. Debian Security Tracker: CVE-2026-78807
  19. Debian Security Tracker: CVE-2026-58374
  20. Debian Security Tracker: CVE-2023-52160
  21. OpenWrt: hostapd package Makefile (hostapd, wpa_supplicant and wpad variants)
  22. NIST NVD: CVE-2022-23303
  23. CISA: Known Exploited Vulnerabilities (KEV) Catalog
Was this guide helpful?

In this cluster

Hostapd and wpa_supplicant vulnerabilities in embedded firmware: identify, prioritise and fix