GraphQL Tools: Per-request connection parameters persist into later users' WebSocket authentications
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.
- Products
- executor-legacy-ws, graphql-tools
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-118665
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 2 Nov 2026, 17:48 UTC · Revision 1
Source evidence
GraphQL Tools: Per-request connection parameters persist into later users' WebSocket authentications
core-cve · Original sourcePublished 28 Oct 2026, 20:41 UTC
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.
cve:CVE-2026-118665
graphql-tools
Fixed versions: Not specified
executor-legacy-ws
Fixed versions: Not specified
Complete source record
{
"id": "1022d621b069e0989a20c6c469a82b9209be7f63a703a9e2590070e2cdce1b0b",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-118665",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "GraphQL Tools: Per-request connection parameters persist into later users' WebSocket authentications",
"summary": "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.",
"evidence": "cve:CVE-2026-118665",
"products": [
{
"name": {
"value": "graphql-tools",
"evidence": "/containers/cna/affected/0/product"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": []
},
{
"name": {
"value": "executor-legacy-ws",
"evidence": "/containers/cna/affected/1/product"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": []
}
],
"severity": "high",
"structured": {
"id": "CVE-2026-118665",
"aliases": [
"CVE-2026-118665"
],
"metrics": [
{
"cvssV4_0": {
"version": "4.0",
"baseScore": 8.2,
"attackVector": "NETWORK",
"baseSeverity": "HIGH",
"vectorString": "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",
"userInteraction": "NONE",
"attackComplexity": "HIGH",
"attackRequirements": "PRESENT",
"privilegesRequired": "NONE",
"subIntegrityImpact": "NONE",
"vulnIntegrityImpact": "NONE",
"subAvailabilityImpact": "NONE",
"vulnAvailabilityImpact": "NONE",
"subConfidentialityImpact": "NONE",
"vulnConfidentialityImpact": "HIGH"
}
}
],
"affected": [
{
"vendor": "ardatan",
"product": "graphql-tools",
"versions": [
{
"status": "affected",
"version": "< 9.0.36"
}
]
},
{
"vendor": "@graphql-tools",
"product": "executor-legacy-ws",
"versions": [
{
"status": "affected",
"version": "< 1.1.36"
}
]
}
],
"modified": "2026-10-28T20:41:47.228Z",
"provider": "cve",
"references": [
"https://github.com/ardatan/graphql-tools/security/advisories/GHSA-434m-5hcj-pxf3",
"https://github.com/ardatan/graphql-tools/pull/8480",
"https://github.com/ardatan/graphql-tools/commit/c2f226e6f68236be9e4a577f29faeaa92547458b",
"https://github.com/ardatan/graphql-tools/releases/tag/@graphql-tools/executor-legacy-ws@1.1.36"
],
"provider_metadata": {
"cna": {
"orgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
"shortName": "GitHub_M",
"dateUpdated": "2026-10-28T20:41:47.228Z"
}
}
},
"related_cves": [
{
"value": "CVE-2026-118665",
"evidence": "/cveMetadata/cveId"
}
],
"security_relevant": true,
"severity_evidence": "/containers/cna/metrics"
},
"source_id": "core-cve",
"document_id": 487934,
"published_at": "2026-10-28T20:41:47.228+00:00"
}