
Prova de Conceito das vulnerabilidades Wi-Fi do ESP32/8266 (CVE-2019-12586, CVE-2019-12587, CVE-2019-12588)
Este repositório é parte de um resultado de pesquisa do ASSET Research Group.

Este repositório demonstra 3 ataques Wi-Fi contra os populares dispositivos IoT ESP32/8266:
Siga os links de cada vulnerabilidade para mais detalhes e correções da Espressif.
Estas vulnerabilidades foram encontradas em SDKs do ESP32 e ESP8266. Suas versões eram ESP-IDF v4.0-dev-459-gba1ff1692 e NONOS-SDK v3.0-103-g7a31cb7 respectivamente na época da descoberta.
Enquanto uma versão personalizada do hostapd é fornecida para testar as 2 primeiras vulnerabilidades, para a última, um ESP8266 é usado para injetar quadros (frames) beacon 802.11 falsos, a fim de travar outros de sua própria espécie (trocadilho intencional!).
Se você estiver usando Debian ou Ubuntu, pode executar o hostapd já compilado na pasta hostapd-2.8_binary. Basta executar hostapd-2.8_binary/run_hostapd_exploit.sh para iniciar o ponto de acesso e testar a vulnerabilidade, ou hostapd-2.8_binary/run_zero_pmk_EAP.sh para iniciar sem este teste. Esteja ciente de que você precisa parar os serviços de rede com service network-manager stop para que sua interface Wi-Fi fique livre.
service network-manager stop
./run_zero_pmk_EAP.sh # para testar contra CVE-2019-12587 (lembre-se de reiniciar o ESP primeiro)
./run_crash_esp_EAP.sh # para testar contra CVE-2019-12586
Se por algum motivo o binário não funcionar no seu sistema, você pode compilar o projeto hostapd-2.8_source executando o script ./buid.sh. O script instala as seguintes dependências antes de executar a ferramenta: build-essential pkg-config git libnl-genl-3-dev libssl-dev libnl-route-3-dev.
Após a compilação bem-sucedida, você pode executar o script ./run_zero_pmk_EAP.sh para iniciar o ponto de acesso e testar a vulnerabilidade, ou ./run_hostapd_normal.sh para iniciar sem o teste.
./build
./run_zero_pmk_EAP.sh # para testar contra CVE-2019-12587 (lembre-se de reiniciar o ESP primeiro)
./run_crash_esp_EAP.sh # para testar contra CVE-2019-12586
Para compilar o código para o esp8266 na pasta beacon_frame_crasher , é necessário seguir os passos em ESP8266 Deauther. Esta é uma versão modificada do pacote de suporte de placa para ESP8266 que permite a injeção de quadros 802.11 brutos. Um binário também é fornecido para um teste rápido em beacon_frame_crasher/ESP8266Crasher.ino.d1_mini.bin caso você tenha uma placa wemos d1 mini sobressalente. Note que este código é hardcoded para travar um ESP8266 configurado para um ponto de acesso com ssid=TEST_KRA. Assim que o dispositivo "beacon frame crasher" iniciar, os outros dispositivos ESP8266 conectados ao ponto de acesso devem reiniciar intermitentemente.
Alternativamente, se seu hardware Wi-Fi suportar monitoramento e injeção, você pode executar o script python:
sudo apt-get install -y aircrack-ng
sudo airmon-ng check kill
sudo airmon-ng wlan0 start # wlan0 é o nome da sua interface wifi
pip install scapy
python beacon_frame_crasher/ESP8266Crasher.py
Se o SDK do seu dispositivo ESP for vulnerável ao CVE-2019-12587, você deve receber uma saída como esta do hostapd:

Se o SDK do seu dispositivo ESP for vulnerável ao CVE-2019-12586, você deve receber uma saída como esta do hostapd:

Neste caso, como o dispositivo está reiniciando toda vez que tenta uma conexão com o hostapd, você deve receber muitos logs indicando reconexão. Se você estiver monitorando a porta serial do dispositivo, também pode receber logs de rastreamento.
Por padrão, o ponto de acesso da PoC tem a seguinte configuração padrão:
Para alterar essas opções, altere o arquivo hostapd.conf na pasta raiz do hostapd (hostapd-2.8_binary/hostapd.conf ou hostapd-2.8_source/hostapd/hostapd.conf). Por favor, altere o parâmetro interface para corresponder à sua placa de rede Wi-Fi. Recomenda-se deixar os outros parâmetros como padrão se você deseja testar os códigos de teste do cliente ESP32/8266. Certificados corretos também estão incluídos (os mesmos do repositório ESP-IDF), portanto, não há necessidade de alterá-los na pasta hostapd.
Se desejar alterar os métodos EAP ou as credenciais de usuário, basta alterar hostapd.eap_user
Verifique se sua biblioteca openssl permite o uso da versão TLS 1.0. Você pode alterar essa configuração normalmente em /etc/ssl/openssl.cnf, alterando as últimas linhas para:
[system_default_sect]
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1
Os códigos usados para testar os dispositivos vulneráveis estão na pasta esp_client_test_codes.
ESP32_Arduino_EAP_Client e ESP8266_Arduino_EAP_Client podem ser compilados usando seus respectivos pacotes de suporte de placa Arduino (arduino-esp32 e arduino-esp8266). Quanto aos códigos não-Arduino, são necessários ESP-IDF e ESP8266_NONOS_SDK para compilar ESP8266_EAP_Client e ESP32_EAP_Client. Observe que você precisa usar os mesmos SDKs ou versões anteriores aos mencionados aqui para desencadear todas as vulnerabilidades descritas.
Esta pesquisa foi parcialmente apoiada pela Keysight Technologies.