
DJIドローン DUML コマンドインジェクション(Bluetooth経由) — CVE-2026-78306 の概念実証
CVE record: https://www.cve.org/CVERecord?id=CVE-2026-78306
NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-78306
DJIドローンは、ドローンのWi-Fiインターフェースへの接続を確立し、Wi-Fi認証情報を交換するために使用されるBluetoothインターフェースを公開しています。
Bluetoothインターフェースは、デバイスの信頼済みUUIDを次の3つのコマンドに対してチェックします:
残りのコマンドには同じ認証チェックが要求されません。その結果、Bluetooth範囲内にいるリモート攻撃者が、ドローンに対して不正なDUMLコマンドを送信できる可能性があります。
コマンドによっては、攻撃者がドローンの設定を変更できる可能性があります。これにはWi-Fiパスワードの変更や、ドローンの内部ネットワークへのアクセス取得の可能性、無線インターフェースの有効化または無効化、機体の再起動または電源オフ、設定のリセット(ドローンで撮影されたすべての動画と写真が消去されます)、その他の操作が含まれます。
このPOCは、Pythonソースコードを変更することなく利用可能なコマンドをテストできるコマンドレジストリを提供します。コマンド、レシーバー、認証要件、および各コマンドの説明を含むコマンドレジストリは、commands.jsonで定義されています。
| Product | Affected 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
以下のコマンドはcommands.jsonに登録されています。このPOCはコマンドを読み取り、設定、無線制御、リセット、システム、およびパラメータ操作に分類します。
| Command | What it does |
|---|---|
| GET SSID | Retrieves the configured Wi-Fi SSID. |
| GET PSK | Retrieves the Wi-Fi WPA2 pre-shared key. |
| GET MAC | Retrieves the Wi-Fi AP MAC address. |
| GET Country Code | Retrieves the two-letter regulatory country code. |
| GET Channel | Retrieves the currently active Wi-Fi channel. |
| GET Band | Retrieves the configured 2.4/5 GHz band selection. |
| GET RSSI | Queries the RSSI handler; this firmware build contains a stub implementation. |
| GET WiFi/BT status | Retrieves the Wi-Fi and Bluetooth radio state. |
| GET Device Info/Model | Retrieves device and model information. |
| GET Version | Retrieves the daemon version. |
| GET Bluetooth Name | Retrieves the Bluetooth device name. |
| Command | What it does |
|---|---|
| SET SSID | Changes the configured Wi-Fi SSID. |
| SET PSK | Changes the configured Wi-Fi password. |
| SET MAC Address | Changes the runtime Wi-Fi BSSID configuration. |
| SET Country Code | Changes the configured regulatory country code. |
| SET Country Code Ext | Handles extended country-code configuration. |
| SET Channel | Changes the Wi-Fi channel and causes the AP to restart. |
これらの操作はPOCではdangerに分類されるため、送信前に明示的な確認が必要です。
| Command | What it does |
|---|---|
| Start WIFI | Starts the Wi-Fi interface and associated services. |
| Stop WIFI | Stops the Wi-Fi interface. |
| Restart WIFI + BT | Restarts the Wi-Fi and Bluetooth subsystems. |
| Start Bluetooth | Starts the Bluetooth subsystem. |
| Stop Bluetooth | Stops the Bluetooth subsystem and terminates the current session. |
| Sysmode power control | Controls the Wi-Fi/Bluetooth power state. |
| Command | What it does |
|---|---|
| Factory Reset WIFI | Restores the Wi-Fi configuration to its default state. |
| Factory Restore Params | Restores the network configuration parameter table to factory defaults. |
POCは、これらの操作が永続的な設定を変更するため、両方とも危険であるとマークしています。
| Command | What it does |
|---|---|
ftpd_start | Starts the dji_ftpd service. |
storage_export_enable | Enables the storage-export configuration. |
storage_export_disable | Disables the storage-export configuration. |
play_sound | Triggers an aircraft sound. |
mute | Mutes the aircraft speaker. |
unmute | Unmutes the aircraft speaker. |
reboot_plain | Reboots the aircraft. |
reboot_poweroff | Powers off the aircraft. |
reboot_powersave | Places the aircraft into power-save mode. |
device_reset L1 config | Resets the system, flight controller, gimbal, camera, Wi-Fi, and SDR configurations. |
device_reset L2 +MEDIA | Performs the L1 reset and wipes media storage, including pictures and videos captured by the drone. |
device_reset L3 +log | Performs the L2 reset and additionally clears the system logs. |