
DJI ड्रोन ब्लूटूथ DUML कमांड इंजेक्शन का शोषण करने वाला प्रूफ-ऑफ-कॉन्सेप्ट, जो क्रेडेंशियल पढ़ने, Wi-Fi कॉन्फ़िगरेशन बदलने और विमान प्रणालियों को नियंत्रित करने के लिए अनधिकृत कमांड भेजता है।
DJI ड्रोन एक ब्लूटूथ इंटरफ़ेस प्रदान करते हैं जिसका उपयोग ड्रोन के Wi-Fi इंटरफ़ेस से कनेक्शन स्थापित करने और Wi-Fi क्रेडेंशियल्स का आदान-प्रदान करने के लिए किया जाता है।
ब्लूटूथ इंटरफ़ेस तीन कमांड्स के लिए डिवाइस के विश्वसनीय UUID की जाँच करता है:
शेष कमांड्स के लिए समान प्रमाणीकरण जाँच की आवश्यकता नहीं होती है। परिणामस्वरूप, ब्लूटूथ रेंज के भीतर एक रिमोट हमलावर ड्रोन को अनधिकृत DUML कमांड्स भेजने में सक्षम हो सकता है।
कमांड के आधार पर, एक हमलावर ड्रोन के कॉन्फ़िगरेशन को संशोधित करने में सक्षम हो सकता है, जिसमें Wi-Fi पासवर्ड बदलना और संभावित रूप से ड्रोन के आंतरिक नेटवर्क तक पहुँच प्राप्त करना, रेडियो इंटरफ़ेस को सक्षम या अक्षम करना, एयरक्राफ्ट को रीस्टार्ट या पावर ऑफ करना, कॉन्फ़िगरेशन रीसेट करना, और अन्य क्रियाएँ करना शामिल है।
POC एक कमांड रजिस्ट्री प्रदान करता है जो Python स्रोत कोड को संशोधित किए बिना उपलब्ध कमांड्स का परीक्षण करने की अनुमति देता है। कमांड रजिस्ट्री, जिसमें कमांड, रिसीवर, प्रमाणीकरण आवश्यकताएँ, और प्रत्येक कमांड का विवरण शामिल है, commands.json में परिभाषित है।
| उत्पाद | प्रभावित संस्करण |
|---|---|
| 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-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
python3 ble_console.py
निम्नलिखित कमांड्स commands.json में पंजीकृत हैं। POC कमांड्स को read, configuration, radio-control, reset, system, और parameter ऑपरेशन्स में विभाजित करता है।
इन ऑपरेशन्स को POC में danger के रूप में वर्गीकृत किया गया है और इसलिए भेजे जाने से पहले स्पष्ट पुष्टि की आवश्यकता होती है।
Radio-control कमांड्स को संबंधित dji_network हैंडलर्स के माध्यम से लागू किया गया है।
| कमांड | यह क्या करता है |
|---|---|
| Factory Reset WIFI | Wi-Fi कॉन्फ़िगरेशन को उसकी डिफ़ॉल्ट स्थिति में पुनर्स्थापित करता है। |
| Factory Restore Params | नेटवर्क कॉन्फ़िगरेशन पैरामीटर तालिका को फैक्ट्री डिफ़ॉल्ट में पुनर्स्थापित करता है। |
POC दोनों ऑपरेशन्स को खतरनाक के रूप में चिह्नित करता है क्योंकि वे स्थायी कॉन्फ़िगरेशन को संशोधित करते हैं।
| कमांड | यह क्या करता है |
|---|---|
| Change a parameter | इसके 32-बिट नाम हैश का उपयोग करके ड्रोन कॉन्फ़िगरेशन पैरामीटर को बदलता है। |
| Reset a parameter | कॉन्फ़िगरेशन पैरामीटर को उसके फर्मवेयर डिफ़ॉल्ट में रीसेट करता है। |
POC flyc_parameters.txt से पैरामीटर नाम प्राप्त करता है और इंटरैक्टिव पैरामीटर चयन प्रदान करता है। एक ज्ञात पैरामीटर जोड़ने के लिए जिसे आप संशोधित या रीसेट करना चाहते हैं, उसका नाम flyc_parameters.txt में जोड़ें। POC शुरू होने पर पैरामीटर चयन के लिए उपलब्ध होगा।
commands.json संपादित करेंमेनू स्टार्टअप पर commands.json से उत्पन्न होता है। एक कमांड जोड़ने के लिए, किसी सेक्शन की commands सूची में एक नया ऑब्जेक्ट जोड़ें। अगली बार POC शुरू होने पर कमांड दिखाई देगा।
उदाहरण:
{
"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."
}
डिफ़ॉल्ट रिसीवर 0x07 (network:0) है और डिफ़ॉल्ट सेंडर 0x02 (mobile:0) है।
इंटरैक्टिव पेलोड बिल्डर्स payload_builders.py में परिभाषित हैं।
उपलब्ध बिल्डर्स में शामिल हैं:
ssidpskcountrymacchannelbss_typepower_levelrawएक नया बिल्डर जोड़ने के लिए, फ़ंक्शन को लागू करें, इसे BUILDERS में पंजीकृत करें, और commands.json से इसका नाम संदर्भित करें।
danger के रूप में वर्गीकृत कमांड्स को प्रसारण से पहले स्पष्ट पुष्टि की आवश्यकता होती है।
पुष्टि स्क्रीन निम्नलिखित जैसी जानकारी प्रदर्शित करती है:
──────────────────────────────────────────────────────────────────────
!!! 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:
DOES जानकारी कमांड के note से ली जाती है, जबकि अतिरिक्त चेतावनियाँ commands.json में warn फ़ील्ड से ली जाती हैं।
Change a parameter फ़ंक्शन flyc_parameters.txt में सूचीबद्ध ज्ञात कॉन्फ़िगरेशन पैरामीटर्स तक पहुँच प्रदान करता है।
एक पैरामीटर को नाम से चुना जा सकता है, एक मान के साथ आपूर्ति की जा सकती है, चयनित लिटिल-एंडियन चौड़ाई में परिवर्तित किया जा सकता है, और set_cfg_item (0x03/0xf9) का उपयोग करके भेजा जा सकता है।
Reset a parameter चयनित पैरामीटर को उसके फर्मवेयर डिफ़ॉल्ट में पुनर्स्थापित करने के लिए reset_cfg_item (0x03/0xfa) का उपयोग करता है।
POC कई पूर्वनिर्धारित मैक्रोज़ भी प्रदान करता है:
| मैक्रो | विवरण |
|---|---|
| Restart Wifi | Wi-Fi को बंद और शुरू करता है (0x42 के बाद 0x41)। |
| SET NEW PSK + Restart wifi | PSK को बदलता है और फिर Wi-Fi को रीस्टार्ट करता है। |
| Probe read commands | पंजीकृत read कमांड्स भेजता है और रिपोर्ट करता है कि कौन से कमांड्स प्रतिक्रिया देते हैं। |
मैक्रोज़ व्यक्तिगत कमांड प्रविष्टियों से अलग परिभाषित हैं।
⚠️ चेतावनी: यह प्रूफ ऑफ कॉन्सेप्ट पूरी तरह से शैक्षिक, सुरक्षा-अनुसंधान, और अधिकृत पेनेट्रेशन-टेस्टिंग उद्देश्यों के लिए है।
यह POC DJI ब्लूटूथ/DUML कमांड-हैंडलिंग इंटरफ़ेस में सुरक्षा समस्याओं को प्रदर्शित करता है। कुछ कमांड्स डिवाइस कॉन्फ़िगरेशन को संशोधित कर सकते हैं, रेडियो इंटरफ़ेस को अक्षम कर सकते हैं, कनेक्टिविटी को बाधित कर सकते हैं, एयरक्राफ्ट को रीबूट या पावर ऑफ कर सकते हैं, कॉन्फ़िगरेशन रीसेट कर सकते हैं, या संग्रहीत डेटा को हटा सकते हैं।
⚠️ इस POC का उपयोग किसी भी एयरक्राफ्ट, डिवाइस, नेटवर्क, या सिस्टम के विरुद्ध न करें जो आपके स्वामित्व में नहीं है या जिसका परीक्षण करने के लिए आपके पास स्पष्ट प्राधिकरण नहीं है।
कुछ कमांड्स डेटा हानि, कॉन्फ़िगरेशन परिवर्तन, कनेक्टिविटी की हानि, डिवाइस व्यवधान, या अन्य अनपेक्षित परिणाम का कारण बन सकते हैं। परीक्षण केवल एक नियंत्रित वातावरण में किया जाना चाहिए जहाँ एयरक्राफ्ट और आसपास के लोग और संपत्ति जोखिम में न हों।
लेखक किसी भी नुकसान, डेटा हानि, सेवा व्यवधान, एयरक्राफ्ट संचालन, या इस POC के उपयोग या दुरुपयोग से उत्पन्न होने वाले अन्य परिणामों के लिए ज़िम्मेदार नहीं हैं।
⚠️ इस POC का उपयोग करके, आप यह सुनिश्चित करने की ज़िम्मेदारी स्वीकार करते हैं कि आपका परीक्षण अधिकृत है और सभी लागू कानूनों, विनियमों, और जिम्मेदार-प्रकटीकरण आवश्यकताओं का अनुपालन करता है।
| कमांड | यह क्या करता है |
|---|
| GET SSID | कॉन्फ़िगर किए गए Wi-Fi SSID को प्राप्त करता है। |
| GET PSK | Wi-Fi WPA2 प्री-शेयर्ड की को प्राप्त करता है। |
| GET MAC | Wi-Fi AP MAC एड्रेस को प्राप्त करता है। |
| GET Country Code | दो-अक्षर वाले नियामक देश कोड को प्राप्त करता है। |
| GET Channel | वर्तमान में सक्रिय Wi-Fi चैनल को प्राप्त करता है। |
| GET Band | कॉन्फ़िगर किए गए 2.4/5 GHz बैंड चयन को प्राप्त करता है। |
| GET RSSI | RSSI हैंडलर को क्वेरी करता है; इस फर्मवेयर बिल्ड में एक स्टब इम्प्लीमेंटेशन शामिल है। |
| GET WiFi/BT status | Wi-Fi और ब्लूटूथ रेडियो स्थिति को प्राप्त करता है। |
| GET Device Info/Model | डिवाइस और मॉडल जानकारी प्राप्त करता है। |
| GET Version | डेमन संस्करण प्राप्त करता है। |
| GET Bluetooth Name | ब्लूटूथ डिवाइस नाम प्राप्त करता है। |
| कमांड | यह क्या करता है |
|---|
| SET SSID | कॉन्फ़िगर किए गए Wi-Fi SSID को बदलता है। |
| SET PSK | कॉन्फ़िगर किए गए Wi-Fi पासवर्ड को बदलता है। |
| SET MAC Address | रनटाइम Wi-Fi BSSID कॉन्फ़िगरेशन को बदलता है। |
| SET Country Code | कॉन्फ़िगर किए गए नियामक देश कोड को बदलता है। |
| SET Country Code Ext | विस्तारित देश-कोड कॉन्फ़िगरेशन को संभालता है। |
| SET Channel | Wi-Fi चैनल को बदलता है और AP को रीस्टार्ट करने का कारण बनता है। |
| कमांड | यह क्या करता है |
|---|
| Start WIFI | Wi-Fi इंटरफ़ेस और संबंधित सेवाओं को शुरू करता है। |
| Stop WIFI | Wi-Fi इंटरफ़ेस को बंद करता है। |
| Restart WIFI + BT | Wi-Fi और ब्लूटूथ सबसिस्टम को रीस्टार्ट करता है। |
| Start Bluetooth | ब्लूटूथ सबसिस्टम को शुरू करता है। |
| Stop Bluetooth | ब्लूटूथ सबसिस्टम को बंद करता है और वर्तमान सत्र को समाप्त करता है। |
| Sysmode power control | Wi-Fi/ब्लूटूथ पावर स्थिति को नियंत्रित करता है। |
| कमांड | यह क्या करता है |
|---|
ftpd_start | dji_ftpd सेवा को शुरू करता है। |
storage_export_enable | स्टोरेज-एक्सपोर्ट कॉन्फ़िगरेशन को सक्षम करता है। |
storage_export_disable | स्टोरेज-एक्सपोर्ट कॉन्फ़िगरेशन को अक्षम करता है। |
play_sound | एयरक्राफ्ट ध्वनि को ट्रिगर करता है। |
mute | एयरक्राफ्ट स्पीकर को म्यूट करता है। |
unmute | एयरक्राफ्ट स्पीकर को अनम्यूट करता है। |
reboot_plain | एयरक्राफ्ट को रीबूट करता है। |
reboot_poweroff | एयरक्राफ्ट को पावर ऑफ करता है। |
reboot_powersave | एयरक्राफ्ट को पावर-सेव मोड में डालता है। |
device_reset L1 config | सिस्टम, फ्लाइट-कंट्रोलर, गिम्बल, कैमरा, Wi-Fi, और SDR कॉन्फ़िगरेशन को रीसेट करता है। |
device_reset L2 +MEDIA | L1 रीसेट करता है और मीडिया/स्टोरेज को फॉर्मेट करता है। |
device_reset L3 +log | L2 रीसेट करता है और अतिरिक्त रूप से सिस्टम लॉग को साफ़ करता है। |
| फ़ील्ड | आवश्यक | अर्थ |
|---|
label | हाँ | मेनू में प्रदर्शित टेक्स्ट। |
cmd_set | हाँ | DUML कमांड-सेट पहचानकर्ता। |
cmd_id | हाँ | DUML कमांड पहचानकर्ता। |
receiver | हाँ | वायर रिसीवर बाइट, (index << 5) | type। |
payload | नहीं | हेक्स पेलोड। |
tier | नहीं | read, write, या danger। |
builder | नहीं | इंटरैक्टिव पेलोड बिल्डर। |
auth | नहीं | इंगित करता है कि विश्वसनीय UUID आवश्यक है। |
bt_reply | नहीं | नियंत्रित करता है कि POC ब्लूटूथ प्रतिक्रिया की प्रतीक्षा करता है या नहीं। |
sender | नहीं | सेंडर बाइट; डिफ़ॉल्ट 0x02 है। |
after | नहीं | वैकल्पिक फॉलो-अप क्रिया। |
note | नहीं | POC द्वारा दिखाया गया रिवर्स-इंजीनियरिंग विवरण। |
warn | नहीं | खतरनाक कमांड्स के लिए प्रदर्शित अतिरिक्त चेतावनी टेक्स्ट। |
| फ़ाइल | भूमिका |
|---|
ble_console.py | मुख्य प्रवेश बिंदु, मेनू और कमांड निष्पादन। |
commands.json | कमांड रजिस्ट्री और कमांड विवरण। |
ble_transport.py | ब्लूटूथ GATT स्कैनिंग, कनेक्शन और प्रतिक्रिया प्रबंधन। |
duml_protocol.py | DUML v1 पैकेट निर्माण और CRC प्रबंधन। |
duml_decoders.py | प्रतिक्रिया डिकोडिंग और रिटर्न-कोड प्रबंधन। |
payload_builders.py | इंटरैक्टिव पेलोड जनरेशन। |
parameters.py | कॉन्फ़िगरेशन पैरामीटर हैशिंग और ऑपरेशन्स। |
terminal.py | टर्मिनल UI, प्रॉम्प्ट और आउटपुट प्रबंधन। |
flyc_parameters.txt | ज्ञात कॉन्फ़िगरेशन पैरामीटर नाम। |
requirements.txt | Python निर्भरताएँ। |