
作者: 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});#'

Unitree 机器人已被部署在关键的实际场景中,这使得该漏洞尤为令人担忧:
执法机构: 诺丁汉郡警方目前正在试用 Unitree 机器人 用于武装响应场景,包括:
军事行动: Unitree 机器人正被中国解放军(PLA)使用 用于军事应用,这对国防行动产生了重大的安全影响。
该漏洞的影响相当严重:
0000ffe0-0000-1000-8000-00805f9b34fb0000ffe2-0000-1000-8000-00805f9b34fb0000ffe1-0000-1000-8000-00805f9b34fbdf98b715d5c6ed2b25817b6f2554124a(硬编码,所有设备相同)2841ae97419c2973296a0d4bdfe19a4f(硬编码,所有设备相同)Encrypted([0x52, length, instruction, data, checksum])
## 经验教训
这项研究突出了几个关键的安全原则:
- **决不使用硬编码密钥:** 每台设备都应有唯一的加密材料
- **纵深防御:** 多层安全措施可防止单点故障
- **输入验证:** 始终对用户输入进行清理,尤其是在系统调用之前
- **安全测试:** 定期渗透测试可以尽早发现这些问题
## 披露时间线
我们最初尝试就这一漏洞与宇树(Unitree)进行负责任披露:
- **发现漏洞:** 该漏洞于 2025 年 4 月 14 日由 Andreas Makris(Bin4ry)发现,并在 Slack 私信中与 Kevin Finisterre(h0stile)和 Konstantin Severov(legion1581)讨论。

- **开发 PoC:** 2025 年 4 月 25 日,Konstantin Severov 修复了 Andreas 的错误 payload,并为注入构造了正确可用的 payload。第一个 PoC 诞生了。

- **发现不安全的 BLE**:在 Konstantin 验证注入漏洞后,Andreas 发现了 BLE 的硬编码密钥和弱认证。
- **初步联系:** 多封邮件被发送至宇树的安全与支持渠道
- **沟通问题:** 其中一位作者(Andreas Makris)多次被毫无解释地从邮件链中移除
- **没有回应:** 宇树未表现出解决安全问题的任何实质性参与或兴趣
- **结果:** 未提供任何确认或修复时间表
鉴于宇树缺乏回应且明显对安全问题不感兴趣,**Andreas Makris 已决定未来不再就漏洞向宇树进行私下披露尝试**。任何额外发现的安全问题将在不事先通知厂商的情况下公开披露。
这一决定反映了宇树在安全事务上显然不愿进行建设性接触,考虑到其产品部署于执法和军事环境,这一点尤其令人担忧。
### 第一次,也是最后一次尝试报告你们旗舰产品 G1、Go2 及其他机器人中的另一个安全问题
(由 Kevin Finisterre 发起)
- **2025 年 5 月 14 日** — 通过 [LinkedIn](https://www.linkedin.com/posts/kevin-finisterre-6431069a_fyi-unitree-robotics-is-being-given-an-opportunity-activity-7328446278852407296-qZB4) 和 [GitHub issue #126](https://github.com/unitreerobotics/unitree_ros/issues/126) 尝试披露联系,尽管多年来宇树一直无视*我们*及我们研究同行提交的其他报告尝试。
-
标题为 *“第一次,也是最后一次尝试报告你们旗舰产品 G1、Go2 及其他机器人中的另一个安全问题”* 的邮件发送至:
Tony Yang <[email protected]>, <[email protected]>, <[email protected]>, Laikago <[email protected]>, <[email protected]>, <[email protected]>, <[email protected]>, Xing <[email protected]>, XMath <[email protected]>, <[email protected]>, <[email protected]>, <[email protected]>, <[email protected]>
- 宇树立即暗示未来可能有漏洞赏金计划,但此时讨论还为时过早。
- **2025 年 5 月 28–29 日** — 经过两周讨论宇树对安全缺乏*严肃性*的问题后,作为努力的一种姿态创建了 `[email protected]`。
-
标题为 *“下一步...关于报告 Unitree G1 中的严重漏洞”* 的邮件指出了披露实践的缺失、无视 Darknavy 及之前的报告,并提议要么进行带调试构建的当面演示,要么提供一台借用机器人(就像宇树发给网红的那些)。两个提议都被拒绝了,包括在 ICRA 会面的提议。
- **2025 年 6 月 8 日** — 宇树回应:“与 Go1 ‘Zhexi' 相关的补丁已于 4 月上线”,并附上链接 <https://www.unitree.com/download/go1>,还说“Github 仅用于仓库运行问题。因此对于网络安全,我们建议使用现在的方式。”回复逐渐减少。
- **2025 年 6 月 14–26 日** — 我们追问 MIT Cheetah 许可代码的透明度问题;而不是使用加密例程,并限制对其 linux 子系统实例的访问来混淆借用代码。
- 6 月 26 日收到回复:*“抱歉回复晚了。我没忘。只是需要更多时间。”*
- 大约在此期间,宇树发布了安全岗位的招聘信息。 [职位列表](https://m.zhipin.com/web/common/security-check.html?seed=F0HDtXiugDFyEi4Ap0g8%2FTu2hnxkObxC1s2HV5XA8%2Fw%3D&name=8955eed0&ts=1757704720826&callbackUrl=%2Fjob_detail%2F8f6b34a1ca755b4f03Fz2tq7EFVU.html&srcReferer)
- **2025 年 7 月 18 日** — 由于对方沉默,且在协商披露边界方面没有进展,发送了标题为 *“所所所所以我们都完了吗?因为我快完了……”* 的邮件。
- **2025 年 7 月 20 日** — 宇树承认我们掌握了“G1 已知漏洞”,但声称用修复来解决我们所谓的发现“需要整个系统迭代,耗时*数个季度或数年*”,并将即将推出的公共安全门户作为一个里程碑。
- **2025 年 7 月 25 日** — 宇树启动了 R1 营销。此后,未再收到任何沟通。
- 我们决定公开披露,让宇树按自己的时间表去处理。以后不会再尝试对新发现进行披露。
- **2025 年 9 月 2 日** - 宇树宣布在 2025 年第四季度的首次公开募股中寻求 70 亿美元的估值目标。
## 免责声明
⚠️ **警告:** 本代码仅用于教育和研究目的。请勿在非你拥有的设备上使用。
## 安全问题模式
这一漏洞并非孤立事件。我们此前的研究已揭示出宇树安全实践中令人担忧的模式:
**CVE-2025-2894:** [研究人员在早期 Go1 系列机器人中发现了后门](https://takeonme.org/cves/cve-2025-2894/),宇树后来声称那是“遗留代码”。然而,正如我们在 Go1 报告中所指出的,无论是有意后门还是编程草率,这两种情况都表明一家不把安全放在首位的公司。
现在,在下一代机器人(Go2、G1、H1、B2)中,我们看到了同样的根本性安全缺陷:硬编码密钥、微不足道的认证以及不安全的系统调用。这表明**宇树并未从以往的安全问题中吸取教训**,仍在继续发布带有严重漏洞的产品。
模式很清晰:
- **Go1 系列:** 隐藏后门(CVE-2025-2894)
- **DarkNavy 未公开报告** “在 GeekPwn 2022 中,我们……联系了宇树进行负责任披露(但未收到任何回应)”
- **Go2/G1/H1/B2 系列:** 通过 BLE 进行命令注入(本研究)
对于一家在执法和军事环境中部署机器人的公司来说,这种程度的安全疏忽是不可接受的。
## 结论
硬编码加密密钥、微不足道的认证绕过和命令注入的组合,为大规模利用制造了一场完美风暴。该漏洞的可蠕虫化特性使其在拥有多台机器人的环境中尤为危险。
鉴于宇树在安全问题上的记录及其在关键执法和军事场景中的部署,必须立即采取行动解决这些系统性的安全缺陷。
我们遵循了负责任披露实践,并与宇树合作解决这些问题。本研究仅用于教育和防御目的。
---
## 法律声明
⚖️ 本研究是在合法拥有的设备上为教育和安全研究目的进行的。出于恶意目的使用这些信息均被严格禁止,并可能违反适用法律。
记住:能力越大,责任越大。请利用这些知识构建更好、更安全的系统!
## 贡献
如果你发现其他问题或改进点,请随时提交拉取请求或开启 issue。
## 许可,以及这些文件的访问
这些文件以知识共享 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) 许可发布。
<p align="left">
<img src="https://assets.kitploit.com/production/public/readmes/49064/29490d1f406beb842255421807acdf0e4327f9cdf7547041398560fd7452a5ea.png">
</p>
本许可授予你使用这些文件的特定但有限的权利。
<p align="left">
<img src="https://assets.kitploit.com/production/public/readmes/49064/00bb7938b330aa21407316a9f3d62fdad4e502fddc76237f7ae4e6b518386dcb.png">
</p>
[署名-非商业性使用-相同方式共享 4.0 国际许可协议](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.en)
你可以自由地:<br>
共享 — 以任何媒介或格式复制和重新分发本材料<br>
改编 — 重新混合、转换并基于本材料进行创作<br>
只要你遵守许可条款,许可人就不能撤销这些自由。<br>
在以下条款下:<br>
署名 — 你必须给予适当署名,提供指向本许可的链接,并说明是否作出了修改。你可以以任何合理方式这样做,但不得以任何方式暗示许可人认可你或你的使用。<br>
非商业性使用 — 你不得将本材料用于商业目的。<br>
相同方式共享 — 如果你对本材料进行重新混合、转换或创作,你必须以与原始材料相同的许可协议分发你的贡献。<br>
无额外限制 — 你不得施加法律条款或技术措施,在法律上限制他人从事本许可所允许的任何行为。<br>
声明:请阅读 [知识共享非商业性使用解释](https://wiki.creativecommons.org/wiki/NonCommercial_interpretation) 以获取有关许可的更多信息。<br>
这直接意味着你不能对这些文件的访问收费,也不能将其添加到你的商业漏洞利用平台或将其置于付费墙之后,因为你明确没有这样做的权限;事实上,除非承担潜在的法律后果,否则你被明确禁止这样做。
本研究以教育目的分享。请负责任地使用。