
Prova di concetto delle vulnerabilità Wi-Fi di ESP32/8266 (CVE-2019-12586, CVE-2019-12587, CVE-2019-12588)
Questo repository fa parte dei risultati di ricerca del ASSET Research Group.

Questo repository dimostra 3 attacchi Wi-Fi contro i popolari dispositivi IoT ESP32/8266:
Segui i link su ogni vulnerabilità per maggiori dettagli e per le patch di Espressif.
Queste vulnerabilità sono state trovate negli SDK di ESP32 e ESP8266. Le loro versioni erano rispettivamente ESP-IDF v4.0-dev-459-gba1ff1692 e NONOS-SDK v3.0-103-g7a31cb7 al momento della scoperta.
Mentre una versione personalizzata di hostapd è fornita per testare le prime 2 vulnerabilità, per l'ultima viene utilizzato un ESP8266 per iniettare falsi frame beacon 802.11 al fine di mandare in crash altri dispositivi della sua stessa specie (senza giochi di parole!).
Se stai utilizzando debian o ubuntu puoi eseguire l'hostapd già compilato nella cartella `hostapd-2.8_binary`. Basta eseguire `hostapd-2.8_binary/run_hostapd_exploit.sh` per avviare l'access point per testare la vulnerabilità oppure `hostapd-2.8_binary/run_zero_pmk_EAP.sh` per avviarlo senza questo test. Ti avvisiamo che devi fermare i servizi di rete con `service network-manager stop` per liberare la tua interfaccia 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
Se per qualche motivo il binario non funziona sul tuo sistema, puoi compilare il progetto `hostapd-2.8_source` eseguendo lo script `./buid.sh`. Lo script installa le seguenti dipendenze prima di eseguire lo strumento: `build-essential pkg-config git libnl-genl-3-dev libssl-dev libnl-route-3-dev`.
Dopo che la compilazione è andata a buon fine, puoi eseguire lo script `./run_zero_pmk_EAP.sh` per avviare l'access point per testare la vulnerabilità oppure `./run_hostapd_normal.sh` per avviarlo senza il 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
Per compilare il codice per esp8266 nella cartella beacon_frame_crasher, è necessario seguire i passaggi in ESP8266 Deauther. Questa è una versione modificata del pacchetto di supporto della scheda per ESP8266 che consente l'iniezione di frame 802.11 grezzi. Viene inoltre fornito un binario per un test rapido in beacon_frame_crasher/ESP8266Crasher.ino.d1_mini.bin nel caso tu abbia una scheda wemos d1 mini di riserva. Nota che questo codice è hardcoded per mandare in crash un ESP8266 configurato come access point con ssid=TEST_KRA. Non appena il dispositivo "beacon frame crasher" si avvia, gli altri dispositivi ESP8266 connessi all'access point dovrebbero riavviarsi a intermittenza.
In alternativa, se la tua scheda Wi-Fi supporta il monitoraggio e l'iniezione, puoi eseguire lo 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
Se l'SDK del tuo dispositivo ESP è vulnerabile a CVE-2019-12587, dovresti ricevere un output come questo da hostapd:

Se l'SDK del tuo dispositivo ESP è vulnerabile a CVE-2019-12586, dovresti ricevere un output come questo da hostapd:

In questo caso, poiché il dispositivo si riavvia ogni volta che tenta una connessione con hostapd, dovresti ricevere molti log che indicano la riconnessione. Se stai monitorando la porta seriale del dispositivo, puoi ricevere anche log di traccia.
Di default, l'access point del PoC ha la seguente configurazione predefinita:
Per cambiare queste opzioni, modifica il file hostapd.conf nella cartella principale di hostapd (hostapd-2.8_binary/hostapd.conf o hostapd-2.8_source/hostapd/hostapd.conf). Si prega di modificare il parametro interface in modo che corrisponda alla tua scheda di rete Wi-Fi; si consiglia di lasciare gli altri parametri come default se desideri testare i codici client ESP32/8266. Sono inclusi anche i certificati corretti (gli stessi del repository ESP-IDF), quindi non è necessario modificarli nella cartella hostapd.
Se desideri cambiare i metodi EAP o le credenziali utente, basta modificare hostapd.eap_user
Controlla se la tua libreria openssl consente di usare la versione TLS 1.0. Puoi modificare questa configurazione di solito in /etc/ssl/openssl.cnf, cambiando le ultime righe in:
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
I codici usati per testare i dispositivi vulnerabili si trovano nella cartella esp_client_test_codes.
ESP32_Arduino_EAP_Client e ESP8266_Arduino_EAP_Client possono essere compilati utilizzando i rispettivi pacchetti di supporto Arduino per le schede (arduino-esp32 e arduino-esp8266). Per quanto riguarda i codici non-Arduino, sono richiesti ESP-IDF e ESP8266_NONOS_SDK per compilare ESP8266_EAP_Client e ESP32_EAP_Client. Nota che devi usare gli stessi SDK o versioni precedenti a quelli menzionati qui per innescare tutte le vulnerabilità descritte.
Questa ricerca è stata parzialmente sostenuta da Keysight Technologies.