strawberry-graphql: Authentication bypass via legacy graphql-ws WebSocket subprotocol
High severity
GitHub Reviewed
Published
Apr 4, 2026
in
strawberry-graphql/strawberry
•
Updated Apr 7, 2026
Description
Published to the GitHub Advisory Database
Apr 6, 2026
Reviewed
Apr 6, 2026
Published by the National Vulnerability Database
Apr 7, 2026
Last updated
Apr 7, 2026
Strawberry up until version
0.312.3is vulnerable to an authentication bypass on WebSocket subscription endpoints. The legacy graphql-ws subprotocol handler does not verify that aconnection_inithandshake has been completed before processing start (subscription) messages. This allows a remote attacker to skip theon_ws_connectauthentication hook entirely by connecting with the graphql-ws subprotocol and sending a start message directly, without ever sendingconnection_init.The graphql-transport-ws subprotocol handler is not affected, as it correctly gates subscription operations on a connection_acknowledged 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
on_ws_connectfor authentication or authorization is affected.Mitigation: Upgrade to the patched version, or explicitly disable the legacy graphql-ws subprotocol by setting
subscription_protocols=[GRAPHQL_TRANSPORT_WS_PROTOCOL]on your GraphQL view/router.References