{"id":"CVE-2026-118665","state":"PUBLISHED","title":"GraphQL Tools: Per-request connection parameters persist into later users' WebSocket authentications","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.","publishedAt":"2026-10-28T20:41:47.228Z","updatedAt":"2026-10-28T20:41:47.228Z","severity":{"score":8.2,"label":"High","version":"4.0","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","source":"GitHub_M"},"assigner":"GitHub_M","products":["ardatan graphql-tools","@graphql-tools executor-legacy-ws"],"affected":[{"vendor":"ardatan","product":"graphql-tools","versions":[{"version":"< 9.0.36","status":"affected"}]},{"vendor":"@graphql-tools","product":"executor-legacy-ws","versions":[{"version":"< 1.1.36","status":"affected"}]}],"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"],"weaknesses":["CWE-613"],"ingestedAt":"2026-10-29T20:10:52.580Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2026/118xxx/CVE-2026-118665.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2026-118665","state":"PUBLISHED","datePublished":"2026-10-28T20:41:47.228Z","dateUpdated":"2026-10-28T20:41:47.228Z","assignerShortName":"GitHub_M","assignerOrgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateReserved":"2026-10-28T17:25:37.562Z"},"containers":{"cna":{"title":"GraphQL Tools: Per-request connection parameters persist into later users' WebSocket authentications","descriptions":[{"lang":"en","value":"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."}],"affected":[{"vendor":"ardatan","product":"graphql-tools","versions":[{"version":"< 9.0.36","status":"affected"}]},{"vendor":"@graphql-tools","product":"executor-legacy-ws","versions":[{"version":"< 1.1.36","status":"affected"}]}],"references":[{"url":"https://github.com/ardatan/graphql-tools/security/advisories/GHSA-434m-5hcj-pxf3","name":"https://github.com/ardatan/graphql-tools/security/advisories/GHSA-434m-5hcj-pxf3","tags":["x_refsource_CONFIRM"]},{"url":"https://github.com/ardatan/graphql-tools/pull/8480","name":"https://github.com/ardatan/graphql-tools/pull/8480","tags":["x_refsource_MISC"]},{"url":"https://github.com/ardatan/graphql-tools/commit/c2f226e6f68236be9e4a577f29faeaa92547458b","name":"https://github.com/ardatan/graphql-tools/commit/c2f226e6f68236be9e4a577f29faeaa92547458b","tags":["x_refsource_MISC"]},{"url":"https://github.com/ardatan/graphql-tools/releases/tag/@graphql-tools/executor-legacy-ws@1.1.36","name":"https://github.com/ardatan/graphql-tools/releases/tag/@graphql-tools/executor-legacy-ws@1.1.36","tags":["x_refsource_MISC"]}],"metrics":[{"cvssV4_0":{"attackVector":"NETWORK","attackComplexity":"HIGH","attackRequirements":"PRESENT","privilegesRequired":"NONE","userInteraction":"NONE","vulnConfidentialityImpact":"HIGH","vulnIntegrityImpact":"NONE","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"NONE","subIntegrityImpact":"NONE","subAvailabilityImpact":"NONE","baseScore":8.2,"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","version":"4.0"}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-613","lang":"en","description":"CWE-613: Insufficient Session Expiration","type":"CWE"}]}],"providerMetadata":{"shortName":"GitHub_M","orgId":"a0819718-46f1-4df5-94e2-005712e83aaa","dateUpdated":"2026-10-28T20:41:47.228Z"},"source":{"advisory":"GHSA-434m-5hcj-pxf3","discovery":"UNKNOWN"}}}}}