GraphQL Tools has prototype pollution in well-established utility function `mergeDeep`
Exact source revision recorded 24 Oct 2026 13:17:17 UTC. It does not establish the source's current position. Latest evidence.
osv · GHSA-7mx3-vvmw-hjmv
PublishedClosed by https://github.com/ardatan/graphql-tools/pull/8423 Mitigated in Hive Gateway by https://github.com/graphql-hive/gateway/pull/2600 A client can alias fields to `constructor`, `__proto__` or `prototype` so that the response keys from two subgraphs collide on those names during result merging. Because `mergeDeep` recursed through inherited properties, the merge walked `{}.constructor` to `Object`, then `Object.__proto__` to `Function.prototype`, and wrote a subgraph-supplied value over `Function.prototype.call`, breaking every subsequent request in the process until restart. This is remotely triggerable by an unauthenticated client with a single query against any supergraph that merges an object from two subgraphs, which is the ordinary `@shareable` or entity case, so it is a denial of service rather than a theoretical hardening issue. ```graphql { shared { fieldA constructor: fieldB { __proto__: child { call: value } } } } ```
- Source published
- 5 Oct 2026 22:56:46 UTC
- Source modified
- 5 Oct 2026 23:15:03 UTC
- Observed here
- 24 Oct 2026 13:17:17 UTC
- Source terms
- GitHub Advisory Database · CC-BY-4.0
Original source record · Cite this exact observation · Complete original publisher JSON
This view projects the publisher's source fields for reading; the original JSON retains additional fields and CVE enrichment containers. Attribution: osv · GitHub Advisory Database · CC-BY-4.0. Source text is retained; field grouping and change labels are provided by ChangeIntel.
CVSS_V4 · CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Publisher rating · HIGH