Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-78306 — 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. | Kitploit
Outils/GitHubGitHub/wh02m1/cve-2026-78306
Sécurité des Systèmes EmbarquésSécurité BluetoothSécurité IoTGénération de PayloadsAnalyse des VulnérabilitésExploitationSécurité Sans FilTests d'IntrusionSécurité Matériel et IoT
GitHubwh02m1/cve-2026-78306

CVE-2026-78306

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.

il y a 2h 50mPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

CVE-2026-78306 — Injection de commandes DUML DJI via Bluetooth POC

Description

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 :

  • Get SSID
  • Get PSK
  • Get MAC address

Les commandes restantes 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 et en effectuant d'autres actions.

Le POC fournit un registre de commandes qui permet de tester les commandes disponibles sans modifier le code source Python. Le registre de commandes, incluant la commande, le récepteur, les exigences d'authentification et la description de chaque commande, est défini dans commands.json.

Produits affectés

ProduitVersion affectée
DJI Neo0 – 01.00.0400
DJI Neo 20 – 01.00.0500
DJI Flip0 – 01.00.1200
DJI Air 30 – 01.00.1600
DJI Air 3S0 – 01.00.1400
DJI Avata 20 – 01.00.0400
DJI Avata 3600 – 01.00.0300
DJI Mavic 30 – 01.00.1400
DJI Mavic 3 Classic0 – 01.00.0800
DJI Mavic 3 Pro0 – 01.01.0700
DJI Mavic 4 Pro0 – 01.00.0500
DJI Mini 20 – 01.07.0200
DJI Mini 30 – 01.00.0500
DJI Mini 3 Pro0 – 01.00.0900
DJI Mini 4 Pro0 – 01.00.1100
DJI Mini 5 Pro0 – 01.00.0600

DEMO

https://github.com/user-attachments/assets/57f51df2-5160-404c-9fd3-2a3a8b700008

Installation

1. Installer le POC

root@kitploit:~
# Clone the repository
git clone https://github.com/Wh02m1/CVE-2026-78306-POC.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

2. Allumer le drone

3. Exécuter le POC

root@kitploit:~
python3 ble_console.py

4. Après le scan, sélectionner le SSID du drone

image

Référence des commandes

Les commandes suivantes sont enregistrées dans commands.json. Le POC sépare les commandes en opérations de lecture, de configuration, de contrôle radio, de réinitialisation, système et de paramètres.

Commandes de lecture

Commandes d'écriture de configuration

Ces opérations sont classées comme danger dans le POC et nécessitent donc une confirmation explicite avant d'être envoyées.

Commandes de contrôle radio

Les commandes de contrôle radio sont implémentées via les gestionnaires dji_network correspondants.

Commandes de réinitialisation

CommandeCe qu'elle fait
Factory Reset WIFIRestaure la configuration Wi-Fi à son état par défaut.
Factory Restore ParamsRestaure la table des paramètres de configuration réseau aux valeurs d'usine.

Le POC marque les deux opérations comme dangereuses car elles modifient la configuration persistante.

Commandes système

Commandes de paramètres

CommandeCe qu'elle fait
Change a parameterModifie un paramètre de configuration du drone à l'aide de son hash de nom 32 bits.
Reset a parameterRéinitialise un paramètre de configuration à sa valeur d'usine.

Le POC obtient les noms de paramètres depuis flyc_parameters.txt et fournit 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 pour sélection au démarrage du POC.

Ajouter une commande : modifier commands.json, pas le code

Le menu est généré à partir de commands.json au démarrage. Pour ajouter une commande, ajoutez un nouvel objet à la liste commands d'une section. La commande apparaîtra au prochain démarrage du POC.

Exemple :

root@kitploit:~
{
  "label": "GET Channel",
  "cmd_set": "0x07",
  "cmd_id": "0x2c",
  "receiver": "0x07",
  "payload": "",
  "tier": "read",
  "bt_reply": true,
  "note": "wms_evt_get_chan -> wifi_mgmt_get_chan."
}

Champs de commande

Le récepteur par défaut est 0x07 (network:0) et l'expéditeur par défaut est 0x02 (mobile:0).


Générateurs de charge utile

Les générateurs de charge utile interactifs sont définis dans payload_builders.py.

Les générateurs disponibles incluent :

  • ssid
  • psk
  • country
  • mac
  • channel
  • bss_type
  • power_level
  • raw

Pour ajouter un nouveau générateur, implémentez la fonction, enregistrez-la dans BUILDERS et référencez son nom depuis commands.json.


Écran de confirmation

Les commandes classées comme danger nécessitent une confirmation explicite avant transmission.

L'écran de confirmation affiche des informations telles que :

root@kitploit:~
──────────────────────────────────────────────────────────────────────
  !!!  DANGEROUS COMMAND  !!!
──────────────────────────────────────────────────────────────────────
 COMMAND    device_reset L1 config
 ROUTE      00/de -> ve_air:1
 PAYLOAD    11 01 00 00 00 00
 DOES       system / FC / gimbal / camera / wifi / sdr config reset
 WARNING    The FC configuration reset can restart the motors.
──────────────────────────────────────────────────────────────────────
 Type YES to send:

Les informations DOES proviennent du champ note de la commande, tandis que les avertissements supplémentaires proviennent du champ warn dans commands.json.


Paramètres

La fonction Change a parameter donne accès aux paramètres de configuration connus listés dans flyc_parameters.txt.

Un paramètre peut être sélectionné par nom, fourni avec une valeur, converti vers la largeur little-endian sélectionnée, puis envoyé à l'aide de set_cfg_item (0x03/0xf9).

Reset a parameter utilise reset_cfg_item (0x03/0xfa) pour restaurer le paramètre sélectionné à sa valeur d'usine.


Macros

Le POC fournit également plusieurs macros prédéfinies :

MacroDescription
Restart WifiArrête puis démarre le Wi-Fi (0x42 suivi de 0x41).
SET NEW PSK + Restart wifiModifie la PSK puis redémarre le Wi-Fi.
Probe read commandsEnvoie les commandes de lecture enregistrées et indique quelles commandes répondent.

Les macros sont définies séparément des entrées de commande individuelles.


Fichiers


⚠️ Avertissement

⚠️ ATTENTION : Cette preuve de concept est strictement destinée à des fins éducatives, de recherche en sécurité et de tests d'intrusion autorisés.

Ce POC démontre des problèmes de sécurité dans l'interface de gestion des commandes Bluetooth/DUML de DJI. Certaines commandes peuvent modifier la configuration de l'appareil, désactiver les interfaces radio, interrompre la connectivité, redémarrer ou éteindre l'aéronef, réinitialiser la configuration ou supprimer des données stockées.

⚠️ N'utilisez PAS ce POC contre tout aéronef, appareil, réseau ou système que vous ne possédez pas ou pour lequel vous ne disposez pas d'une autorisation explicite de test.

Certaines commandes peuvent entraîner une perte de données, des modifications de configuration, une perte de connectivité, une perturbation de l'appareil ou d'autres conséquences imprévues. Les tests ne doivent être effectués que dans un environnement contrôlé où l'aéronef ainsi que les personnes et biens environnants ne sont pas exposés à un risque.

Les auteurs ne sont pas responsables des dommages, pertes de données, interruptions de service, exploitation de l'aéronef ou autres conséquences résultant de l'utilisation ou de l'usage abusif de ce POC.

⚠️ En utilisant ce POC, vous acceptez la responsabilité de vous assurer que vos tests sont autorisés et conformes à toutes les lois, réglementations et exigences de divulgation responsable applicables.

Télécharger l’outil
CommandeCe qu'elle fait
GET SSIDRécupère le SSID Wi-Fi configuré.
GET PSKRécupère la clé pré-partagée WPA2 du Wi-Fi.
GET MACRécupère l'adresse MAC du point d'accès Wi-Fi.
GET Country CodeRécupère le code pays réglementaire à deux lettres.
GET ChannelRécupère le canal Wi-Fi actuellement actif.
GET BandRécupère la sélection de bande 2,4/5 GHz configurée.
GET RSSIInterroge le gestionnaire RSSI ; cette version du firmware contient une implémentation stub.
GET WiFi/BT statusRécupère l'état des radios Wi-Fi et Bluetooth.
GET Device Info/ModelRécupère les informations sur l'appareil et le modèle.
GET VersionRécupère la version du démon.
GET Bluetooth NameRécupère le nom de l'appareil Bluetooth.
CommandeCe qu'elle fait
SET SSIDModifie le SSID Wi-Fi configuré.
SET PSKModifie le mot de passe Wi-Fi configuré.
SET MAC AddressModifie la configuration BSSID Wi-Fi à l'exécution.
SET Country CodeModifie le code pays réglementaire configuré.
SET Country Code ExtGère la configuration étendue du code pays.
SET ChannelModifie le canal Wi-Fi et provoque le redémarrage du point d'accès.
CommandeCe qu'elle fait
Start WIFIDémarre l'interface Wi-Fi et les services associés.
Stop WIFIArrête l'interface Wi-Fi.
Restart WIFI + BTRedémarre les sous-systèmes Wi-Fi et Bluetooth.
Start BluetoothDémarre le sous-système Bluetooth.
Stop BluetoothArrête le sous-système Bluetooth et met fin à la session en cours.
Sysmode power controlContrôle l'état d'alimentation Wi-Fi/Bluetooth.
CommandeCe qu'elle fait
ftpd_startDémarre le service dji_ftpd.
storage_export_enableActive la configuration d'export du stockage.
storage_export_disableDésactive la configuration d'export du stockage.
play_soundDéclenche un son de l'aéronef.
muteCoupe le son du haut-parleur de l'aéronef.
unmuteRéactive le son du haut-parleur de l'aéronef.
reboot_plainRedémarre l'aéronef.
reboot_poweroffÉteint l'aéronef.
reboot_powersavePlace l'aéronef en mode économie d'énergie.
device_reset L1 configRéinitialise la configuration système, contrôleur de vol, nacelle, caméra, Wi-Fi et SDR.
device_reset L2 +MEDIAEffectue la réinitialisation L1 et formate les médias/le stockage.
device_reset L3 +logEffectue la réinitialisation L2 et efface en plus le journal système.
ChampRequisSignification
labelOuiTexte affiché dans le menu.
cmd_setOuiIdentifiant d'ensemble de commandes DUML.
cmd_idOuiIdentifiant de commande DUML.
receiverOuiOctet récepteur sur le fil, (index << 5) | type.
payloadNonCharge utile hexadécimale.
tierNonread, write ou danger.
builderNonGénérateur de charge utile interactif.
authNonIndique qu'un UUID de confiance est requis.
bt_replyNonContrôle si le POC attend une réponse Bluetooth.
senderNonOctet expéditeur ; par défaut 0x02.
afterNonAction de suivi facultative.
noteNonDescription de rétro-ingénierie affichée par le POC.
warnNonTexte d'avertissement supplémentaire affiché pour les commandes dangereuses.
FichierRôle
ble_console.pyPoint d'entrée principal, menu et exécution des commandes.
commands.jsonRegistre des commandes et descriptions des commandes.
ble_transport.pyScan GATT Bluetooth, connexion et gestion des réponses.
duml_protocol.pyConstruction des paquets DUML v1 et gestion du CRC.
duml_decoders.pyDécodage des réponses et gestion des codes de retour.
payload_builders.pyGénération interactive de charges utiles.
parameters.pyHachage et opérations sur les paramètres de configuration.
terminal.pyInterface terminal, invites et gestion de la sortie.
flyc_parameters.txtNoms des paramètres de configuration connus.
requirements.txtDépendances Python.