CVE-2026-75507
### Summary The `OverlappingFieldsCanBeMerged` validation rule can be driven into quadratic — and in the worst case `O(n²·m²)` — running time by a small, highly compressible query. A single 364 KB document can occupy one CPU core for over five minutes during *validation*, before any resolver runs. Because the rule is part of `specified_rules` and therefore enabled by default, every GraphQL-core based server is affected at default settings. ### Details `OverlappingFieldsCanBeMerged` compares every pair of fields that share a response name and recurses into their sub-selections. The memoization added for CVE-2023-26144 (`GHSA-9pv7-vfvm-6vr7`) is keyed by **named fragment** identity, so it does not cover this path: inline fragments are flattened into the parent selection set before the cache is consulted, and therefore every pair is re-compared from scratch at every nesting level. Repeating an inline fragment that selects the same response name at two nesting levels multiplies the two effects. There was no comparison budget and no validation timeout, so the rule ran to completion regardless of cost. The cost is incurred in the **validation phase**, which is what makes this hard to defend against from outside the library: query-depth limiters, complexity analyzers and cost estimators all operate on the parsed document *after* validation, and the malicious document is trivially shallow (depth 3, complexity 1). The payload is also one short string repeated many times, so it compresses to a few kilobytes and slips past body-size limits and WAF inspection that only see the compressed request. ### Proof of concept ```python import time from graphql import build_schema, parse, validate schema = build_schema( "type Query { field: Node } type Node { f: Node, g: Node, x: String }" ) def gen(n: int, m: int) -> str: inner = " ".join(["... on Node { x }"] * m) outer = " ".join([f"... on Node {{ f {{ {inner} }} }}"] * n) return f"{{ field {{ {outer} }} }}"
Properties
- Severity
- high
- Summary
- GraphQL-core: Denial of service via quadratic complexity in the OverlappingFieldsCanBeMerged validation rule
- Nvd fetched at
- 2026-10-22T22:14:18.200859+00:00
- Cvss severity
- HIGH
- Cvss score
- 7.5
- Retrieved at
- 2026-10-22T22:16:44+00:00
- Ghsa published
- 2026-10-22T16:26:40Z
- Source url
- https://github.com/advisories/GHSA-vj8h-fx38-h3vc
- Ghsa updated
- 2026-10-22T16:26:42Z
- Ghsa id
- GHSA-vj8h-fx38-h3vc
- Last source
- GitHub Advisory Database
- Score
- 7.5
- Cvss version
- 3.1
- Cve id
- CVE-2026-75507
- Cvss vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- First seen by Signal
- 2026-10-22T18:12:34+00:00
- Is ghsa only
- false
- Vector
- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
- Published at
- 2026-10-22T17:16:59.757
- Last modified
- 2026-10-22T17:40:46.877
Related Entities (4)
HAS_WEAKNESS (2)
AFFECTS (1)
VULNERABLE_TO (1)
Explore deeper with Ninja Signal's threat intelligence graph