
Prueba de concepto de las vulnerabilidades Wi-Fi de ESP32/8266 (CVE-2019-12586, CVE-2019-12587, CVE-2019-12588)
Este repositorio es parte del resultado de una investigación del ASSET Research Group.

Este repositorio demuestra 3 ataques Wi-Fi contra los populares dispositivos IoT ESP32/8266:
Siga los enlaces de cada vulnerabilidad para más detalles y los parches de Espressif.
Estas vulnerabilidades se encontraron en los SDK de ESP32 y ESP8266. Sus versiones eran ESP-IDF v4.0-dev-459-gba1ff1692 y NONOS-SDK v3.0-103-g7a31cb7 respectivamente en el momento del descubrimiento.
Si bien se proporciona una versión personalizada de hostapd para probar las 2 primeras vulnerabilidades, para la última se usa un ESP8266 para inyectar tramas baliza 802.11 falsas con el fin de causar la caída de otros de su mismo tipo (¡sin juego de palabras!).
Si está usando Debian o Ubuntu, puede ejecutar el hostapd ya compilado en la carpeta `hostapd-2.8_binary`. Simplemente ejecute `hostapd-2.8_binary/run_hostapd_exploit.sh` para iniciar el punto de acceso y probar la vulnerabilidad, o `hostapd-2.8_binary/run_zero_pmk_EAP.sh` para iniciar sin esta prueba. Tenga en cuenta que debe detener los servicios de red con `service network-manager stop` para que su interfaz Wi-Fi quede libre.
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 por alguna razón el binario no funciona en su sistema, puede compilar el proyecto `hostapd-2.8_source` ejecutando el script `./buid.sh`. El script instala las siguientes dependencias antes de ejecutar la herramienta: `build-essential pkg-config git libnl-genl-3-dev libssl-dev libnl-route-3-dev`.
Después de una compilación exitosa, puede ejecutar el script `./run_zero_pmk_EAP.sh` para iniciar el punto de acceso y probar la vulnerabilidad, o `./run_hostapd_normal.sh` para iniciar sin la prueba.
./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
Para compilar el código para esp8266 en la carpeta beacon_frame_crasher, es necesario seguir los pasos en ESP8266 Deauther. Esta es una versión modificada del paquete de soporte de placa para ESP8266 que permite la inyección de tramas 802.11 sin procesar. También se proporciona un binario para una prueba rápida en beacon_frame_crasher/ESP8266Crasher.ino.d1_mini.bin en caso de que tenga una placa wemos d1 mini de repuesto. Tenga en cuenta que este código está hardcodeado para causar la caída de un ESP8266 configurado para un punto de acceso con ssid=TEST_KRA. Tan pronto como el dispositivo "beacon frame crasher" se inicie, los otros dispositivos ESP8266 conectados al punto de acceso deberían reiniciarse de forma intermitente.
Alternativamente, si su hardware Wi-Fi soporta monitoreo e inyección, puede ejecutar el script de 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 el SDK de su dispositivo ESP es vulnerable a CVE-2019-12587, debería recibir una salida como esta de hostapd:

Si el SDK de su dispositivo ESP es vulnerable a CVE-2019-12586, debería recibir una salida como esta de hostapd:

En este caso, como el dispositivo se reinicia cada vez que intenta una conexión con hostapd, debería recibir muchos registros que indiquen reconexión. Si está monitoreando el puerto serie del dispositivo, también puede recibir registros de traza.
Por defecto, el punto de acceso de la PoC tiene la siguiente configuración predeterminada:
Para cambiar estas opciones, modifique el archivo hostapd.conf en la carpeta raíz de hostapd (hostapd-2.8_binary/hostapd.conf o hostapd-2.8_source/hostapd/hostapd.conf). Cambie el parámetro interface para que coincida con su NIC Wi-Fi; se recomienda dejar los demás parámetros como predeterminados si desea probar los códigos de cliente de prueba ESP32/8266. También se incluyen los certificados correctos (los mismos del repositorio ESP-IDF), por lo que no es necesario cambiarlos en la carpeta hostapd.
Si desea cambiar los métodos EAP o las credenciales de usuario, simplemente modifique hostapd.eap_user.
Verifique si su biblioteca openssl permite usar la versión TLS 1.0. Normalmente puede cambiar esta configuración en /etc/ssl/openssl.cnf, modificando las últimas líneas a:
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
Los códigos utilizados para probar los dispositivos vulnerables están en la carpeta esp_client_test_codes.
ESP32_Arduino_EAP_Client y ESP8266_Arduino_EAP_Client se pueden compilar usando sus respectivos paquetes de soporte de placa Arduino (arduino-esp32 y arduino-esp8266). En cuanto a los códigos que no son de Arduino, se requieren ESP-IDF y ESP8266_NONOS_SDK para compilar ESP8266_EAP_Client y ESP32_EAP_Client. Tenga en cuenta que debe usar los mismos SDK o versiones anteriores a las mencionadas aquí para desencadenar todas las vulnerabilidades descritas.
Esta investigación fue apoyada parcialmente por Keysight Technologies.