All vulnerabilities
CVE-2026-104852GHSA-7mx3-vvmw-hjmv

@graphql-tools/utils: GraphQL Tools has prototype pollution in well-established utility function `mergeDeep`

ardatan @graphql-tools/utilsnpmLibraries & packages
CVSS
8.2High
ExploitationNo known exploitationNot in CISA KEV, which does not prove it is unexploitedCISA KEV
Exploit odds (EPSS)0.36%Chance of exploitation activity in the next 30 days, higher than 28% of CVEs. Scored 23 Oct 2026FIRST EPSS
Fixed in12.0.1Fixed versionGitHub
Published5 Oct 2026Updated 6 Oct 2026CVE List

What fixes it

  • 12.0.1@graphql-tools/utils, npmGitHubnpm install @graphql-tools/utils@12.0.1

A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.

Description

Closed 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.

{
  shared {
    fieldA
    constructor: fieldB {
      __proto__: child {
        call: value
      }
    }
  }
}

Text from GitHub Advisory Database

Affected versions 3

  • @graphql-tools/utils, npm<= 12.0.0GitHub
  • graphql-toolsaffected: < 12.0.1CVE List
  • @graphql-tools/utils, npmfrom first release, fixed in 12.0.1OSV

References 6