
Proof-of-concept que explora a injeção de comandos DUML via Bluetooth em drones DJI, enviando comandos não autenticados para ler credenciais, alterar a configuração de Wi-Fi e controlar os sistemas da aeronave.
Registro CVE: https://www.cve.org/CVERecord?id=CVE-2026-78306
NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-78306
Drones DJI expõem uma interface Bluetooth usada para estabelecer uma conexão com a interface Wi-Fi do drone e trocar credenciais de Wi-Fi
A interface Bluetooth verifica o UUID confiável do dispositivo para três comandos:
Os demais comandos não exigem a mesma verificação de autenticação. Como resultado, um atacante remoto dentro do alcance do Bluetooth pode ser capaz de enviar comandos DUML não autorizados ao drone.
Dependendo do comando, um atacante pode ser capaz de modificar a configuração do drone, incluindo alterar a senha do Wi-Fi e potencialmente obter acesso à rede interna do drone; habilitar ou desabilitar interfaces de rádio; reiniciar ou desligar a aeronave; redefinir a configuração, o que apaga todos os vídeos e fotos capturados pelo drone; e realizar outras ações.
Nota: O exploit atualmente funciona em voo ao controlar o drone via Wi-Fi, e no solo/quando o drone pousa ao controlar o drone via rádio.
| Produto | Versão Afetada |
|---|---|
| DJI Neo | 0 – 01.00.0400 |
| DJI Neo 2 | 0 – 01.00.0500 |
| DJI Flip | 0 – 01.00.1200 |
| DJI Air 3 | 0 – 01.00.1600 |
| DJI Air 3S | 0 – 01.00.1400 |
| DJI Avata 2 | 0 – 01.00.0400 |
| DJI Avata 360 | 0 – 01.00.0300 |
| DJI Mavic 3 | 0 – 01.00.1400 |
| DJI Mavic 3 Classic | 0 – 01.00.0800 |
| DJI Mavic 3 Pro | 0 – 01.01.0700 |
| DJI Mavic 4 Pro | 0 – 01.00.0500 |
| DJI Mini 2 | 0 – 01.07.0200 |
| DJI Mini 3 | 0 – 01.00.0500 |
| DJI Mini 3 Pro | 0 – 01.00.0900 |
| DJI Mini 4 Pro | 0 – 01.00.1100 |
| DJI Mini 5 Pro | 0 – 01.00.0600 |
https://github.com/user-attachments/assets/57f51df2-5160-404c-9fd3-2a3a8b700008
# Clone the repository
git clone https://github.com/Wh02m1/CVE-2026-78306.git
cd CVE-2026-78306-POC
# Create and activate a Python virtual environment
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
python3 ble_console.py
Os comandos a seguir estão registrados em commands.json e são gerados diretamente a partir dele. Os comandos marcados como danger exigem confirmação explícita antes de serem enviados.
| Comando | O que faz |
|---|---|
| GET WiFi SSID [AUTH] | Recupera o SSID de Wi-Fi configurado. Requer um UUID confiável. |
| GET WiFi Password [AUTH] | Recupera a chave pré-compartilhada WPA2 do Wi-Fi. Requer um UUID confiável. |
| GET WiFi MAC address [AUTH] | Recupera o endereço MAC do AP Wi-Fi. Requer um UUID confiável. |
| GET Country Code | Recupera o código de país regulatório de duas letras. |
| GET Channel | Recupera o canal Wi-Fi atualmente ativo. |
| GET Band | Recupera a seleção de banda de 2,4/5 GHz configurada. |
| GET RSSI [stub] | Consulta o manipulador de RSSI; esta compilação retorna um valor stub. |
| GET WiFi/BT status | Recupera o estado dos rádios Wi-Fi e Bluetooth. |
| GET Version | Recupera a string da versão do firmware. |
| Comando | O que faz |
|---|---|
| SET NEW WiFi SSID | Altera o SSID de Wi-Fi configurado. |
| SET NEW WiFi Password | Altera a senha de Wi-Fi configurada. |
| SET NEW WiFi MAC Address | Altera a configuração de BSSID Wi-Fi em tempo de execução. |
| SET NEW Country Code | Altera o código de país regulatório configurado. |
| SET NEW Country Code Ext | Trata a configuração estendida de código de país. |
| SET NEW Channel | Altera o canal Wi-Fi e faz com que o AP reinicie. |
Essas operações são classificadas como danger no POC e, portanto, exigem confirmação explícita antes de serem enviadas.
| Comando | O que faz |
|---|---|
| Start WiFi | Inicia a interface Wi-Fi. |
| Stop WiFi | Para a interface Wi-Fi. |
| Restart WiFi + Bluetooth | Reinicia os rádios Wi-Fi e Bluetooth. |
| Start Bluetooth | Inicia o rádio Bluetooth. |
| Stop Bluetooth | Para o rádio Bluetooth e encerra a sessão atual. |
| Sysmode power control | Controla o estado de energia dos rádios Wi-Fi/Bluetooth. |
| Comando | O que faz |
|---|---|
| Factory Reset WIFI | Restaura a configuração de Wi-Fi ao seu estado padrão. |
| Factory Restore Params | Restaura a configuração de rede aos padrões de fábrica. |
O POC marca ambas as operações como perigosas porque elas modificam a configuração persistente.
| Comando | O que faz |
|---|---|
| Start The Drone FTP server | Inicia o serviço FTP da aeronave. |
| Enable Storage Export | Habilita a exportação de armazenamento. |
| Disable Storage Export | Desabilita a exportação de armazenamento. |
| reboot The Drone | Reinicia a aeronave. |
| poweroff The Drone | Desliga a aeronave (é necessário acesso físico para ligá-la novamente). |
| powersave mode The Drone | Coloca a aeronave em modo de economia de energia. |
| Comando | O que faz |
|---|---|
| Start Remote Controller DoS | Primeira etapa da sequência de negação de serviço do controlador remoto; coloca a aeronave no estado exigido pela etapa de desconexão. |
| Stop Remote Controller DoS | Conclui a sequência: a aeronave deixa de atender ao link do controlador, fazendo com que o controlador remoto perca a aeronave. Execute a primeira etapa antes. |
| Remote Controller Recover | Tenta retornar a aeronave à operação normal. |
| Comando | O que faz |
|---|---|
| Change a parameter | Altera um parâmetro de configuração do drone usando seu hash de nome de 32 bits. |
| Reset a parameter | Redefine um parâmetro de configuração para seu padrão de firmware. |
O POC obtém os nomes dos parâmetros de flyc_parameters.txt e fornece seleção interativa de parâmetros. Para adicionar um parâmetro conhecido que você deseja modificar ou redefinir, adicione seu nome a flyc_parameters.txt. O parâmetro ficará então disponível para seleção quando o POC for iniciado.
Os comandos classificados como danger exigem confirmação explícita antes da transmissão.
A tela de confirmação exibe informações como:
──────────────────────────────────────────────────────────────────────
!!! DANGEROUS COMMAND !!!
──────────────────────────────────────────────────────────────────────
COMMAND Factory Reset WIFI
ROUTE 07/0f → 0x07
PAYLOAD (none)
DOES resets the Wi-Fi config and regenerates the PSK
WARNING Disconnects every device currently on the drone's Wi-Fi.
──────────────────────────────────────────────────────────────────────
Type YES to send:
A função Change a parameter fornece acesso aos parâmetros de configuração conhecidos listados em flyc_parameters.txt.
Reset a parameter usa reset_cfg_item para restaurar o parâmetro selecionado ao seu valor padrão de firmware.