Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSend compressed comment-padded GraphQL request
-
DeliveryFramework decompresses body in memory
-
ExploitComments bypass max_tokens accounting
-
ExecutionParser allocates one Token per comment
-
ImpactWorker memory exhausted, OOM kill
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 | Affects any application that passes untrusted client input to graphql-core's parse() (the parser underlying Graphene, Strawberry, Ariadne and similar Python GraphQL servers) in versions >=3.2.3 and <3.2.12, or >=3.3.0a3 and <3.3.0rc1. No special feature or non-default configuration is required - remote unauthenticated exploitation works against default setups, and critically the bug is NOT mitigated by the usual defense: setting max_tokens does not stop it, because comment tokens were excluded from the count (that exclusion IS the vulnerability). AST-based depth and complexity limiters also do not help, since they run only after parsing succeeds. The main amplifying precondition is that the server decompresses request bodies (gzip) before parsing, so body-size limits or WAF inspection applied to the compressed request do not observe the true payload size. Limiting factors: impact is confined to availability (memory exhaustion / OOM of the worker); effectiveness depends on the worker/container memory ceiling and request concurrency; and a request body-size limit enforced on the DECOMPRESSED body before parse() blocks it. Per the vendor, upgrading is the complete fix, and note the behavior change that comments now count toward max_tokens. |
| Impact | This is a credible but bounded availability risk, not a top-tier emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U, C:N/I:N/A:H, base 7.5) is internally consistent with the description: an unauthenticated remote attacker sends a single crafted GraphQL document over the network with no user interaction and no special timing, and the only impact is availability (memory exhaustion / OOM) - confidentiality and integrity are explicitly untouched. The vuln.today decision label is 'this_week' rather than act_now/emergency, which fits a DoS with no data impact. No EPSS score and no CISA KEV status were supplied, so exploitation probability and active-exploitation signals cannot be weighed - the absence of these is a data gap, not evidence of low risk. A working proof-of-concept is embedded in the GitHub Security Advisory (GHSA-r77w-qph3-7vf8) demonstrating the max_tokens bypass and ~2.4x memory amplification, so the technique is public and trivially reproducible, though it is a resource-exhaustion demonstrator rather than a code-execution weapon. The notable risk amplifier is that the flaw defeats the very control (max_tokens) operators rely on, and that AST-level depth/complexity limiters run only after parsing, so common GraphQL hardening does not mitigate it. Net: a real priority worth patching promptly for any internet-facing Python GraphQL service, but its ceiling is denial of service, and the lack of KEV/EPSS suggests no confirmed widespread exploitation at time of analysis. |
| Exploit ScenarioDerived | An unauthenticated attacker sends a GraphQL endpoint a small, highly compressible document consisting of hundreds of thousands of comment lines (e.g. ' c\n' repeated) followed by a trivial query like '{ a }'. Because comments were not counted toward max_tokens, the document passes the parser's size guard, but each comment is still allocated as a persistent Token object, so a ~38 MB decompressed payload consumes roughly +92 MB of resident memory; a handful of concurrent requests push a worker past typical 256-512 MB container limits and trigger an OOM kill. A public proof-of-concept demonstrating this is included in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 22, 2026
Memory exhaustion in GraphQL-core 3.2.3 through 3.2.11 and 3.3.0a3 through 3.3.0rc0 lets a remote unauthenticated attacker OOM-kill a GraphQL worker by sending a highly compressible comment-padded document that sails past the parser's max_tokens guard. The lexer still allocates and chains a Token object for every comment it skips, but those tokens were invisible to the counter, so a 38 MB payload parsed under max_tokens=5 produced roughly +92 MB of resident memory per the vendor's measurements. The vendor advisory ships a proof-of-concept that demonstrates the bypass; the flaw is not listed in CISA KEV and no in-the-wild exploitation is reported, and the vendor rates the impact as availability-only (CVSS 7.5, A:H, no confidentiality or integrity effect).
RemediationAI
Vendor-released patch: upgrade graphql-core to 3.2.12 or, on the pre-release 3.3 branch, to 3.3.0rc1 - the fixes are the commits 437dea102e92fdf05a2971ca76787c5a5bad875a and 80ef435a1808fbbcc4aaac63ae76771a1c91002d, described in advisory GHSA-r77w-qph3-7vf8. Be aware of the intended behaviour change before deploying: comments now count toward max_tokens and Document.token_count, so services parsing comment-heavy documents such as SDL with documentation comments under an explicit max_tokens may start returning syntax errors until that limit is raised - audit your configured limits as part of the rollout. If upgrading is not immediately possible, the vendor's stated workaround is a request body-size limit applied to the decompressed body before the document reaches parse(); note the trade-offs and limits of that control: it must be enforced after decompression (a limit on the compressed request is useless against the `
c\n` payload, which compresses almost perfectly), it does not remove the per-comment allocation below the chosen size, and setting or lowering max_tokens alone does not mitigate the issue on unpatched versions because comment tokens were excluded from the count and AST-based depth and complexity limiters do not run until after parsing succeeds. The vendor notes a decompressed-body limit is worth retaining after upgrading as well, since max_tokens bounds token count, 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 the Python port of the GraphQL.js reference implementation and the parser underneath Graphene, Strawberry, Ariadne and most Python GraphQL servers, so the defect propagates to any downstream framework that hands untrusted documents to parse(). The root cause is a mismatch between two layers of the lexer/parser pair: Lexer.lookahead() deliberately skips comment tokens and returns only the next non-comment token, yet each skipped comment is still fully tokenized, allocated as a Token object and linked into the persistent doubly-linked list via token.next and token.prev - the chain that powers source-location reporting and that lives as long as the parsed document. Parser.advance_lexer() incremented its token counter only for the tokens the lexer actually returned, so max_tokens bounded non-comment tokens alone. This is CWE-400 (uncontrolled resource consumption) with a CWE-770 (allocation without limits) flavor: the documented defence against oversized documents silently did not cover comment nodes, and AST-based depth or complexity limiters cannot compensate because they run only after parsing has already succeeded and allocated everything. The vendor fix walks the linked list from lexer.last_token.next up to the newly returned token, incrementing the counter for every skipped comment, and also counts the advance onto EOF so trailing comment padding is covered. A deliberate behaviour change follows: comments now count toward max_tokens and toward Document.token_count, so comment-heavy documents (SDL with documentation comments, for example) parsed under an explicit max_tokens may now be rejected until the limit is raised.
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
Remote, unauthenticated, no interaction and a single deterministic request give AV:N/AC:L/PR:N/UI:N; impact is availability-only memory exhaustion, so 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.2.3 until 3.2.12 and 3.3.0rc1, the parser's max_tokens limit in Parser.advance_lexer counts only non-comment tokens returned after Lexer.lookahead skips comments. Each skipped comment is still allocated as a Token and retained through token.next and token.prev, allowing a highly compressible comment-padded GraphQL document to pass a low token limit while consuming memory. An unauthenticated remote attacker can exhaust worker memory before AST-based depth or complexity controls run. This issue is fixed in versions 3.2.12 and 3.3.0rc1.
Technical POC Analysis
CWE-400 (Uncontrolled Resource Consumption), with CWE-770 (Allocation of Resources Without Limits or Throttling) as the secondary classification.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
CVE-2026-75508 is a high-severity availability vulnerability in GraphQL-core versions 3.2.3 through 3.2.11 and 3.3.0a3 through 3.3.0rc0, enabling unauthenticated remote attackers to crash GraphQL workers via memory exhaustion. This flaw impacts any organization using these versions to power public or internal GraphQL APIs, risking service outages that disrupt operations and customer-facing applications. Leadership should prioritize remediation because downtime directly affects revenue and trust, and the public proof-of-concept reference increases the likelihood of attempted attacks.
Implement strict request size limits at the network edge (e.g., reverse proxy) to reject overly large payloads before they reach GraphQL-core; enforce rate limiting and query complexity analysis that counts comment tokens; deploy memory monitoring with automatic worker restarts to reduce downtime; and consider temporarily disabling comment support if the application's GraphQL schema permits.
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-108225
GHSA-r77w-qph3-7vf8
NVD
CVE.org
Exploit-DB