
Preuve de concept des vulnérabilités Wi-Fi ESP32/8266 (CVE-2019-12586, CVE-2019-12587, CVE-2019-12588)
Ce dépôt fait partie d'un résultat de recherche du ASSET Research Group.

Ce dépôt démontre 3 attaques Wi-Fi contre les populaires appareils IoT ESP32/8266 :
Suivez les liens sur chaque vulnérabilité pour plus de détails et les correctifs d'Espressif.
Ces vulnérabilités ont été trouvées dans les SDK des ESP32 et ESP8266. Leurs versions étaient respectivement ESP-IDF v4.0-dev-459-gba1ff1692 et NONOS-SDK v3.0-103-g7a31cb7 au moment de la découverte.
Bien qu'une version personnalisée de hostapd soit fournie pour tester les 2 premières vulnérabilités, pour la dernière, un ESP8266 est utilisé pour injecter de fausses trames de balise 802.11 afin de faire planter d'autres de ses propres (jeu de mots involontaire !).
Si vous utilisez Debian ou Ubuntu, vous pouvez exécuter le hostapd déjà compilé dans le dossier hostapd-2.8_binary. Exécutez simplement hostapd-2.8_binary/run_hostapd_exploit.sh pour démarrer le point d'accès afin de tester la vulnérabilité ou hostapd-2.8_binary/run_zero_pmk_EAP.sh pour démarrer sans ce test. Notez que vous devez arrêter les services réseau avec service network-manager stop pour libérer votre interface Wi-Fi.
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
Si pour une raison quelconque le binaire ne fonctionne pas avec votre système, vous pouvez compiler le projet hostapd-2.8_source en exécutant le script ./buid.sh. Le script installe les dépendances suivantes avant d'exécuter l'outil : build-essential pkg-config git libnl-genl-3-dev libssl-dev libnl-route-3-dev.
Après une compilation réussie, vous pouvez exécuter le script ./run_zero_pmk_EAP.sh pour démarrer le point d'accès afin de tester la vulnérabilité ou ./run_hostapd_normal.sh pour démarrer sans le test.
./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
Afin de compiler le code pour esp8266 dans le dossier beacon_frame_crasher, il est nécessaire de suivre les étapes dans ESP8266 Deauther. Il s'agit d'une version modifiée du package de support de carte pour ESP8266 qui permet l'injection de trames 802.11 brutes. Un binaire est également fourni pour un test rapide dans beacon_frame_crasher/ESP8266Crasher.ino.d1_mini.bin au cas où vous auriez une carte wemos d1 mini de rechange. Notez que ce code est codé en dur pour faire planter un ESP8266 configuré pour un point d'accès avec un ssid=TEST_KRA. Dès que le dispositif "beacon frame crasher" démarre, les autres appareils ESP8266 connectés au point d'accès devraient redémarrer par intermittence.
Alternativement, si votre matériel Wi-Fi supporte la surveillance et l'injection, vous pouvez exécuter le script python :
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
Si le SDK de votre appareil ESP est vulnérable à CVE-2019-12587, vous devriez recevoir une sortie comme celle-ci de hostapd :

Si le SDK de votre appareil ESP est vulnérable à CVE-2019-12586, vous devriez recevoir une sortie comme celle-ci de hostapd :

Dans ce cas, comme l'appareil redémarre à chaque tentative de connexion avec hostapd, vous devriez recevoir beaucoup de logs indiquant une reconnexion. Si vous surveillez le port série de l'appareil, vous pouvez également recevoir des logs de trace.
Par défaut, le point d'accès du PoC a la configuration par défaut suivante :
Pour modifier ces options, changez le fichier hostapd.conf dans le dossier racine de hostapd (hostapd-2.8_binary/hostapd.conf ou hostapd-2.8_source/hostapd/hostapd.conf). Veuillez modifier le paramètre interface pour qu'il corresponde à votre carte réseau Wi-Fi, il est conseillé de laisser les autres paramètres par défaut si vous souhaitez tester les codes de test client ESP32/8266. Des certificats corrects sont également inclus (identiques à ceux du dépôt ESP-IDF), donc pas besoin de les modifier dans le dossier hostapd.
Si vous souhaitez modifier les méthodes EAP ou les identifiants utilisateur, changez simplement hostapd.eap_user
Vérifiez si votre bibliothèque openssl permet d'utiliser la version TLS 1.0. Vous pouvez normalement modifier cette configuration dans /etc/ssl/openssl.cnf, en changeant les dernières lignes comme suit :
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
Les codes utilisés pour tester les appareils vulnérables se trouvent dans le dossier esp_client_test_codes.
ESP32_Arduino_EAP_Client et ESP8266_Arduino_EAP_Client peuvent être compilés en utilisant leurs packages de support de carte Arduino respectifs (arduino-esp32 et arduino-esp8266). Quant aux codes non-Arduino, ESP-IDF et ESP8266_NONOS_SDK sont nécessaires pour compiler ESP8266_EAP_Client et ESP32_EAP_Client. Notez que vous devez utiliser les mêmes SDK ou des versions antérieures à celles mentionnées ici pour déclencher toutes les vulnérabilités décrites.
Cette recherche a été partiellement soutenue par Keysight Technologies.