
Unitree 로봇용 BLE 익스플로잇 프레임워크: 하드코딩된 AES 키를 통한 명령 주입으로 원격 장악, 페이로드 주입, 웜형 전파가 가능합니다.

저자: Bin4ry, 본명 Andreas Makris [[email protected]]
공동 저자: h0stile, 본명 Kevin Finisterre
기여자: legion1581, 본명 Konstantin Severov (theroboverse 소속). 주입용 페이로드 수정을 도왔고 완전히 작동하는 PoC로 이를 입증했습니다. 🙂 고마워요, 정말 중요한 기여였고, 매우 감사합니다!
날짜: 2025년 9월 20일
CVE-2025-35027
CVE-2025-60017
CVE-2025-60250
CVE-2025-60251
이 저장소의 연구는 Unitree G1에 대한 체계적인 보안 평가를 제시하는 논문에 포함되어 있습니다. 그러나 이 연구의 영향력은 G1에만 국한되지 않고, Go2 시리즈부터 시작하는 전체 Unitree 제품 라인에 영향을 미칩니다. 최신 Unitree 로봇의 코드는 Go2 코드베이스의 포크로 보이며, 구체적으로 Go1 계열 및 기타 Go2 이전 Unitree 로봇은 취약하지 않습니다. 그러나 현재 모든 최신 변형은 영향을 받습니다. Unitree는 아직 제품 라인 전반에 걸친 정확한 영향 범위를 설명하는 권고문을 발표하지 않았습니다.
논문 링크: https://arxiv.org/abs/2509.14139
제목: Cybersecurity AI: Humanoid Robots as Attack Vectors
저자: Víctor Mayoral-Vilches, Andreas Makris, Kevin Finisterre```bibtex
@misc{mayoralvilches2025cybersecurityaihumanoidrobots,
title={Cybersecurity AI: Humanoid Robots as Attack Vectors},
author={Víctor Mayoral-Vilches and Andreas Makris and Kevin Finisterre},
year={2025},
eprint={2509.14139},
archivePrefix={arXiv},
primaryClass={cs.CR},
url={https://arxiv.org/abs/2509.14139},
}
목차
=================
* [Unitree 로봇 BLE 서비스 명령 주입 분석](#unitree-robot-ble-service-command-injection-analysis)
* [개요](#overview)
* [BLE 서비스 탐색](#ble-service-discovery)
* [프로토콜 리버스 엔지니어링](#reverse-engineering-the-protocol)
* [명령 1: "보안" 핸드셰이크](#instruction-1-the-secure-handshake)
* [명령 2: 일련 번호 가져오기](#instruction-2-get-serial-number)
* [명령 3: WiFi 모드 초기화](#instruction-3-initialize-wifi-mode)
* [명령 4: SSID 설정](#instruction-4-set-ssid)
* [명령 5: 비밀번호 설정](#instruction-5-set-password)
* [명령 6: 국가 코드 설정 (트리거!)](#instruction-6-set-country-code-the-trigger)
* [WiFi 설정 스레드](#the-wifi-setting-thread)
* [취약한 함수: 명령 주입](#the-vulnerable-function-command-injection)
* [공격 흐름 요약](#attack-flow-summary)
* [웜 확산 가능한 위협](#the-wormable-threat)
* [개념 증명](#proof-of-concept)
* [실제 배포 & 영향](#real-world-deployment--impact)
* [현재 배포 현황](#current-deployments)
* [영향 평가](#impact-assessment)
* [법 집행 & 군사적 영향](#law-enforcement--military-impact)
* [기업 환경](#corporate-environments)
* [소비자 영향](#consumer-impact)
* [웜 확산 경로](#wormable-propagation)
* [기술 세부 사항](#technical-details)
* [BLE 서비스 아키텍처](#ble-service-architecture)
* [암호화 매개변수](#cryptographic-parameters)
* [패킷 구조](#packet-structure)
* [교훈](#lessons-learned)
* [공개 타임라인](#disclosure-timeline)
* [플래그십 G1, Go2 및 기타 봇에서 또 다른 보안 문제를 보고하려는 첫 번째이자 마지막 시도](#first-and-last-attempt-to-report-another-security-issue-in-your-flagship-g1-and-go2-and-other-bots)
* [면책 조항](#disclaimer)
* [보안 문제의 패턴](#a-pattern-of-security-issues)
* [결론](#conclusion)
* [법적 고지](#legal-notice)
* [기여](#contributing)
* [라이선스 및 파일 접근](#licensing-and-access-to-these-files)
---
## 개요
Unitree 로봇 플랫폼에 대한 보안 연구 중, 우리는 BLE(Bluetooth Low Energy) Wi-Fi 구성 인터페이스에서 심각한 취약점을 발견했습니다. 이 취약점은 오늘[2025년 9월 20일] 기준 최신 펌웨어까지의 Go2, G1, H1 및 B2 시리즈 로봇을 포함한 여러 Unitree 로봇 모델에 영향을 미칩니다.
**🎯 이것은 휴머노이드 로봇을 표적으로 하는 최초의 공개적으로 공개된 익스플로잇입니다!**
이 취약점은 하드코딩된 암호화 키, 사소한 인증 우회, 그리고 검증되지 않은 명령 주입 등 여러 보안 문제를 결합합니다. 특히 우려되는 점은 완전히 **웜 가능(wormable)** 하다는 것입니다. 감염된 로봇은 BLE 범위 내의 다른 로봇을 자동으로 손상시킬 수 있습니다. 이 취약점으로 공격자는 장치를 완전히 장악할 수 있습니다.
우리는 7월에 암호화 키를 공개했습니다 [트윗 링크](https://x.com/Bin4ryDigit/status/1950566849072005304) 하지만 Unitree는 신경 쓰지 않았습니다.
이 취약점을 어떻게 발견하고 악용했는지 기술적 세부 사항을 자세히 살펴보겠습니다.
## BLE 서비스 탐색
첫 번째 단계는 로봇이 노출하는 BLE 서비스를 식별하는 것이었습니다. 영향을 받는 모든 Unitree 모델은 Wi-Fi 구성을 위한 사용자 지정 BLE 서비스를 노출합니다:```
Service UUID: 0000ffe0-0000-1000-8000-00805f9b34fb
Write Characteristic: 0000ffe2-0000-1000-8000-00805f9b34fb
Notify Characteristic: 0000ffe1-0000-1000-8000-00805f9b34fb
리버스 엔지니어링을 통해 로봇이 암호화된 BLE 패킷을 처리하는 수신 관리자를 구현한다는 것을 발견했습니다. 발견된 내용은 다음과 같습니다:

수신 관리자는 먼저 하드코딩된 AES 파라미터를 사용하여 수신 패킷을 복호화합니다:```python AES_KEY = "df98b715d5c6ed2b25817b6f2554124a" AES_IV = "2841ae97419c2973296a0d4bdfe19a4f" Mode: AES-CFB128

복호화 후, 패킷은 switch-case 구조의 명령 코드에 따라 처리됩니다. 각 명령을 살펴보겠습니다:
## 명령 1: "보안" 핸드셰이크

핸드셰이크 "인증"은 웃길 정도로 단순합니다:


기본적으로 로봇은 복호화된 패킷에 핸드셰이크 비밀값으로 문자열 `"unitree"`가 포함되어 있는지 확인한 다음, `valid_incoming_user` 플래그를 1로 설정합니다. 이것이 "인증" 메커니즘의 전부입니다!
## 명령 2: 일련번호 가져오기

이 명령은 사용자가 "인증"되었는지(즉, 플래그가 설정되었는지) 확인한 다음, 일련번호 파일을 읽어 반환합니다. 이를 통해 시스템에 접근 권한이 있음을 확인할 수 있습니다.
## 명령 3: WiFi 모드 초기화
이 명령은 WiFi 설정을 초기화합니다. 사용자는 AP 모드(하위 명령 = 1) 또는 STA 모드(하위 명령 = 2) 중에서 선택할 수 있습니다:

## 명령 4: SSID 설정
이 명령은 WiFi SSID를 저장합니다. 여기가 첫 번째 주입 지점입니다:

## 명령 5: 비밀번호 설정
SSID 명령과 유사하게, 이 명령은 WiFi 비밀번호를 저장합니다. 또 다른 주입 지점입니다:

## 명령 6: 국가 코드 설정 (트리거!)
이 명령은 WiFi 국가 코드를 설정하고, 핵심적으로 `WifiSettingThreadFunction`을 트리거합니다:

명령 6이 실행되면 WiFi 구성 스레드가 시작되어 취약한 함수들로 연결됩니다.
## WiFi 설정 스레드
WiFi 구성 스레드는 모드에 따라 `restart_wifi_ap` 또는 `restart_wifi_sta`를 호출합니다:

## 취약한 함수: 명령 주입
`restart_wifi_ap`(`hostapd_restart.sh`) 및 `restart_wifi_sta`(`wpa_supplicant_restart.sh`) 함수 모두 동일한 취약 패턴을 따릅니다.
결정적 증거는 다음과 같습니다(`restart_wifi_ap` 함수를 예로 사용):

이 함수는 다음 명령을 구성합니다:```bash
sudo sh /unitree/module/network_manager/upper_bluetooth/hostapd_restart.sh "wifi_ssid wifi_pass"
이 명령은 입력값에 대한 검증이나 필터링 없이 **system()**에 직접 전달됩니다!
wifi_ssid 또는 wifi_pass 중 하나라도 제어할 수 있다면, 자신만의 명령을 주입할 수 있습니다. 다음과 같은 간단한 페이로드를 사용할 수 있습니다:```bash
";$(reboot -f);#
로봇을 재부팅하기에 충분할 것입니다. 하지만 우리는 훨씬 더 많은 것을 할 수 있습니다...
## 공격 흐름 요약
다음은 실행해야 하는 전체 공격 시퀀스입니다:
1. AES 암호화된 페이로드 "unitree"를 명령 1의 데이터로 전송
2. get_sn 명령을 전송하고 응답을 복호화하여 접근 권한을 확인
3. 하위 명령 1(AP) 또는 2(STA)로 init_wifi 전송
4. wifi_ssid를 `";$(reboot -f);#` 와 같은 주입 페이로드로 설정
5. wifi_pass를 임의의 값으로 설정
6. 취약한 스레드를 트리거하기 위해 wifi 국가 코드 설정