CVE-2026-35523: Authentication bypass in strawberry-graphql via legacy graphql-ws WebSocket subprotocol
Strawberry GraphQL is a library for creating GraphQL APIs. Strawberry up until version 0.312.3 is vulnerable to an authentication bypass on WebSocket subscription endpoints. The legacy graphql-ws subprotocol handler does not verify that a connectioninit handshake has been completed before processing start (subscription) messages. This allows a remote attacker to skip the onwsconnect authentication hook entirely by connecting with the graphql-ws subprotocol and sending a start message directly, without ever sending connectioninit. This vulnerability is fixed in 0.312.3.
Other sources
Strawberry up until version 0.312.3 is vulnerable to an authentication bypass on WebSocket subscription endpoints. The legacy graphql-ws subprotocol handler does not verify that a connectioninit handshake has been completed before processing start (subscription) messages. This allows a remote attacker to skip the onwsconnect authentication hook entirely by connecting with the graphql-ws subprotocol and sending a start message directly, without ever sending connectioninit.
The graphql-transport-ws subprotocol handler is not affected, as it correctly gates subscription operations on a connectionacknowledged flag. However, both subprotocols are enabled by default in all framework integrations that support websockets, and the subprotocol is selected by the client via the Sec-WebSocket-Protocol header.
Any application relying on onwsconnect for authentication or authorization is affected.
Mitigation: Upgrade to the patched version, or explicitly disable the legacy graphql-ws subprotocol by setting subscriptionprotocols=[GRAPHQLTRANSPORTWSPROTOCOL] on your GraphQL view/router.
— GitHub