Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach public GraphQL endpoint
-
DeliverySend shallow repeated-inline-fragment query
-
ExploitTrigger quadratic OverlappingFieldsCanBeMerged validation
-
ExecutionPin worker CPU for minutes
-
PersistRepeat concurrently to saturate workers
-
ImpactService denial of availability
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | No special conditions beyond the product being reachable: the OverlappingFieldsCanBeMerged rule ships in specified_rules and is enabled by default, so every GraphQL-core server at default settings is vulnerable with no authentication and no user interaction (PR:N/UI:N). The attacker only needs to submit a crafted query that repeats an inline fragment selecting the same response name at two nesting levels. Limiting factors are narrow: impact is availability-only (no data disclosed or modified), and the flaw is fixed by upgrading to 3.2.12 or 3.3.0rc1, which enforces a default 250,000-comparison budget (MAX_FIELD_COMPARISONS). Per-field-depth or complexity limiters do NOT mitigate it because they run after validation; the only stated pre-upgrade workaround is rejecting oversized documents measured on the DECOMPRESSED body, and removing the rule is explicitly not safe because it is a spec-required correctness rule. |
| Impact | All severity signals point the same direction: the supplied CVSS 3.1 vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H describes a network-reachable (AV:N), low-complexity (AC:L), unauthenticated (PR:N), no-interaction (UI:N) attack with high availability impact and no confidentiality or integrity impact - a clean denial-of-service profile scoring 7.5. The GHSA advisory confirms the mechanism end-to-end (quadratic/O(n²·m²) CPU in the OverlappingFieldsCanBeMerged validation rule) and includes a working proof-of-concept with measured timings (364 KB query pinning one core for 319 s on 3.2.8), so the technical impact is verified, not inferred. No EPSS score and no CISA KEV entry were provided in the input, so there is no evidence of active exploitation; the only priority signal is the vuln.today Decision label 'this_week', which is consistent with a credible, easily-weaponizable unauthenticated DoS that is not yet confirmed exploited in the wild. The practical risk is elevated beyond a generic DoS because the cost lands in the validation phase, before resolvers or AST depth/complexity limiters run, and the payload is trivially shallow (depth 3, complexity 1) and highly compressible, so standard GraphQL defenses and compressed-body/WAF inspection do not catch it. This is a real this-week patching priority for any exposed GraphQL-core server, not a high-CVSS-but-low-real-risk issue; the only tempering factor is that impact is confined to availability. |
| Exploit ScenarioDerived | An unauthenticated attacker sends a single small, highly compressible GraphQL query (one short inline-fragment string repeated at two nesting levels) to a public GraphQL-core endpoint. Validation enters the OverlappingFieldsCanBeMerged rule and burns minutes of CPU on one worker before any resolver runs; a handful of concurrent requests saturate a multi-worker deployment. A working proof-of-concept with measured timings is published in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 22, 2026
Denial of service in the Python GraphQL-core library (3.0.0 through 3.2.11, plus 3.3.0 pre-releases before 3.3.0rc1) lets an unauthenticated remote attacker pin a worker process for minutes with a single shallow, highly compressible query. The OverlappingFieldsCanBeMerged rule, which ships in specified_rules and is therefore enabled by default on every GraphQL-core server, re-compares flattened inline fragments at every nesting level and can be driven into quadratic - worst case O(n²·m²) - CPU work during validation, before any resolver, depth limiter or complexity analyzer runs; the vendor advisory documents a 364 KB query consuming one core for over 300 seconds on 3.2.8. Severity is availability-only (no confidentiality or integrity impact) and the CVSS 3.1 vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H scores 7.5; the advisory includes a proof-of-concept query generator with measured timings, which is a public PoC reference rather than independently verified working exploit code, and there is no confirmed active exploitation (no CISA KEV listing) at time of analysis. Fixed versions 3.2.12 and 3.3.0rc1 enforce a 250,000-comparison budget.
RemediationAI
Vendor-released patch: upgrade to graphql-core 3.2.12 (or 3.3.0rc1 if tracking the 3.3 pre-release line); the fix commits are 150e59814d97d12140be005a558c93188ef89198 and 29c2753a7ee30a96a4109e7c6add1a2dae0497d7, and the advisory is GHSA-vj8h-fx38-h3vc. Be aware of the intentional behaviour change: once MAX_FIELD_COMPARISONS (default 250,000, a module-level constant in graphql.validation.rules.overlapping_fields_can_be_merged) pairwise comparisons are performed, validation aborts and returns a GraphQLError stating the query is too complex to validate for overlapping fields, so a pathological query that previously validated slowly now fails; the constant can be raised or lowered in code if your workloads legitimately need a different bound. If upgrading is not immediately possible, the only workaround the vendor states is to reject oversized documents before they reach validate(), and the size check must be applied to the decompressed body because the payload is highly compressible; removing OverlappingFieldsCanBeMergedRule from the rule set is explicitly not a safe workaround since it is a specification-required correctness rule, and per-field depth or complexity limiters do not mitigate the issue because they operate on the parsed document after validation has already completed. A request body-size limit remains worthwhile after upgrading, since the comparison budget bounds this one rule and not overall request cost.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
GraphQL-core is a Python port of the GraphQL.js reference implementation, and its validate() pipeline runs the specification-mandated rule set (specified_rules), which includes OverlappingFieldsCanBeMerged. That rule must compare every pair of fields sharing a response name and recurse into their sub-selections to detect conflicts; the memoization introduced for the earlier CVE-2023-26144 fix is keyed by named-fragment identity, so it does not cover inline fragments, which are flattened into the parent selection set before the cache is consulted and are therefore re-compared from scratch at every nesting level. Repeating an inline fragment that selects the same response name at two levels multiplies the quadratic outer pairwise loop by a quadratic inner walk, giving the CWE-400 (resource exhaustion; the advisory also assigns CWE-407, algorithmic complexity) behaviour measured by the reporter: doubling the outer repetition count at fixed inner width quadruples validation time, with reported measurements ranging from 0.16 s for a 7.6 KB document to 319 s for 364 KB on CPython 3.12/Linux x86_64. Because the work is pure CPU under the GIL and occurs in validation rather than execution, the malicious document can be trivially shallow (depth 3, complexity 1) and is one short string repeated many times, so it compresses to a few kilobytes and evades body-size limits and WAF inspection performed on the compressed request. The fix adds a ComparisonBudgetExceededError guard and a module-level MAX_FIELD_COMPARISONS constant (default 250,000) tracked on the OrderedPairSet, aborting validation with a GraphQLError once the document-wide pairwise comparison budget is exhausted.
Know when Python gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Default-enabled rule reachable by any unauthenticated remote query (AV:N/AC:L/PR:N/UI:N); availability-only CPU-exhaustion DoS with no confidentiality or integrity impact (C:N/I:N/A:H), scope unchanged.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
GraphQL-core is a Python port of the GraphQL.js reference implementation. From 3.0.0 until 3.2.12 and 3.3.0rc1, the OverlappingFieldsCanBeMerged rule in specified_rules repeatedly compares fields that share response names and recursively re-compares flattened inline fragments during the validation phase. The prior named-fragment memoization does not cover this path, so nested repeated inline fragments can drive quadratic and worst-case O(n²·m²) CPU work before any resolver or AST-based depth or complexity control runs. An unauthenticated remote attacker can submit a shallow, highly compressible GraphQL query that pins a worker process and can saturate a multi-worker service. This issue is fixed in versions 3.2.12 and 3.3.0rc1.
Technical POC Analysis
CWE-400 (Uncontrolled Resource Consumption), with the advisory also tagging CWE-407 (Inefficient Algorithmic Complexity).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A high-severity availability flaw in GraphQL-core (a Python library used by many customer-facing APIs) allows an unauthenticated attacker to exhaust server CPU with a single small query, potentially taking services offline for legitimate users. Since the vulnerable validation rule is enabled by default, any organization running an affected GraphQL-core version is exposed and should prioritize remediation.
No vendor-released patch identified at time of analysis. Interim mitigations include enforcing rate limits, request timeouts, and query complexity/depth limits; disabling the OverlappingFieldsCanBeMerged validation rule if acceptable; and monitoring for anomalous query patterns.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t
BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser
pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi
The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python
BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.
Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301
In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse
Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne
EUVD-2026-108226
GHSA-vj8h-fx38-h3vc
NVD
CVE.org
Exploit-DB