Information
@neo4j/graphql library versions prior to 7.5.6 fail to verify the authenticity of a client-supplied, pre-decoded JWT object passed through GraphQL subscription
connectionParams. As a result, any unauthenticated remote client that can open a GraphQL-over-WebSocket connection can forge arbitrary JWT claims (e.g. sub, roles) in
connectionParams.jwt and have them accepted as authenticated identity for the purposes of
@authentication and
@subscriptionsAuthorization directive evaluation. This allows a fully unauthenticated attacker to receive subscription events that should be restricted to specific authenticated roles/users. Upgrade the library to versions 7.5.6+ or 5.12.14+. v6 is end-of-life and will not receive a fix.
Preconditions:
The application enables
features.subscriptions and
features.authorization, and wires the subscriptions transport (e.g.
graphql-ws) to forward WebSocket
connectionParams into the resolver context.
Links