
作者: Bin4ry 又名 Andreas Makris [[email protected]]
合著者: h0stile 又名 Kevin Finisterre
贡献者: legion1581 又名 Konstantin Severov,来自 theroboverse,帮助修复了注入的 payload,并通过一个完整可用的 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},
}
目录
=================
* [宇树机器人 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)
---
## 概述
在对宇树机器人平台进行安全研究期间,我们在低功耗蓝牙(BLE)Wi-Fi 配置接口中发现了一个严重漏洞。该漏洞影响多款宇树机器人型号,包括 Go2、G1、H1 和 B2 系列机器人,涵盖截至今日 [2025 年 9 月 20 日] 的最新固件。
**🎯 这是首个公开披露的针对人形机器人的漏洞利用!**
该漏洞结合了多个安全问题:硬编码加密密钥、极易实现的认证绕过,以及未经过滤的命令注入。尤其令人担忧的是,它具有完全的**蠕虫式传播**能力——被感染的机器人可以自动攻击 BLE 范围内的其他机器人。该漏洞允许攻击者完全接管设备。
我们于 7 月公布了加密密钥[推文链接](https://x.com/Bin4ryDigit/status/1950566849072005304),但宇树并未在意。
让我们深入了解我们如何发现并利用这一漏洞的技术细节。
## BLE 服务发现
第一步是识别机器人暴露的 BLE 服务。所有受影响的宇树型号都暴露了一个用于 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. 发送 `init_wifi`,子命令为 1(AP)或 2(STA)
4. 将 `wifi_ssid` 设置为我们的注入载荷,例如 `";$(reboot -f);#`
5. 将 `wifi_pass` 设置为任意值
6. 设置 WiFi 国家代码以触发易受攻击的线程
如果一切正常,机器人应以 root 权限执行我们注入的命令。
## 蠕虫式传播的威胁
这个漏洞之所以特别危险,在于其**可蠕虫传播**的特性。借助这种方法,我们可以:
- 以 root 权限运行任意命令
- 通过载荷注入传输并执行恶意软件
- 强制机器人连接到攻击者控制的 WiFi 网络
- 创建可在附近机器人之间传播的自我扩散型机器人恶意软件
被感染的机器人只需扫描 BLE 范围内的其他 Unitree 机器人并自动入侵它们,就能创建一个无需用户干预即可自行传播的机器人僵尸网络。
## 概念验证
我们开发了一套完整的概念验证漏洞利用框架,证实了该漏洞的存在。该利用框架包括:
- 基于 Python 的 BLE 扫描器与漏洞利用框架
- Android APK(此前于 2025 年 9 月 5 日在 Slack 频道中通过受 PWD 保护的 zip 分享给测试人员)
- 多种预置载荷(启用 SSH、系统重启、自定义命令)
- 支持所有受影响机型(Go2、G1、H1、B2……)
我们可用漏洞利用的关键组件:```python
AES_KEY = bytes.fromhex("df98b715d5c6ed2b25817b6f2554124a")
AES_IV = bytes.fromhex("2841ae97419c2973296a0d4bdfe19a4f")
HANDSHAKE_CONTENT = "unitree"
def build_pwn(cmd):
return f'";$({cmd});#'
