Impact
The flaw occurs when a GraphQL Tools WebSocket executor reuses a closure-scoped object that stores connection parameters from an earlier request. After a WebSocket session is closed, the executor does not clear the stored parameters. If a subsequent request to the same executor does not supply a sensitive key, it may transmit the previous user’s Authorization or tenant value in the connection_init payload. This causes the downstream server to authenticate the second caller as the first, enabling unauthorized access.
Affected Systems
Affected libraries are the @graphql-tools:executor-legacy-ws and ardatan:graphql-tools packages. Any application that uses the legacy WebSocket executor and does not create a fresh executor per request is vulnerable. The issue existed in all versions prior to 1.1.36 of the executor-legacy-ws package. The fix was introduced in that release.
Risk and Exploitability
The vulnerability has a CVSS score of 8.2 and is not listed in the CISA KEV catalog. No EPSS score is available, but the lack of a publicly known exploit does not diminish the risk when the vulnerability is present. Attackers who can influence the WebSocket connection_init packets—either as a malicious client or by compromising an upstream component—can hijack authentication for any subsequent user that reuses the same executor. Because the flaw is a component of the executor that is common to many GraphQL deployments, the potential impact is broad and the risk is high.
OpenCVE Enrichment
Github GHSA