
Proof-of-Concept zur Ausnutzung der DUML-Befehlsinjektion über Bluetooth bei DJI-Drohnen, das unauthentifizierte Befehle sendet, um Anmeldedaten auszulesen, die Wi-Fi-Konfiguration zu ändern und die Flugsysteme zu steuern.
CVE-Eintrag: https://www.cve.org/CVERecord?id=CVE-2026-78306
NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-78306
DJI-Drohnen stellen eine Bluetooth-Schnittstelle bereit, die verwendet wird, um eine Verbindung zur Wi-Fi-Schnittstelle der Drohne herzustellen und Wi-Fi-Anmeldedaten auszutauschen
Die Bluetooth-Schnittstelle prüft die vertrauenswürdige UUID des Geräts für drei Befehle:
Die übrigen Befehle erfordern nicht dieselbe Authentifizierungsprüfung. Infolgedessen kann ein entfernter Angreifer in Bluetooth-Reichweite möglicherweise unbefugte DUML-Befehle an die Drohne senden.
Je nach Befehl kann ein Angreifer möglicherweise die Konfiguration der Drohne ändern, einschließlich des Änderns des Wi-Fi-Passworts und potenziell des Erlangens von Zugriff auf das interne Netzwerk der Drohne; Funk-Schnittstellen aktivieren oder deaktivieren; das Fluggerät neu starten oder ausschalten; die Konfiguration zurücksetzen, wodurch alle von der Drohne aufgenommenen Videos und Bilder gelöscht werden; und andere Aktionen ausführen.
Hinweis: Der Exploit funktioniert derzeit im Flug, wenn die Drohne über Wi-Fi gesteuert wird, und am Boden/bei gelandeter Drohne, wenn die Drohne über Funk gesteuert wird.
| Produkt | Betroffene Version |
|---|---|
| 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
Die folgenden Befehle sind in commands.json registriert und werden direkt daraus generiert. Mit danger markierte Befehle erfordern eine ausdrückliche Bestätigung, bevor sie gesendet werden.
| Befehl | Was er bewirkt |
|---|---|
| GET WiFi SSID [AUTH] | Ruft die konfigurierte Wi-Fi-SSID ab. Erfordert eine vertrauenswürdige UUID. |
| GET WiFi Password [AUTH] | Ruft den WPA2-Pre-Shared-Key des Wi-Fi ab. Erfordert eine vertrauenswürdige UUID. |
| GET WiFi MAC address [AUTH] | Ruft die MAC-Adresse des Wi-Fi-AP ab. Erfordert eine vertrauenswürdige UUID. |
| GET Country Code | Ruft den zweistelligen regulatorischen Ländercode ab. |
| GET Channel | Ruft den aktuell aktiven Wi-Fi-Kanal ab. |
| GET Band | Ruft die konfigurierte Auswahl des 2,4/5-GHz-Bands ab. |
| GET RSSI [stub] | Fragt den RSSI-Handler ab; dieser Build gibt einen Stub-Wert zurück. |
| GET WiFi/BT status | Ruft den Zustand der Wi-Fi- und Bluetooth-Funkmodule ab. |
| GET Version | Ruft die Firmware-Versionszeichenkette ab. |
| Befehl | Was er bewirkt |
|---|---|
| SET NEW WiFi SSID | Ändert die konfigurierte Wi-Fi-SSID. |
| SET NEW WiFi Password | Ändert das konfigurierte Wi-Fi-Passwort. |
| SET NEW WiFi MAC Address | Ändert die Wi-Fi-BSSID-Konfiguration zur Laufzeit. |
| SET NEW Country Code | Ändert den konfigurierten regulatorischen Ländercode. |
| SET NEW Country Code Ext | Behandelt die erweiterte Ländercode-Konfiguration. |
| SET NEW Channel | Ändert den Wi-Fi-Kanal und bewirkt einen Neustart des AP. |
Diese Vorgänge sind im POC als danger klassifiziert und erfordern daher eine ausdrückliche Bestätigung, bevor sie gesendet werden.
| Befehl | Was er bewirkt |
|---|---|
| Start WiFi | Startet die Wi-Fi-Schnittstelle. |
| Stop WiFi | Stoppt die Wi-Fi-Schnittstelle. |
| Restart WiFi + Bluetooth | Startet die Wi-Fi- und Bluetooth-Funkmodule neu. |
| Start Bluetooth | Startet das Bluetooth-Funkmodul. |
| Stop Bluetooth | Stoppt das Bluetooth-Funkmodul und beendet die aktuelle Sitzung. |
| Sysmode power control | Steuert den Energiezustand der Wi-Fi-/Bluetooth-Funkmodule. |
| Befehl | Was er bewirkt |
|---|---|
| Factory Reset WIFI | Setzt die Wi-Fi-Konfiguration auf ihren Standardzustand zurück. |
| Factory Restore Params | Setzt die Netzwerkkonfiguration auf die Werkseinstellungen zurück. |
Der POC markiert beide Vorgänge als gefährlich, da sie die persistente Konfiguration verändern.
| Befehl | Was er bewirkt |
|---|---|
| Start The Drone FTP server | Startet den FTP-Dienst des Fluggeräts. |
| Enable Storage Export | Aktiviert den Speicherexport. |
| Disable Storage Export | Deaktiviert den Speicherexport. |
| reboot The Drone | Startet das Fluggerät neu. |
| poweroff The Drone | Schaltet das Fluggerät aus (zum Wiedereinschalten ist physischer Zugriff erforderlich). |
| powersave mode The Drone | Versetzt das Fluggerät in den Energiesparmodus. |
| Befehl | Was er bewirkt |
|---|---|
| Start Remote Controller DoS | Erster Schritt der Denial-of-Service-Sequenz gegen die Fernsteuerung; versetzt das Fluggerät in den Zustand, den der Trennungsschritt erfordert. |
| Stop Remote Controller DoS | Schließt die Sequenz ab: Das Fluggerät bedient die Verbindung zur Fernsteuerung nicht mehr, sodass die Fernsteuerung das Fluggerät verliert. Führen Sie zuvor den ersten Schritt aus. |
| Remote Controller Recover | Versucht, das Fluggerät wieder in den Normalbetrieb zu versetzen. |
| Befehl | Was er bewirkt |
|---|---|
| Change a parameter | Ändert einen Konfigurationsparameter der Drohne anhand seines 32-Bit-Namens-Hashs. |
| Reset a parameter | Setzt einen Konfigurationsparameter auf seinen Firmware-Standardwert zurück. |
Der POC bezieht die Parameternamen aus flyc_parameters.txt und bietet eine interaktive Parameterauswahl. Um einen bekannten Parameter hinzuzufügen, den Sie ändern oder zurücksetzen möchten, fügen Sie seinen Namen zu flyc_parameters.txt hinzu. Der Parameter steht dann beim Start des POC zur Auswahl.
Als danger klassifizierte Befehle erfordern vor dem Senden eine ausdrückliche Bestätigung.
Der Bestätigungsbildschirm zeigt Informationen wie:
──────────────────────────────────────────────────────────────────────
!!! 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: