
Proof-of-concept exploitant l'injection de commandes DUML via Bluetooth sur les drones DJI, envoyant des commandes non authentifiées pour lire les identifiants, modifier la configuration Wi-Fi et contrôler les systèmes de l'aéronef.
Enregistrement CVE : https://www.cve.org/CVERecord?id=CVE-2026-78306
NVD : https://nvd.nist.gov/vuln/detail/CVE-2026-78306
Les drones DJI exposent une interface Bluetooth utilisée pour établir une connexion à l'interface Wi-Fi du drone et échanger les identifiants Wi-Fi
L'interface Bluetooth vérifie l'UUID de confiance de l'appareil pour trois commandes :
Les autres commandes ne nécessitent pas la même vérification d'authentification. Par conséquent, un attaquant distant à portée Bluetooth peut être en mesure d'envoyer des commandes DUML non autorisées au drone.
Selon la commande, un attaquant peut être en mesure de modifier la configuration du drone, notamment en changeant le mot de passe Wi-Fi et en accédant potentiellement au réseau interne du drone ; en activant ou désactivant les interfaces radio ; en redémarrant ou éteignant l'aéronef ; en réinitialisant la configuration, ce qui efface toutes les vidéos et photos capturées par le drone ; et en effectuant d'autres actions.
Remarque : l'exploit fonctionne actuellement en vol lors du pilotage du drone via Wi-Fi, et au sol/lorsque le drone est posé lors du pilotage du drone via radio.
| Produit | Version affectée |
|---|---|
| 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
Les commandes suivantes sont enregistrées dans commands.json et sont générées directement à partir de celui-ci. Les commandes marquées danger nécessitent une confirmation explicite avant d'être envoyées.
| Commande | Ce qu'elle fait |
|---|---|
| GET WiFi SSID [AUTH] | Récupère le SSID Wi-Fi configuré. Nécessite un UUID de confiance. |
| GET WiFi Password [AUTH] | Récupère la clé pré-partagée WPA2 du Wi-Fi. Nécessite un UUID de confiance. |
| GET WiFi MAC address [AUTH] | Récupère l'adresse MAC du point d'accès Wi-Fi. Nécessite un UUID de confiance. |
| GET Country Code | Récupère le code de pays réglementaire à deux lettres. |
| GET Channel | Récupère le canal Wi-Fi actuellement actif. |
| GET Band | Récupère la sélection de bande 2,4/5 GHz configurée. |
| GET RSSI [stub] | Interroge le gestionnaire RSSI ; cette version renvoie une valeur factice. |
| GET WiFi/BT status | Récupère l'état des radios Wi-Fi et Bluetooth. |
| GET Version | Récupère la chaîne de version du firmware. |
| Commande | Ce qu'elle fait |
|---|---|
| SET NEW WiFi SSID | Modifie le SSID Wi-Fi configuré. |
| SET NEW WiFi Password | Modifie le mot de passe Wi-Fi configuré. |
| SET NEW WiFi MAC Address | Modifie la configuration du BSSID Wi-Fi à l'exécution. |
| SET NEW Country Code | Modifie le code de pays réglementaire configuré. |
| SET NEW Country Code Ext | Gère la configuration étendue du code de pays. |
| SET NEW Channel | Modifie le canal Wi-Fi et provoque le redémarrage du point d'accès. |
Ces opérations sont classées comme danger dans le POC et nécessitent donc une confirmation explicite avant d'être envoyées.
| Commande | Ce qu'elle fait |
|---|---|
| Start WiFi | Démarre l'interface Wi-Fi. |
| Stop WiFi | Arrête l'interface Wi-Fi. |
| Restart WiFi + Bluetooth | Redémarre les radios Wi-Fi et Bluetooth. |
| Start Bluetooth | Démarre la radio Bluetooth. |
| Stop Bluetooth | Arrête la radio Bluetooth et met fin à la session en cours. |
| Sysmode power control | Contrôle l'état d'alimentation des radios Wi-Fi/Bluetooth. |
| Commande | Ce qu'elle fait |
|---|---|
| Factory Reset WIFI | Restaure la configuration Wi-Fi à son état par défaut. |
| Factory Restore Params | Restaure la configuration réseau aux valeurs d'usine. |
Le POC marque les deux opérations comme dangereuses car elles modifient la configuration persistante.
| Commande | Ce qu'elle fait |
|---|---|
| Start The Drone FTP server | Démarre le service FTP de l'aéronef. |
| Enable Storage Export | Active l'export du stockage. |
| Disable Storage Export | Désactive l'export du stockage. |
| reboot The Drone | Redémarre l'aéronef. |
| poweroff The Drone | Éteint l'aéronef (un accès physique est nécessaire pour le rallumer). |
| powersave mode The Drone | Place l'aéronef en mode économie d'énergie. |
| Commande | Ce qu'elle fait |
|---|---|
| Start Remote Controller DoS | Première étape de la séquence de déni de service de la radiocommande ; place l'aéronef dans l'état requis par l'étape de déconnexion. |
| Stop Remote Controller DoS | Achève la séquence : l'aéronef cesse de desservir la liaison avec la radiocommande, qui perd alors l'aéronef. Exécutez la première étape au préalable. |
| Remote Controller Recover | Tente de ramener l'aéronef à un fonctionnement normal. |
| Commande | Ce qu'elle fait |
|---|---|
| Change a parameter | Modifie un paramètre de configuration du drone à l'aide du hachage 32 bits de son nom. |
| Reset a parameter | Réinitialise un paramètre de configuration à sa valeur par défaut du firmware. |
Le POC obtient les noms de paramètres depuis flyc_parameters.txt et propose une sélection interactive des paramètres. Pour ajouter un paramètre connu que vous souhaitez modifier ou réinitialiser, ajoutez son nom à flyc_parameters.txt. Le paramètre sera alors disponible à la sélection au démarrage du POC.
Les commandes classées comme danger nécessitent une confirmation explicite avant transmission.
L'écran de confirmation affiche des informations telles que :
──────────────────────────────────────────────────────────────────────
!!! 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: