UniBLEed:宇树G1人形机器人蓝牙远程代码执行漏洞深度分析

导语:一台价值20万元的人形机器人,就因为你走近了它、打开蓝牙,就能被接管?是的。安全研究员奥利维耶·拉弗拉姆(Olivier Laflamme)刚刚公开了他在宇树G1人形机器人中发现的两个根级远程代码执行漏洞,攻击链横跨蓝牙、云端API和机器人内部网络,CVSS评分接近满分。更危险的是,这个漏洞可以像蠕虫一样在机器人之间自动传播——一台被控,周围的G1也难逃一劫。


一、事件概述

奥利维耶·拉弗拉姆(Olivier Laflamme)公开了他的最新研究成果——UniBLEed,一个影响所有宇树G1人形机器人的无认证根级远程代码执行漏洞。该漏洞允许攻击者在蓝牙范围内直接获取G1的最高root权限,从而完全控制机器人的所有物理动作。

G1是宇树科技(Unitree)推出的人形机器人,定价约20万人民币,是目前市场上少数已实现商用的双足人形机器人之一。就在漏洞公开前夕,宇树科技刚刚在科创板上市,DeepSeek还作为战略投资者参与认购,估值一度冲到约5000亿美元。资本市场火热,但安全底线却如此脆弱——这不是在泼冷水,这是在说:当一个能搬东西、能行走的机器人可以被远程接管,这就是物理世界的安全问题了。

奥利维耶共发现了两条独立的RCE攻击链,获得了两个CVE编号:

  • CVE-2026-76639:基于chat_go路径穿越 + bashrunner的RCE
  • CVE-2026-76640:基于蓝牙GATT写入 + 云端密钥解密 + BSS缓冲区溢出的5步RCE链

两条攻击链的奖金合计6700美元,其中RCE #2独得4000美元。


二、G1内部架构

理解漏洞之前,先看看G1的”五脏六腑”。G1内部有三台计算机,研究者最关注的是其中两台:

运动控制主机(Locomotion PC):这是核心目标,一块瑞芯微RK3588芯片,运行实时Linux内核(5.10.176-rt86+),以root身份运行28个服务进程,控制机器人几乎所有外设——摄像头、扬声器、语音交互、电机等。它只对外开放了一个TCP端口:9991。这是一个WebRTC信令服务器,同时也是连接外部和内部DDS总线的唯一入口。SSH?没有。Web界面?没有。调试控制台?也没有。宇树自己的文档都把它当作黑盒。

开发主机(Dev PC):英伟达Jetson Orin NX,运行Ubuntu,SSH端口22默认开放,用户名/密码:unitree/123,sudo免密——开箱即用的调试接口,代价是安全等于零。奥利维耶第一次测试时不小心在这个接口上触发了OTA升级的竞态条件,直接把整个/unitree目录给rm -rf了,第一次就把自己的G1写砖了。

运动控制主机才是目标。拿到它的shell,就等于拿到了机器人的完整控制权。


三、RCE #1:chat_go路径穿越

3.1 WebRTC入口

外部设备与运动控制主机通信的唯一途径是WebRTC信令。端口9991上运行着一个WebRTC桥接服务xfkTon,它将外部WebRTC连接转换为内部DDS(Data Distribution Service)总线请求。客户端通过SDP(会话描述协议)协商建立连接,传输层使用DTLS加密,看起来很安全——但前提是你得有一把钥匙。

这把钥匙是每台G1出厂时一次性生成、从不轮换的16字节AES-128密钥,存放路径是/unitree/etc/key/aes_key.bin。没有这把密钥,攻击者甚至无法读取机器人的RSA公钥,握手在第一步就会失败。

3.2 云端密钥Oracle

然而奥利维耶发现了一个致命的云端设计缺陷。Unitree的云端API端点/device/bindExtData接受任何已认证账户的请求,用RSA-OAEP-SHA-256加密的密钥blob加上机器人的序列号,就能让云端返回任意一台G1的AES-128明文密钥——无需验证账户与机器人的所有权关系。

这意味着:只要你能创建一个免费的Unitree账户,你就能拿到任何一台G1的通信密钥,无论那台机器人属于谁。

3.3 chat_go路径穿越到bashrunner

有了通信密钥后,攻击者可以向机器人发送DDS请求。机器人内部有一个AI聊天服务chat_go,它有一个知识库功能,支持从外部导入数据。奥利维耶发现这个功能存在路径穿越漏洞——攻击者可以构造特殊的文件名,将任意文件写入bashrunner进程的whitelist白名单目录。

bashrunner是一个特权进程,它在导入时对os.listdir()的返回值做过一次白名单检查,且该检查只执行一次,之后所有文件无论扩展名都会被当作shell脚本执行。攻击者利用这个特性,先写入一个恶意文件绕过那次一次性检查,再通过chat_go触发bashrunner将其执行为root shell。

3.4 从以太网或AP直接RCE

chat_go的路径穿越漏洞可以独立触发,不需要蓝牙。只要攻击者能接入机器人的网络(以太网或接入机器人发射的AP热点),就能在运动控制主机上获得root shell。这是RCE #1的完整攻击链。


四、RCE #2:蓝牙+BSS溢出链

4.1 蓝牙GATT特性:无需配对即可写入

这是整条攻击链最”性感”的部分。G1的蓝牙GATT服务中有一个特性0xFFE2,它在注册时只使用了bare WRITE权限——这意味着任何附近的蓝牙客户端都可以直接写入,无需配对,无需认证

这就是物理世界版”无头攻击”:攻击者走进一间有G1的屋子,打开蓝牙,发送数据,攻击就完成了——全程不需要任何交互。

4.2 引导码0xF2:明文返回AES密钥

发送引导码0xF2后,G1会在蓝牙响应中返回它的AES-128密钥,使用RSA加密(分四个通知发送)。拿到这个密钥后,攻击者可以完全解开BLE v3握手的通信内容,并进一步发送WiFi配置指令——把G1的WiFi强制定向到攻击者搭建的恶意热点上。

4.3 Heredoc注入:劫持WiFi连接

在强制G1连接恶意热点时,wpa_connect.sh脚本会调用wpa_supplicant,其中有一段不安全的unquoted heredoc处理逻辑,攻击者可以通过未转义的PSK(预共享密钥)字段将任意命令注入到wpa_supplicant的配置数据中,最终让G1加入攻击者控制的无线网络。

4.4 BSS缓冲区溢出:劫持事件循环

进入攻击者控制的网络后,攻击者通过chat_go到bashrunner的攻击链,从/proc//maps中读取btgatt-server的PIE基址——这是构造可靠利用的关键信息。

随后,攻击者向wifi_ssid缓冲区写入1050字节的数据(该缓冲区实际只有500字节),触发BSS段溢出。通过精心构造溢出数据,攻击者覆写了epoll_terminate标志和事件循环的mainloop清理入口,使事件循环在退出时跳转到system()调用,并以root身份执行任意命令。

最终,btgatt-server进程崩溃,但后台的shell因为被system()启动所以存活了下来——攻击者拿到了持久的root shell。

4.5 蠕虫式传播能力

这条漏洞链最可怕的地方在于它的自动化传播潜力。一旦一台G1被攻陷,恶意软件可以自动扫描周围的蓝牙设备,将同样的攻击载荷传递给下一台G1,形成蠕虫式的连锁感染。一台接一台,机器人群起而叛。


五、漏洞时间线

时间事件
2026年4月29日G1 EDU版本到货
2026年5月3日在OTA升级时意外写砖了Dev PC
2026年5月7日发现AES-128密钥获取方法
2026年5月8-10日RCE #1(chat_go)攻陷运动控制主机
2026年5月14日宇树安全团队确认RCE #1
2026年5月21日发现云端API密钥Oracle漏洞
2026年6月25日RCE #2(蓝牙+BSS溢出)完整攻击链确认
2026年7月-8月宇树安全团队实施云端修复(添加账户-机器人所有权绑定校验)
2026年8月6日发放奖金6700美元
2026年8月18日通过VulnCheck提交CVE
2026年8月26日公开技术报告

六、影响评估

6.1 攻击要求极低

RCE #2的攻击门槛令人不安:攻击者只需要处于G1的蓝牙范围内(通常10米以内),且能创建一个免费的Unitree账户。不需要配对,不需要任何认证,不需要提前接触机器人,不需要物理接触。

对于一台在展厅、办公室、家庭中运行的机器人来说,这意味着任何一个走近它的人都可以成为攻击者。

6.2 拿到root意味着什么

运动控制主机以root身份运行28个服务进程,控制着机器人的一切物理能力:行走、搬运、语音交互、摄像头拍摄。一旦被攻陷,攻击者可以:

  • 强制机器人执行任意动作,对周围人员造成物理伤害
  • 监听机器人摄像头的实时画面,侵犯隐私
  • 利用机器人的网络连接进一步渗透内网
  • 在机器人之间传播恶意软件,形成僵尸网络

6.3 云端修复的局限

宇树在漏洞公开后迅速修复了云端API的账户所有权验证问题,这是正确的一步。但RCE #1的路径穿越和RCE #2的蓝牙GATT问题仍然存在于固件层面,且固件修复的覆盖速度远不如云端——大量已部署的G1可能很长时间内都不会收到更新。


七、安全建议

对于已经部署或购买G1的用户:

紧急应对

  • 避免在公共场合长时间开启G1的蓝牙功能
  • 将G1运行在独立的网络隔离环境中,避免其成为内网渗透的跳板
  • 关注宇树官方固件更新,及时升级

长期建议

  • 机器人厂商应建立完善的漏洞响应机制,在产品上市前完成基础安全测试
  • 蓝牙服务应强制配对认证,不应存在bare WRITE的GATT特性
  • 云端API的认证授权逻辑应严格验证资源所有权
  • 物理世界的联网设备应被视为与传统IT系统同等重要的攻击面

八、总结

UniBLEed的披露再次证明了一个老道理:硬件级安全的壁垒再高,也挡不住软件设计层面的失误。云端API没有验证机器人归属,蓝牙GATT没有认证配对,WiFi脚本没有转义用户输入——这些听起来都是”常见错误”,但当它们串联成一条攻击链,落在一台价值20万的人形机器人身上时,”常见错误”就变成了物理世界的真实风险。

这个系统,我一眼就看到三个入口——蓝牙、云端、还有那个默认密码。

项目地址:https://github.com/OlivierLaflamme/UniBLEed

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容