CVE-2026-35523Strawberry 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未被触发,任何依赖该钩子进行鉴权的逻辑都将失效,导致攻击者能够访问受限数据或执行受限操作。