Skip to main content

Hot Chocolate CVE-2026-40324

CRITICAL
Uncontrolled Recursion (CWE-674)
2026-04-16 https://github.com/ChilliCream/graphql-platform GHSA-qr3m-xw4c-jqw3
9.1
CVSS 3.1 · GitHub Advisory
Share

Severity by source

GitHub Advisory PRIMARY
9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
vuln.today AI
7.5 HIGH

Unauthenticated network attacker sends a trivial crafted document (PR:N/UI:N/AC:L); impact is a process-crash DoS only, so C:N/I:N and A:H, differing from the published I:H.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from GitHub Advisory.

CVSS VectorGitHub Advisory

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
High

Lifecycle Timeline

4
Source Code Evidence Fetched
Jul 24, 2026 - 07:20 vuln.today
Analysis Generated
Jul 24, 2026 - 07:20 vuln.today
Patch released
Apr 16, 2026 - 21:15 nvd
Patch available
CVE Published
Apr 16, 2026 - 21:09 nvd
CRITICAL 9.1

DescriptionGitHub Advisory

Impact

Hot Chocolate's Utf8GraphQLParser is a recursive descent parser with no recursion depth limit. A crafted GraphQL document with deeply nested selection sets, object values, list values, or list types can trigger a StackOverflowException on payloads as small as 40 KB.

Because StackOverflowException is uncatchable in .NET (since .NET 2.0), the entire worker process is terminated immediately. All in-flight HTTP requests, background IHostedService tasks, and open WebSocket subscriptions on that worker are dropped. The orchestrator (Kubernetes, IIS, etc.) must restart the process.

This occurs before any validation rules run - MaxExecutionDepth, complexity analyzers, persisted query allow-lists, and custom IDocumentValidatorRule implementations cannot intercept the crash because Utf8GraphQLParser.Parse is invoked before validation. The existing MaxAllowedFields=2048 limit does not help because the crashing payloads contain very few fields.

Severity: Critical (9.1) - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H

Patches

  • v12 line: Fixed in 12.22.7
  • v13 line: Fixed in 13.9.16
  • v14 line: Fixed in 14.3.1
  • v15 line: Fixed in 15.1.14

The fix adds a MaxAllowedRecursionDepth option to ParserOptions with a safe default, and enforces it across all recursive parser methods (ParseSelectionSet, ParseValueLiteral, ParseObject, ParseList, ParseTypeReference, etc.). When the limit is exceeded, a catchable SyntaxException is thrown instead of overflowing the stack.

Workarounds

There is no application-level workaround. StackOverflowException cannot be caught in .NET. The only mitigation is to upgrade to a patched version.

Operators can reduce (but not eliminate) risk by limiting HTTP request body size at the reverse proxy or load balancer layer, though the smallest crashing payload (40 KB) is well below most default body size limits and is highly compressible (~few hundred bytes via gzip).

References

  • Fix for v15: https://github.com/ChilliCream/graphql-platform/pull/9528

AnalysisAI

Unauthenticated remote denial-of-service in ChilliCream's Hot Chocolate GraphQL server for .NET (HotChocolate.Language package) lets any client crash the entire worker process by sending a small, deeply nested GraphQL document. Because the recursive-descent Utf8GraphQLParser has no depth limit, ~40 KB of nested selection sets, object/list values, or list types triggers an uncatchable StackOverflowException that terminates the process, dropping all in-flight HTTP requests, IHostedService background tasks, and WebSocket subscriptions on that worker. No public exploit identified at time of analysis and EPSS is low (0.09%), but the attack is trivial (AC:L, PR:N) and CISA SSVC flags it as automatable, so it is a practical availability threat to internet-facing GraphQL endpoints.

Technical ContextAI

Hot Chocolate is the dominant open-source GraphQL server framework for the .NET/ASP.NET Core ecosystem; the flaw lives in its HotChocolate.Language parsing library (all four affected CPEs point to pkg:nuget/hotchocolate.language). The root cause is CWE-674 (Uncontrolled Recursion): Utf8GraphQLParser is a hand-written recursive-descent parser whose methods (ParseSelectionSet, ParseValueLiteral, ParseObject, ParseList, ParseTypeReference) call themselves once per level of syntactic nesting, consuming a stack frame each time. With no ceiling on nesting depth, an attacker-controlled document forces recursion until the CLR thread stack is exhausted. Critically, .NET has treated StackOverflowException as non-catchable and non-recoverable since .NET 2.0, so it cannot be handled with try/catch and fast-fails the whole process. The parse step also runs before validation, so existing GraphQL defenses (MaxExecutionDepth, complexity analyzers, persisted-query allow-lists, MaxAllowedFields=2048, custom IDocumentValidatorRule) never execute. The vendor fix introduces a MaxAllowedRecursionDepth ParserOptions setting (default 200) enforced across all recursive parser methods, converting the overflow into a catchable SyntaxException.

RemediationAI

Vendor-released patch: upgrade HotChocolate.Language (and dependent HotChocolate packages) to the fixed release for your line - 12.22.7, 13.9.16, 14.3.1, or 15.1.14 - which adds the MaxAllowedRecursionDepth ParserOptions limit (default 200) and throws a catchable SyntaxException instead of overflowing the stack. Patched releases are at https://github.com/ChilliCream/graphql-platform/releases/tag/15.1.14 (and the equivalent 12.22.7 / 13.9.16 / 14.3.1 tags); the fix PR is https://github.com/ChilliCream/graphql-platform/pull/9528 and advisory GHSA-qr3m-xw4c-jqw3. There is no true application-level workaround because StackOverflowException cannot be caught in .NET and the parser runs before any validation rule. As a partial compensating control, cap HTTP request body size at the reverse proxy or load balancer (e.g. nginx client_max_body_size, an ingress annotation, or IIS maxAllowedContentLength) to well under the observed 40 KB crashing payload; note the trade-off that legitimate large queries or batched operations may be rejected, and that this does not eliminate risk since 40 KB is small, highly compressible (a few hundred bytes gzipped), and below most default limits. Consider running GraphQL workers in a Kubernetes/IIS configuration that restarts crashed processes quickly and isolates blast radius, but understand this only limits, not prevents, the outage - upgrading is the only real fix.

CVE-2025-1974 CRITICAL POC
9.8 Mar 25

A critical vulnerability in Kubernetes ingress-nginx controller allows unauthenticated attackers with pod network access

CVE-2026-45321 CRITICAL POC
9.6 May 12

Credential-harvesting malware compromised 84 versions of 42 TanStack npm packages on 2026-05-11 via chained GitHub Actio

CVE-2025-1098 HIGH POC
8.8 Mar 25

Kubernetes ingress-nginx contains a configuration injection vulnerability via the mirror-target and mirror-host Ingress

CVE-2025-24514 HIGH POC
8.8 Mar 25

A security issue was discovered in ingress-nginx https://github.com/kubernetes/ingress-nginx where the `auth-url` Ingres

CVE-2025-1097 HIGH POC
8.8 Mar 25

A security issue was discovered in ingress-nginx https://github.com/kubernetes/ingress-nginx where the `auth-tls-match-c

CVE-2020-8554 MEDIUM POC
6.3 Jan 21

Kubernetes API server in all versions allow an attacker who is able to create a ClusterIP service and set the spec.exter

CVE-2023-3676 HIGH POC
8.8 Oct 31

A security issue was discovered in Kubernetes where a user that can create pods on Windows nodes may be able to escalate

CVE-2025-55190 CRITICAL POC
9.9 Sep 04

Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes. Rated critical severity (CVSS 9.9), this vulne

CVE-2026-34976 CRITICAL POC
10.0 Apr 02

Unauthenticated remote attackers can trigger complete database overwrites, server-side file reads, and SSRF attacks agai

CVE-2018-18843 CRITICAL POC
10.0 Dec 04

The Kubernetes integration in GitLab Enterprise Edition 11.x before 11.2.8, 11.3.x before 11.3.9, and 11.4.x before 11.4

CVE-2026-54680 CRITICAL POC
9.9 Jul 29

Fluentd configuration injection in the kube-logging Logging operator before 6.6.0 allows a namespace-scoped user who can

CVE-2026-22039 CRITICAL POC
9.9 Jan 27

Kyverno Kubernetes policy engine prior to 1.x has a privilege escalation vulnerability (CVSS 9.9) allowing policy bypass

Share

CVE-2026-40324 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy