
Proof of Concept der Wi-Fi-Schwachstellen von ESP32/8266 (CVE-2019-12586, CVE-2019-12587, CVE-2019-12588)
Dieses Repository ist Teil eines Forschungsergebnisses der ASSET Research Group.

Dieses Repository demonstriert 3 Wi-Fi-Angriffe gegen die beliebten IoT-Geräte ESP32/8266:
Folgen Sie den Links zu jeder Schwachstelle für weitere Details und Espressifs Patches.
Diese Schwachstellen wurden in den SDKs von ESP32 und ESP8266 gefunden. Zum Zeitpunkt der Entdeckung waren deren Versionen ESP-IDF v4.0-dev-459-gba1ff1692 bzw. NONOS-SDK v3.0-103-g7a31cb7.
Während eine benutzerdefinierte Version von hostapd bereitgestellt wird, um die ersten beiden Schwachstellen zu testen, wird für die letzte ein ESP8266 verwendet, um gefälschte 802.11-Beacon-Frames zu injizieren und damit andere seiner Art zum Absturz zu bringen (kein Wortspiel beabsichtigt!).
Wenn Sie Debian oder Ubuntu verwenden, können Sie das bereits kompilierte hostapd im Ordner hostapd-2.8_binary ausführen. Führen Sie einfach hostapd-2.8_binary/run_hostapd_exploit.sh aus, um den Access Point zum Testen der Schwachstelle zu starten, oder hostapd-2.8_binary/run_zero_pmk_EAP.sh, um ohne diesen Test zu starten. Beachten Sie, dass Sie Netzwerkdienste mit service network-manager stop beenden müssen, damit Ihre Wi-Fi-Schnittstelle frei ist.
service network-manager stop
./run_zero_pmk_EAP.sh # to test against CVE-2019-12587 (remember to restart ESP first)
./run_crash_esp_EAP.sh # to test against CVE-2019-12586
Wenn die Binärdatei aus irgendeinem Grund auf Ihrem System nicht funktioniert, können Sie das Projekt hostapd-2.8_source kompilieren, indem Sie das Skript ./buid.sh ausführen. Das Skript installiert vor der Ausführung des Tools die folgenden Abhängigkeiten: build-essential pkg-config git libnl-genl-3-dev libssl-dev libnl-route-3-dev.
Nach erfolgreichem Build können Sie das Skript ./run_zero_pmk_EAP.sh ausführen, um den Access Point zum Testen der Schwachstelle zu starten, oder ./run_hostapd_normal.sh, um ohne den Test zu starten.
./build
./run_zero_pmk_EAP.sh # to test against CVE-2019-12587 (remember to restart ESP first)
./run_crash_esp_EAP.sh # to test against CVE-2019-12586
Um den Code für esp8266 im Ordner beacon_frame_crasher zu kompilieren, müssen Sie den Schritten in ESP8266 Deauther folgen. Dies ist eine modifizierte Version des Board-Support-Pakets für ESP8266, die das Injizieren roher 802.11-Frames ermöglicht. Eine Binärdatei wird ebenfalls für einen schnellen Test in beacon_frame_crasher/ESP8266Crasher.ino.d1_mini.bin bereitgestellt, falls Sie ein zusätzliches Wemos D1 Mini Board haben. Beachten Sie, dass dieser Code fest darauf ausgelegt ist, einen ESP8266 zum Absturz zu bringen, der für einen Access Point mit ssid=TEST_KRA konfiguriert ist. Sobald das „beacon frame crasher“-Gerät startet, sollten die anderen ESP8266-Geräte, die mit dem Access Point verbunden sind, in regelmäßigen Abständen neu starten.
Alternativ können Sie, wenn Ihre Wi-Fi-Hardware Monitoring und Injektion unterstützt, das Python-Skript ausführen:
sudo apt-get install -y aircrack-ng
sudo airmon-ng check kill
sudo airmon-ng wlan0 start # wlan0 is your wifi interface name
pip install scapy
python beacon_frame_crasher/ESP8266Crasher.py
Wenn Ihr ESP-Geräte-SDK anfällig für CVE-2019-12587 ist, sollten Sie eine Ausgabe wie diese von hostapd erhalten:

Wenn Ihr ESP-Geräte-SDK anfällig für CVE-2019-12586 ist, sollten Sie eine Ausgabe wie diese von hostapd erhalten:

In diesem Fall sollten Sie viele Protokolle erhalten, die eine erneute Verbindung anzeigen, da das Gerät bei jedem Verbindungsversuch mit hostapd neu startet. Wenn Sie den seriellen Port des Geräts überwachen, können Sie auch Trace-Logs erhalten.
Standardmäßig hat der PoC-Access-Point die folgende Standardkonfiguration:
Um diese Optionen zu ändern, ändern Sie die Datei hostapd.conf im Stammordner von hostapd (hostapd-2.8_binary/hostapd.conf oder hostapd-2.8_source/hostapd/hostapd.conf). Bitte ändern Sie den interface-Parameter so, dass er zu Ihrer Wi-Fi-Netzwerkkarte passt. Es wird empfohlen, die anderen Parameter als Standard zu belassen, wenn Sie die ESP32/8266-Client-Testcodes testen möchten. Korrekte Zertifikate sind ebenfalls enthalten (dieselben aus dem ESP-IDF-Repository), sodass Sie sie im hostapd-Ordner nicht ändern müssen.
Wenn Sie EAP-Methoden oder Benutzeranmeldeinformationen ändern möchten, ändern Sie einfach hostapd.eap_user
Überprüfen Sie, ob Ihre OpenSSL-Bibliothek die Verwendung von TLS-Version 1.0 erlaubt. Sie können diese Konfiguration normalerweise in /etc/ssl/openssl.cnf ändern, indem Sie die letzten Zeilen wie folgt ändern:
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
Die Codes zum Testen der anfälligen Geräte befinden sich im Ordner esp_client_test_codes.
ESP32_Arduino_EAP_Client und ESP8266_Arduino_EAP_Client können mit den jeweiligen Arduino-Board-Support-Paketen (arduino-esp32 und arduino-esp8266) kompiliert werden. Für die Nicht-Arduino-Codes sind ESP-IDF und ESP8266_NONOS_SDK erforderlich, um ESP8266_EAP_Client und ESP32_EAP_Client zu kompilieren. Beachten Sie, dass Sie dieselben oder früheren SDKs wie hier erwähnt verwenden müssen, um alle beschriebenen Schwachstellen auszulösen.
Diese Forschung wurde teilweise von Keysight Technologies unterstützt.