
Prueba de concepto que explota la inyección de comandos DUML por Bluetooth en drones DJI, enviando comandos no autenticados para leer credenciales, alterar la configuración de Wi-Fi y controlar los sistemas de la aeronave.
Registro CVE: https://www.cve.org/CVERecord?id=CVE-2026-78306
NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-78306
Los drones DJI exponen una interfaz Bluetooth utilizada para establecer una conexión con la interfaz Wi-Fi del dron e intercambiar credenciales de Wi-Fi
La interfaz Bluetooth verifica el UUID de confianza del dispositivo para tres comandos:
El resto de comandos no requieren la misma verificación de autenticación. Como resultado, un atacante remoto dentro del alcance de Bluetooth podría enviar comandos DUML no autorizados al dron.
Dependiendo del comando, un atacante podría modificar la configuración del dron, incluyendo el cambio de la contraseña de Wi-Fi y potencialmente obtener acceso a la red interna del dron; habilitar o deshabilitar interfaces de radio; reiniciar o apagar la aeronave; restablecer la configuración, lo que borra todos los vídeos e imágenes capturados por el dron; y realizar otras acciones.
Nota: El exploit actualmente funciona en vuelo cuando se controla el dron por Wi-Fi, y en tierra/cuando el dron aterriza cuando se controla el dron por radio.
| Producto | Versión afectada |
|---|---|
| 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
Los siguientes comandos están registrados en commands.json y se generan directamente a partir de él. Los comandos marcados como danger requieren confirmación explícita antes de ser enviados.
| Comando | Qué hace |
|---|---|
| GET WiFi SSID [AUTH] | Recupera el SSID de Wi-Fi configurado. Requiere un UUID de confianza. |
| GET WiFi Password [AUTH] | Recupera la clave precompartida WPA2 de Wi-Fi. Requiere un UUID de confianza. |
| GET WiFi MAC address [AUTH] | Recupera la dirección MAC del AP de Wi-Fi. Requiere un UUID de confianza. |
| GET Country Code | Recupera el código de país regulatorio de dos letras. |
| GET Channel | Recupera el canal de Wi-Fi actualmente activo. |
| GET Band | Recupera la selección de banda de 2.4/5 GHz configurada. |
| GET RSSI [stub] | Consulta el controlador de RSSI; esta compilación devuelve un valor stub. |
| GET WiFi/BT status | Recupera el estado de las radios de Wi-Fi y Bluetooth. |
| GET Version | Recupera la cadena de versión del firmware. |
| Comando | Qué hace |
|---|---|
| SET NEW WiFi SSID | Cambia el SSID de Wi-Fi configurado. |
| SET NEW WiFi Password | Cambia la contraseña de Wi-Fi configurada. |
| SET NEW WiFi MAC Address | Cambia la configuración del BSSID de Wi-Fi en tiempo de ejecución. |
| SET NEW Country Code | Cambia el código de país regulatorio configurado. |
| SET NEW Country Code Ext | Gestiona la configuración extendida del código de país. |
| SET NEW Channel | Cambia el canal de Wi-Fi y provoca el reinicio del AP. |
Estas operaciones están clasificadas como danger en el POC y, por lo tanto, requieren confirmación explícita antes de ser enviadas.
| Comando | Qué hace |
|---|---|
| Start WiFi | Inicia la interfaz de Wi-Fi. |
| Stop WiFi | Detiene la interfaz de Wi-Fi. |
| Restart WiFi + Bluetooth | Reinicia las radios de Wi-Fi y Bluetooth. |
| Start Bluetooth | Inicia la radio de Bluetooth. |
| Stop Bluetooth | Detiene la radio de Bluetooth y termina la sesión actual. |
| Sysmode power control | Controla el estado de energía de las radios de Wi-Fi/Bluetooth. |
| Comando | Qué hace |
|---|---|
| Factory Reset WIFI | Restaura la configuración de Wi-Fi a su estado predeterminado. |
| Factory Restore Params | Restaura la configuración de red a los valores predeterminados de fábrica. |
El POC marca ambas operaciones como peligrosas porque modifican la configuración persistente.
| Comando | Qué hace |
|---|---|
| Start The Drone FTP server | Inicia el servicio FTP de la aeronave. |
| Enable Storage Export | Habilita la exportación de almacenamiento. |
| Disable Storage Export | Deshabilita la exportación de almacenamiento. |
| reboot The Drone | Reinicia la aeronave. |
| poweroff The Drone | Apaga la aeronave (se necesita acceso físico para volver a encenderla). |
| powersave mode The Drone | Coloca la aeronave en modo de ahorro de energía. |
| Comando | Qué hace |
|---|---|
| Start Remote Controller DoS | Primer paso de la secuencia de denegación de servicio del control remoto; coloca la aeronave en el estado que requiere el paso de desconexión. |
| Stop Remote Controller DoS | Completa la secuencia: la aeronave deja de atender el enlace del controlador, por lo que el control remoto pierde la aeronave. Ejecute el primer paso previamente. |
| Remote Controller Recover | Intenta devolver la aeronave a su funcionamiento normal. |
| Comando | Qué hace |
|---|---|
| Change a parameter | Cambia un parámetro de configuración del dron usando el hash de 32 bits de su nombre. |
| Reset a parameter | Restablece un parámetro de configuración a su valor predeterminado de firmware. |
El POC obtiene los nombres de los parámetros de flyc_parameters.txt y proporciona una selección interactiva de parámetros. Para añadir un parámetro conocido que desee modificar o restablecer, añada su nombre a flyc_parameters.txt. El parámetro estará entonces disponible para su selección cuando se inicie el POC.
Los comandos clasificados como danger requieren confirmación explícita antes de su transmisión.
La pantalla de confirmación muestra información 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: