mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-30 17:43:42 +00:00
3e9f3a3ebd
AP mode PMF disconnection protection bypass Published: September 11, 2019 Identifiers: - CVE-2019-16275 Latest version available from: https://w1.fi/security/2019-7/ Vulnerability hostapd (and wpa_supplicant when controlling AP mode) did not perform sufficient source address validation for some received Management frames and this could result in ending up sending a frame that caused associated stations to incorrectly believe they were disconnected from the network even if management frame protection (also known as PMF) was negotiated for the association. This could be considered to be a denial of service vulnerability since PMF is supposed to protect from this type of issues. It should be noted that if PMF is not enabled, there would be no protocol level protection against this type of denial service attacks. An attacker in radio range of the access point could inject a specially constructed unauthenticated IEEE 802.11 frame to the access point to cause associated stations to be disconnected and require a reconnection to the network. Vulnerable versions/configurations All hostapd and wpa_supplicants versions with PMF support (CONFIG_IEEE80211W=y) and a runtime configuration enabled AP mode with PMF being enabled (optional or required). In addition, this would be applicable only when using user space based MLME/SME in AP mode, i.e., when hostapd (or wpa_supplicant when controlling AP mode) would process authentication and association management frames. This condition would be applicable mainly with drivers that use mac80211. Possible mitigation steps - Merge the following commit to wpa_supplicant/hostapd and rebuild: AP: Silently ignore management frame from unexpected source address This patch is available from https://w1.fi/security/2019-7/ - Update to wpa_supplicant/hostapd v2.10 or newer, once available
87 lines
2.5 KiB
Nix
87 lines
2.5 KiB
Nix
{ stdenv, fetchurl, pkgconfig, libnl, openssl, sqlite ? null }:
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "hostapd";
|
|
version = "2.9";
|
|
|
|
src = fetchurl {
|
|
url = "https://w1.fi/releases/${pname}-${version}.tar.gz";
|
|
sha256 = "1mrbvg4v7vm7mknf0n29mf88k3s4a4qj6r4d51wq8hmjj1m7s7c8";
|
|
};
|
|
|
|
nativeBuildInputs = [ pkgconfig ];
|
|
buildInputs = [ libnl openssl sqlite ];
|
|
|
|
patches = [
|
|
(fetchurl {
|
|
# Note: fetchurl seems to be unhappy with openwrt git
|
|
# server's URLs containing semicolons. Using the github mirror instead.
|
|
url = "https://raw.githubusercontent.com/openwrt/openwrt/master/package/network/services/hostapd/patches/300-noscan.patch";
|
|
sha256 = "04wg4yjc19wmwk6gia067z99gzzk9jacnwxh5wyia7k5wg71yj5k";
|
|
})
|
|
(fetchurl {
|
|
name = "CVE-2019-16275.patch";
|
|
url = "https://w1.fi/security/2019-7/0001-AP-Silently-ignore-management-frame-from-unexpected-.patch";
|
|
sha256 = "15xjyy7crb557wxpx898b5lnyblxghlij0xby5lmj9hpwwss34dz";
|
|
})
|
|
];
|
|
|
|
outputs = [ "out" "man" ];
|
|
|
|
extraConfig = ''
|
|
CONFIG_DRIVER_WIRED=y
|
|
CONFIG_LIBNL32=y
|
|
CONFIG_EAP_SIM=y
|
|
CONFIG_EAP_AKA=y
|
|
CONFIG_EAP_AKA_PRIME=y
|
|
CONFIG_EAP_PAX=y
|
|
CONFIG_EAP_PWD=y
|
|
CONFIG_EAP_SAKE=y
|
|
CONFIG_EAP_GPSK=y
|
|
CONFIG_EAP_GPSK_SHA256=y
|
|
CONFIG_EAP_FAST=y
|
|
CONFIG_EAP_IKEV2=y
|
|
CONFIG_EAP_TNC=y
|
|
CONFIG_EAP_EKE=y
|
|
CONFIG_RADIUS_SERVER=y
|
|
CONFIG_IEEE80211R=y
|
|
CONFIG_IEEE80211N=y
|
|
CONFIG_IEEE80211AC=y
|
|
CONFIG_FULL_DYNAMIC_VLAN=y
|
|
CONFIG_VLAN_NETLINK=y
|
|
CONFIG_TLS=openssl
|
|
CONFIG_TLSV11=y
|
|
CONFIG_TLSV12=y
|
|
CONFIG_INTERNETWORKING=y
|
|
CONFIG_HS20=y
|
|
CONFIG_ACS=y
|
|
CONFIG_GETRANDOM=y
|
|
'' + stdenv.lib.optionalString (sqlite != null) ''
|
|
CONFIG_SQLITE=y
|
|
'';
|
|
|
|
configurePhase = ''
|
|
cd hostapd
|
|
cp -v defconfig .config
|
|
echo "$extraConfig" >> .config
|
|
cat -n .config
|
|
substituteInPlace Makefile --replace /usr/local $out
|
|
export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config --cflags libnl-3.0)"
|
|
'';
|
|
|
|
preInstall = "mkdir -p $out/bin";
|
|
postInstall = ''
|
|
install -vD hostapd.8 -t $man/share/man/man8
|
|
install -vD hostapd_cli.1 -t $man/share/man/man1
|
|
'';
|
|
|
|
meta = with stdenv.lib; {
|
|
homepage = "https://hostap.epitest.fi";
|
|
repositories.git = "git://w1.fi/hostap.git";
|
|
description = "A user space daemon for access point and authentication servers";
|
|
license = licenses.gpl2;
|
|
maintainers = with maintainers; [ phreedom ninjatrappeur ];
|
|
platforms = platforms.linux;
|
|
};
|
|
}
|