Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/wh02m1/cve-2026-78306
Embedded Systems SecurityBluetooth SecurityIoT SecurityPayload GenerationVulnerability AnalysisExploitationWireless SecurityPenetration TestingHardware & IoT Security
GitHubwh02m1/cve-2026-78306

CVE-2026-78306

DJI 드론 Bluetooth DUML 명령 주입을 악용하여 인증되지 않은 명령을 전송해 자격 증명을 읽고, Wi-Fi 구성을 변경하며, 항공기 시스템을 제어하는 개념 증명.

51일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

CVE-2026-78306 — 블루투스를 통한 DJI DUML 명령 주입 POC

설명

DJI 드론은 드론의 Wi-Fi 인터페이스에 연결을 설정하고 Wi-Fi 자격 증명을 교환하는 데 사용되는 블루투스 인터페이스를 노출합니다.

블루투스 인터페이스는 세 가지 명령에 대해 장치의 신뢰할 수 있는 UUID를 확인합니다:

  • SSID 가져오기
  • PSK 가져오기
  • MAC 주소 가져오기

나머지 명령은 동일한 인증 검사를 요구하지 않습니다. 결과적으로 블루투스 범위 내에 있는 원격 공격자가 드론에 무단 DUML 명령을 전송할 수 있습니다.

명령에 따라 공격자는 Wi-Fi 비밀번호 변경을 포함한 드론의 구성을 수정하고, 잠재적으로 드론의 내부 네트워크에 접근하고, 무선 인터페이스를 활성화 또는 비활성화하고, 항공기를 재시작하거나 전원을 끄고, 구성을 초기화하고, 기타 작업을 수행할 수 있습니다.

POC는 Python 소스 코드를 수정하지 않고 사용 가능한 명령을 테스트할 수 있는 명령 레지스트리를 제공합니다. 명령, 수신자, 인증 요구 사항 및 각 명령에 대한 설명을 포함한 명령 레지스트리는 commands.json에 정의되어 있습니다.

영향을 받는 제품

제품영향을 받는 버전
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

설치

1. 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. 드론 전원 켜기

3. POC 실행

root@kitploit:~
python3 ble_console.py

4. 스캔 후 드론 SSID 선택

image

명령 참조

다음 명령은 commands.json에 등록되어 있습니다. POC는 명령을 읽기, 구성, 무선 제어, 초기화, 시스템 및 매개변수 작업으로 구분합니다.

읽기 명령

쓰기 구성 명령

이러한 작업은 POC에서 danger로 분류되므로 전송 전에 명시적인 확인이 필요합니다.

무선 제어 명령

무선 제어 명령은 해당 dji_network 핸들러를 통해 구현됩니다.

초기화 명령

명령수행하는 작업
Factory Reset WIFIWi-Fi 구성을 기본 상태로 복원합니다.
Factory Restore Params네트워크 구성 매개변수 테이블을 공장 기본값으로 복원합니다.

POC는 두 작업 모두 영구 구성을 수정하므로 위험한 것으로 표시합니다.

시스템 명령

매개변수 명령

명령수행하는 작업
Change a parameter32비트 이름 해시를 사용하여 드론 구성 매개변수를 변경합니다.
Reset a parameter구성 매개변수를 펌웨어 기본값으로 초기화합니다.

POC는 flyc_parameters.txt에서 매개변수 이름을 가져오고 대화형 매개변수 선택을 제공합니다. 수정하거나 초기화하려는 알려진 매개변수를 추가하려면 해당 이름을 flyc_parameters.txt에 추가하십시오. 그러면 POC가 시작될 때 해당 매개변수를 선택할 수 있습니다.

명령 추가: 코드가 아닌 commands.json 편집

메뉴는 시작 시 commands.json에서 생성됩니다. 명령을 추가하려면 섹션의 commands 목록에 새 객체를 추가하십시오. 명령은 다음에 POC가 시작될 때 나타납니다.

예:

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."
}

명령 필드

기본 수신자는 0x07(network:0)이고 기본 발신자는 0x02(mobile:0)입니다.


페이로드 빌더

대화형 페이로드 빌더는 payload_builders.py에 정의되어 있습니다.

사용 가능한 빌더는 다음과 같습니다:

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

새 빌더를 추가하려면 함수를 구현하고 BUILDERS에 등록한 다음 commands.json에서 해당 이름을 참조하십시오.


확인 화면

danger로 분류된 명령은 전송 전에 명시적인 확인이 필요합니다.

확인 화면에는 다음과 같은 정보가 표시됩니다:

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:

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 WifiWi-Fi를 중지하고 시작합니다(0x42 다음에 0x41).
SET NEW PSK + Restart wifiPSK를 변경한 다음 Wi-Fi를 재시작합니다.
Probe read commands등록된 읽기 명령을 전송하고 응답하는 명령을 보고합니다.

매크로는 개별 명령 항목과 별도로 정의됩니다.


파일


⚠️ 면책 조항

⚠️ 경고: 이 개념 증명은 교육, 보안 연구 및 승인된 침투 테스트 목적으로만 사용하도록 의도되었습니다.

이 POC는 DJI 블루투스/DUML 명령 처리 인터페이스의 보안 문제를 보여줍니다. 일부 명령은 장치 구성을 수정하고, 무선 인터페이스를 비활성화하고, 연결을 중단하고, 항공기를 재부팅하거나 전원을 끄고, 구성을 초기화하거나, 저장된 데이터를 삭제할 수 있습니다.

⚠️ 소유하지 않았거나 테스트에 대한 명시적 승인이 없는 항공기, 장치, 네트워크 또는 시스템에 대해 이 POC를 사용하지 마십시오.

일부 명령은 데이터 손실, 구성 변경, 연결 손실, 장치 중단 또는 기타 의도하지 않은 결과를 초래할 수 있습니다. 테스트는 항공기와 주변 사람 및 재산이 위험에 처하지 않는 통제된 환경에서만 수행해야 합니다.

저자는 이 POC의 사용 또는 오용으로 인해 발생하는 모든 손해, 데이터 손실, 서비스 중단, 항공기 작동 또는 기타 결과에 대해 책임지지 않습니다.

⚠️ 이 POC를 사용함으로써 귀하는 테스트가 승인되었고 모든 적용 가능한 법률, 규정 및 책임 있는 공개 요구 사항을 준수하도록 보장할 책임을 수락합니다.

도구 다운로드
명령수행하는 작업
GET SSID구성된 Wi-Fi SSID를 검색합니다.
GET PSKWi-Fi WPA2 사전 공유 키를 검색합니다.
GET MACWi-Fi AP MAC 주소를 검색합니다.
GET Country Code두 글자 규제 국가 코드를 검색합니다.
GET Channel현재 활성화된 Wi-Fi 채널을 검색합니다.
GET Band구성된 2.4/5 GHz 대역 선택을 검색합니다.
GET RSSIRSSI 핸들러를 쿼리합니다. 이 펌웨어 빌드에는 스텁 구현이 포함되어 있습니다.
GET WiFi/BT statusWi-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 ChannelWi-Fi 채널을 변경하고 AP를 재시작합니다.
명령수행하는 작업
Start WIFIWi-Fi 인터페이스 및 관련 서비스를 시작합니다.
Stop WIFIWi-Fi 인터페이스를 중지합니다.
Restart WIFI + BTWi-Fi 및 블루투스 하위 시스템을 재시작합니다.
Start Bluetooth블루투스 하위 시스템을 시작합니다.
Stop Bluetooth블루투스 하위 시스템을 중지하고 현재 세션을 종료합니다.
Sysmode power controlWi-Fi/블루투스 전원 상태를 제어합니다.
명령수행하는 작업
ftpd_startdji_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 +MEDIAL1 초기화를 수행하고 미디어/스토리지를 포맷합니다.
device_reset L3 +logL2 초기화를 수행하고 추가로 시스템 로그를 지웁니다.
필드필수의미
label예메뉴에 표시되는 텍스트.
cmd_set예DUML 명령 세트 식별자.
cmd_id예DUML 명령 식별자.
receiver예와이어 수신자 바이트, (index << 5) | type.
payload아니오16진수 페이로드.
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.pyDUML v1 패킷 구성 및 CRC 처리.
duml_decoders.py응답 디코딩 및 반환 코드 처리.
payload_builders.py대화형 페이로드 생성.
parameters.py구성 매개변수 해싱 및 작업.
terminal.py터미널 UI, 프롬프트 및 출력 처리.
flyc_parameters.txt알려진 구성 매개변수 이름.
requirements.txtPython 종속성.