Evil Twin EAP-TLS
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
EAP-TLS jest powszechnym „bezpiecznym” wyborem dla WPA2/3-Enterprise, ale podczas ocen regularnie pojawiają się dwie praktyczne słabości:
- Unauthenticated identity leakage: zewnętrzny EAP-Response/Identity jest wysyłany w postaci jawnego tekstu zanim zostanie zbudowany tunel TLS, więc prawdziwe nazwy użytkowników domeny często leakują w eterze.
- Broken client server-validation: jeśli supplicant nie weryfikuje rygorystycznie certyfikatu serwera RADIUS (lub pozwala użytkownikom przepuścić ostrzeżenia klikając dalej), rogue AP z self-signed cert nadal może onboardować ofiary – zamieniając mutual TLS w one-way TLS.
Nieuwierzytelnione ujawnianie tożsamości EAP / enumeracja nazw użytkowników
EAP przeprowadza wymianę tożsamości przed rozpoczęciem TLS. Jeśli klient używa prawdziwej nazwy użytkownika domeny jako swojej zewnętrznej tożsamości, każdy w zasięgu RF może ją zebrać bez uwierzytelniania.
Proces pasywnego zbierania
# 1) Park on the right channel/BSSID
airodump-ng -i $IFACE -c $CHAN --bssid $BSSID
# 2) Decode EAP frames and extract identities
# Trigger a client connection (e.g., your phone) to see the leak
tshark -i "$IFACE" -Y eap -V | grep "Identity: *[a-z]\|*[A-Z]\|*[0-9]"
Impact: szybkie, bezautoryzacyjne zbieranie nazw użytkowników → napędza password spraying, phishing i korelację kont. Gorzej, gdy nazwy użytkowników odpowiadają adresom e-mail.
TLS 1.3 privacy vs downgrade games
TLS 1.3 szyfruje certyfikaty klienta i większość metadanych handshake, więc gdy supplicant rzeczywiście negocjuje TLS 1.3, Evil Twin nie może pasywnie poznać certyfikatu/tożsamości klienta. Wiele enterprise stacków nadal dopuszcza TLS 1.2 dla kompatybilności; RFC 9190 ostrzega, że rogue AP może zaoferować tylko TLS 1.2 static-RSA suites, aby wymusić fallback i ponownie ujawnić outer identity (a nawet cert klienta) w cleartext EAP-TLS.
Offensive playbook (downgrade to leak ID):
- Skompiluj hostapd-wpe z włączonymi tylko TLS 1.2 static RSA ciphers i z wyłączonym TLS 1.3 w
openssl_ciphersuite/ssl_ctx_flags. - Reklamuj corporate SSID; kiedy ofiara zainicjuje TLS 1.3, odpowiedz alertem TLS i zrestartuj handshake, aby peer spróbował ponownie z TLS 1.2, ujawniając swoją prawdziwą tożsamość zanim walidacja certyfikatu się powiedzie.
- Połącz to z
force_authorized=1w hostapd-wpe, by 4-way handshake zakończył się nawet gdy client-auth zawiedzie, dając ruch na poziomie DHCP/DNS do phishowania lub portal.
Defensive toggle (what to look for during an assessment):
- hostapd/wpa_supplicant 2.10 dodał wsparcie EAP-TLS zarówno po stronie serwera, jak i peer dla TLS 1.3, ale jest ono wyłączone domyślnie; włączenie go na klientach z
phase1="tls_disable_tlsv1_3=0"usuwa okno downgrade.
TLS 1.3 realities in 2024–2025
- FreeRADIUS 3.0.23+ akceptuje EAP-TLS 1.3, ale klienci nadal zawodzą (Windows 11 nie ma wznowienia sesji EAP-TLS 1.3, wsparcie na Androidzie jest zróżnicowane), więc wiele wdrożeń przypina
tls_max_version = "1.2"dla stabilności. - Windows 11 włącza EAP-TLS 1.3 domyślnie (22H2+), jednak nieudane wznowienia i niestabilne stosy RADIUS często wymuszają fallback do TLS 1.2.
- Wymiana klucza RSA dla TLS 1.2 jest wycofywana; OpenSSL 3.x usuwa static-RSA suites przy security level ≥2, więc rogue TLS 1.2 static-RSA potrzebuje OpenSSL 1.1.1 z
@SECLEVEL=0lub starszego.
Praktyczne sterowanie wersją podczas działania
- Force TLS 1.2 on the rogue (to leak identities):
# hostapd-wpe.conf
ssl_ctx_flags=0
openssl_ciphers=RSA+AES:@SECLEVEL=0 # requires OpenSSL 1.1.1
disable_tlsv1_3=1
- Probe client TLS intolerance: uruchom dwa rogue – jeden reklamujący TLS 1.3-only (
disable_tlsv1=1,disable_tlsv1_1=1,disable_tlsv1_2=1) i jeden TLS 1.2-only. Klienci, którzy łączą się tylko z BSS 1.2, są podatni na downgrade. - Watch for fallback in captures: filtrować w Wiresharku
tls.handshake.version==0x0303po początkowymClientHellozsupported_versionszawierającym 0x0304; ofiary które ponawiają próbę z 0x0303 ponownie leakingują swoje outer ID.
Evil Twin via broken server validation (“mTLS?”)
Rogue APs nadawające corporate SSID mogą przedstawić dowolny certyfikat. Jeśli klient:
- nie weryfikuje certyfikatu serwera, lub
- prosi użytkownika i pozwala na nadpisanie nieufanych CAs/self-signed certs,
to EAP-TLS przestaje być mutual. Zmieniony hostapd/hostapd-wpe, który pomija walidację certyfikatu klienta (np.
SSL_set_verify(..., 0)) wystarczy, by postawić Evil Twin.
Rogue infra quick note
Na nowszym Kali skompiluj hostapd-wpe używając hostapd-2.6 (z https://w1.fi/releases/) i najpierw zainstaluj legacy OpenSSL headers:
apt-get install libssl1.0-dev
# patch hostapd-wpe to set verify_peer=0 in SSL_set_verify to accept any client cert
Windows supplicant misconfig pitfalls (GUI/GPO)
Key knobs from the Windows EAP-TLS profile:
- Verify the server’s identity by validating the certificate
- Zaznaczone → łańcuch musi być zaufany; niezaznaczone → akceptowany jest każdy samopodpisany certyfikat.
- Connect to these servers
- Puste → akceptowany jest każdy cert od zaufanej CA; ustaw listę CN/SAN, aby przypiąć oczekiwane nazwy RADIUS.
- Don’t prompt user to authorise new servers or trusted certification authorities
- Zaznaczone → użytkownicy nie mogą kliknąć dalej; niezaznaczone → użytkownik może zaufać niezaufanej CA/certyfikatowi i dołączyć do rogue AP.
Observed outcomes:
- Strict validation + no prompts → rogue cert rejected; Windows logs an event and TLS fails (good detection signal).
- Validation + user prompt → user acceptance = successful Evil Twin association.
- No validation → silent Evil Twin association with any cert.
Źródła
- EAP-TLS: The most secure option? (NCC Group)
- EAP-TLS wireless infrastructure (Versprite hostapd bypass)
- RFC 4282 - Network Access Identifier
- Microsoft ServerValidationParameters (WLAN profile)
- RFC 9190 – EAP-TLS 1.3
- hostapd/wpa_supplicant 2.10 release notes (TLS 1.3 EAP-TLS support)
- FreeRADIUS TLS 1.3 support thread (Nov 2024)
- Windows 11 enabling TLS 1.3 for EAP (SecurityBoulevard, Jan 2024)
- draft-ietf-tls-deprecate-obsolete-kex
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.


