Description
GraphQL Tools provides utilities for building, stitching, and mocking GraphQL schemas. Prior to version 1.1.36 of the GraphQL Tools legacy WebSocket executor package, buildWSLegacyExecutor in packages/executors/legacy-ws/src/index.ts retains request.extensions.connectionParams in the closure-scoped executorConnectionParams object after cleanupWebsocket closes a connection. When one executor is reused across different authorization contexts, a later request that omits a sensitive key can send an earlier caller's Authorization or tenant value in its connection_init payload, causing the downstream server to authenticate the later caller as the earlier user. Applications that create a new executor for every request are not affected. This issue is fixed in version 1.1.36 of the GraphQL Tools legacy WebSocket executor package.
Published: 2026-10-28
Score: 8.2 High
EPSS: n/a
KEV: No
Impact: Unauthorized access via WebSocket authentication hijacking
Action: Immediate Patch
AI Analysis

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.

Generated by OpenCVE AI on October 28, 2026 at 22:27 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade the @graphql-tools:executor-legacy-ws package to version 1.1.36 or later.
  • If upgrading is not immediately possible, ensure that your application creates a new executor instance for each request or otherwise avoids reusing executors across different authorization contexts.
  • As a temporary measure, modify the application to explicitly clear or nullify connectionParams after closing a WebSocket session, or validate that each connection_init payload contains required authentication information before processing.

Generated by OpenCVE AI on October 28, 2026 at 22:27 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-434m-5hcj-pxf3 GraphQL Tools: Per-request connection parameters persist into later users' WebSocket authentications
History

Wed, 28 Oct 2026 21:00:00 +0000

Type Values Removed Values Added
Description GraphQL Tools provides utilities for building, stitching, and mocking GraphQL schemas. Prior to version 1.1.36 of the GraphQL Tools legacy WebSocket executor package, buildWSLegacyExecutor in packages/executors/legacy-ws/src/index.ts retains request.extensions.connectionParams in the closure-scoped executorConnectionParams object after cleanupWebsocket closes a connection. When one executor is reused across different authorization contexts, a later request that omits a sensitive key can send an earlier caller's Authorization or tenant value in its connection_init payload, causing the downstream server to authenticate the later caller as the earlier user. Applications that create a new executor for every request are not affected. This issue is fixed in version 1.1.36 of the GraphQL Tools legacy WebSocket executor package.
Title GraphQL Tools: Per-request connection parameters persist into later users' WebSocket authentications
Weaknesses CWE-613
References
Metrics cvssV4_0

{'score': 8.2, 'vector': 'CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-10-28T20:41:47.228Z

Reserved: 2026-10-28T17:25:37.562Z

Link: CVE-2026-118665

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-28T21:16:56.827

Modified: 2026-10-28T21:16:56.827

Link: CVE-2026-118665

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-28T22:30:12Z

Weaknesses
  • CWE-613

    Insufficient Session Expiration