CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-56170

CVE-2026-56170: Remote Denial of Service via Resource Exhaustion in ASP.NET Core

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 21, 2026·7 min read·42 visits

Executive Summary (TL;DR)

A remote, unauthenticated attacker can exploit multiple resource-allocation weaknesses (CWE-770) within ASP.NET Core to exhaust heap memory or trigger unhandled stack overflows, leading to a complete Denial of Service.

CVE-2026-56170 is a high-severity Remote Denial of Service (DoS) vulnerability in Microsoft's ASP.NET Core framework. The vulnerability spans three separate resource-management vectors within the ASP.NET Core ecosystem, including SignalR Stateful Reconnect allocations, JSON Patch Type Confusion leading to stack exhaustion, and Kestrel HTTP/2 synchronization issues. An unauthenticated remote attacker can exploit these issues to cause process-terminating exceptions, rendering applications unavailable.

Vulnerability Overview

CVE-2026-56170 represents a cluster of resource-management flaws classified under CWE-770 (Allocation of Resources Without Limits or Throttling). The vulnerability resides in core components of the ASP.NET Core framework, specifically the SignalR transport subsystem, the Microsoft.AspNetCore.JsonPatch middleware, and the Kestrel HTTP/2 stream handler. Because these components run at the front line of incoming HTTP traffic, they expose a highly critical attack surface.

An unauthenticated remote attacker can leverage these flaws to induce resource exhaustion over a network. Depending on the targeted vector, the exploit results in either system-wide heap memory saturation, thread pool starvation, or immediate worker-process termination via an unhandled stack overflow. The vulnerability affects standard configurations of .NET 8.0, 9.0, and 10.0 deployments.

The impact is limited to system availability, but because the underlying processes are completely terminated or starved of execution context, recovery often requires administrator intervention or automated process-recycling mechanisms. No data disclosure or integrity loss has been identified in connection with this vulnerability.

Root Cause Analysis

The vulnerability is split into three primary technical vectors, each targeting a distinct resource-allocation weakness in ASP.NET Core.

Vector A: SignalR Stateful Reconnect Resource Saturation

The Stateful Reconnect feature, designed to preserve client sessions during transient network drops, stores outbound messages in an in-memory buffer (StatefulReconnectBufferSize). In affected versions, the SignalR transport manager does not enforce global limits on the cumulative memory allocated for all disconnected sessions or limit the total number of concurrently suspended connections. Consequently, an attacker can open numerous connections, trigger outbound traffic, drop the TCP connection, and force Kestrel to keep these active, pinned memory structures allocated on the heap.

Vector B: JSON Patch Type Confusion & Recursion

Inside the JSON Patch parser implementation (Microsoft.AspNetCore.JsonPatch.SystemTextJson), the TryTraverse method in ListAdapter.cs attempts to identify if a target deserialized object is an array by casting it using the non-generic IList interface. However, modern System.Text.Json collection nodes—such as JsonArray—implement the generic IList<JsonNode> interface but do not implement the legacy, non-generic IList interface. When encountering a JsonArray, this cast returns null, causing the parser to fall back to the generic ObjectAdapter.

The ObjectAdapter attempts to traverse the JsonArray properties using reflection. Because these JSON node structures contain cyclic parent-child node pointers, the reflective property traversal falls into an infinite loop, exhausting the thread's stack frame and triggering an unrecoverable StackOverflowException.

Vector C: Kestrel HTTP/2 Stream Lifetime Desynchronization

When handling an HTTP/2 stream abort via a RST_STREAM frame, a race condition exists between the application thread writing response headers and the Kestrel connection-processing thread. If the application delegate continues writing to the stream while the abort sequence is running, Kestrel fails to execute a timely connection-level teardown. This delay leaves connection-bound resources, such as SignalR message buffers, allocated in memory far longer than expected, compounding the heap exhaustion attack vectors.

Code Analysis

The fix for the JSON Patch vulnerability (Vector B) directly resolves the type-confusion issue in ListAdapter.cs. Below is the comparison of the vulnerable logic versus the type-safe collection detection introduced in the official patch.

// VULNERABLE CODE
public virtual bool TryTraverse(object target, string segment, JsonSerializerOptions serializerOptions, out object value, out string errorMessage)
{
    // Non-generic IList cast fails on System.Text.Json.Nodes.JsonArray
    var list = target as IList;
    if (list == null)
    {
        value = null;
        errorMessage = null; // Forces fallback to ObjectAdapter (reflective traversal)
        return false;
    } 
    // ...
}

To remediate this, Microsoft replaced the legacy cast with a type-aware detection helper TryGetListTypeArgument and introduced a safe utility wrapper (GenericListOrJsonArrayUtilities) to access index elements without relying on standard reflection:

// PATCHED CODE (Commit: 73c3f2518a77f716685c6ba8e694fce2199b1df0)
public virtual bool TryTraverse(object target, string segment, JsonSerializerOptions serializerOptions, out object value, out string errorMessage)
{
    // Correctly inspects if target is a generic IList<T> or JsonArray
    if (!TryGetListTypeArgument(target, out _, out errorMessage))
    {
        value = null;
        return false;
    }
 
    if (!int.TryParse(segment, out var index))
    {
        value = null;
        errorMessage = Resources.FormatInvalidIndexValue(segment);
        return false;
    }
 
    // Retrieve counts safely via a specialized utility
    var count = GenericListOrJsonArrayUtilities.GetCount(target);
    if (index < 0 || index >= count)
    {
        value = null;
        errorMessage = Resources.FormatIndexOutOfBounds(segment);
        return false;
    }
 
    // Extract element using generic access, avoiding infinite reflective loops
    value = GenericListOrJsonArrayUtilities.GetElementAt(target, index);
    errorMessage = null;
    return true;
}

This fix completely prevents the code from falling back to reflection-based traversal on standard JSON nodes, thereby eliminating the infinite loop and the resulting stack overflow condition.

Exploitation Methodology

An attacker can exploit these issues using two distinct approaches depending on the configured application endpoints.

Scenario A: SignalR Heap Saturation

  1. The attacker establishes 5,000 to 10,000 parallel WebSocket or HTTP transport connections to a vulnerable SignalR hub.
  2. The attacker triggers actions that prompt the server to queue outbound responses to the clients.
  3. The attacker terminates the socket TCP connection abruptly (using TCP RST packets), preventing normal session closure handshakes.
  4. Kestrel transitions the connections to a Suspended state, allocating tracking buffers and retaining outbound queues on the heap.
  5. The attacker repeats the sequence. Because global limits are not enforced, cumulative allocations consume the server's available virtual memory, causing an OutOfMemoryException.

Scenario B: JSON Patch Stack Overflow

  1. The attacker targets an HTTP endpoint that accepts JsonPatchDocument input parameters.
  2. The attacker sends a PATCH request targeting a parameter backed by a JsonArray structures containing recursive properties.
  3. The payload contains a traversal path designed to force index evaluation.
  4. The server-side JSON Patch processor runs the vulnerable TryTraverse path, fails the IList cast, falls back to property-reflection on the cyclic array nodes, and overflows the stack.

Impact Assessment

The overall security impact of CVE-2026-56170 is rated as High (CVSS Base Score 7.5). Successful exploitation results in a complete Denial of Service on the affected application hosting process.

In the case of Vector B, the exploitation leads to a native StackOverflowException. Within the .NET CLR, a stack overflow is an unrecoverable runtime exception that immediately terminates the worker process. Unlike standard exceptions, it cannot be caught or handled within user code. This results in immediate downtime for all users sharing the application pool.

In the case of Vector A, memory exhaustion degrades application performance before culminating in an OutOfMemoryException. This crash degrades the availability of any other application instances hosted on the same container, VM, or IIS application pool, representing a high-impact infrastructure vulnerability.

Remediation & Hardening

To address this vulnerability, security teams must deploy official Microsoft updates to the .NET runtime and SDK, or apply configuration-level mitigations to reduce the attack surface.

Upgrade Paths:

Deploy the patched runtime versions according to the channel in use:

  • .NET 8.0: Upgrade to version 8.0.29 or newer.
  • .NET 9.0: Upgrade to version 9.0.18 or newer.
  • .NET 10.0: Upgrade to version 10.0.6 or newer.

Workaround - Hardening SignalR Configurations:

If upgrading the runtime is delayed, you can mitigate Vector A by disabling the Stateful Reconnect feature or restricting the connection-buffer size in Program.cs:

builder.Services.AddSignalR(options =>
{
    // Set buffer size to 0 to disable Stateful Reconnect globally
    options.StatefulReconnectBufferSize = 0;
});

Workaround - Request Size Limitations:

Enforce strict maximum limits on the request body sizes handled by Kestrel to prevent processing exceptionally large or deeply nested JSON Patch requests:

builder.WebHost.ConfigureKestrel(options =>
{
    options.Limits.MaxRequestBodySize = 1048576; // Cap request sizes at 1MB
});

Fix Analysis (4)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H/E:U/RL:O/RC:C
EPSS Probability
0.80%
Top 48% most exploited

Affected Systems

ASP.NET Core applications built on .NET 8.0ASP.NET Core applications built on .NET 9.0ASP.NET Core applications built on .NET 10.0Applications implementing Microsoft.AspNetCore.JsonPatch.SystemTextJsonApplications implementing SignalR with Stateful Reconnect enabled

Affected Versions Detail

Product
Affected Versions
Fixed Version
ASP.NET Core 8.0
Microsoft
>= 8.0.0, < 8.0.298.0.29
ASP.NET Core 9.0
Microsoft
>= 9.0.0, < 9.0.189.0.18
ASP.NET Core 10.0
Microsoft
>= 10.0.0, < 10.0.610.0.6
AttributeDetail
CWE IDCWE-770
Attack VectorNetwork
CVSS Score7.5 (High)
EPSS Score0.00798 (Percentile: 52.50%)
ImpactDenial of Service (DoS)
Exploit StatusTheoretical / Proof of Concept
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499.002Endpoint Denial of Service: Application Exhaustion
Impact
T1499.001Endpoint Denial of Service: OS Credential/Resource Starvation
Impact
CWE-770
Allocation of Resources Without Limits or Throttling

The software allocates memory, CPU, or other resources based on actor-controlled inputs without enforcing limits on the size, quantity, or rate of allocations.

Vulnerability Timeline

Microsoft developers commit internal hotfixes to private mirrors.
2026-02-20
Hardening tests and fixes for Kestrel and JSON Patch merged into public branches.
2026-03-04
Microsoft releases .NET updates (10.0.6, 9.0.18, 8.0.29) resolving the issues.
2026-07-14
Microsoft publishes CVE-2026-56170 advisory on the MSRC portal.
2026-07-14

References & Sources

  • [1]Microsoft Security Advisory for CVE-2026-56170
  • [2]NVD - CVE-2026-56170 Detail
  • [3]CVE.org - CVE-2026-56170 Record
  • [4]Wiz Vulnerability Database - CVE-2026-56170 Analysis

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 20 hours ago•CVE-2026-12243
7.5

CVE-2026-12243: Incomplete Path Traversal Validation and Percent-Encoding Bypass in NLTK

CVE-2026-12243 is a path traversal vulnerability in the Natural Language Toolkit (NLTK) version 3.9.4. The flaw exists because the input validation routine fails to account for percent-encoded directory traversal sequences like '..%2f' before passing them to urllib.request.url2pathname(), which decodes them into active traversal sequences.

Amit Schendel
Amit Schendel
5 views•8 min read
•about 21 hours ago•CVE-2026-73654
8.5

CVE-2026-73654: Prototype Pollution in Trigger.dev leading to Cascading Denial of Service

CVE-2026-73654 is a high-severity prototype pollution vulnerability in Trigger.dev. The flaw occurs during the handling of run-metadata updates through the PUT /api/v1/runs/:runId/metadata endpoint. Because user-supplied keys are parsed directly by the @jsonhero/path library without sanitization, an authenticated attacker with low privileges can pollute the global Object.prototype. This causes database queries via Prisma ORM to fail validation and induces unhandled exceptions in the Prometheus metrics client, resulting in a process-wide denial of service.

Alon Barad
Alon Barad
11 views•6 min read
•about 23 hours ago•CVE-2026-73559
6.5

CVE-2026-73559: Uncontrolled Resource Consumption in vLLM API completions

CVE-2026-73559 is an uncontrolled resource consumption vulnerability in the vLLM engine, specifically within the /v1/completions API endpoint, allowing authenticated attackers to cause application-level denial of service via unbounded prompt arrays.

Amit Schendel
Amit Schendel
10 views•5 min read
•1 day ago•CVE-2026-54526
9.9

CVE-2026-54526: Strict Template Referencing Bypass and Privilege Escalation in Argo Workflows

A critical security bypass vulnerability in Argo Workflows allows authenticated attackers with workflow submission privileges to bypass 'Strict' or 'Secure' template referencing restrictions. By injecting unvalidated fields into the nested ArtifactGC configuration, attackers can execute arbitrary pod patches, leading to host namespace escape and cluster-wide privilege escalation.

Alon Barad
Alon Barad
15 views•6 min read
•1 day ago•CVE-2026-54249
6.8

CVE-2026-54249: Server-Side Request Forgery via Confused Deputy in Pydantic AI UI Adapters

A Server-Side Request Forgery (SSRF) / Confused Deputy vulnerability has been identified in Pydantic AI UI Adapters (such as VercelAIAdapter). Under certain conditions, a malicious client can supply manipulated message history with provider metadata that forces the server to resolve files within privileged cloud environments (AWS S3, Google Cloud Storage) or model providers. This occurs because the adapters deserialize client-provided metadata structures directly into UploadedFile instances without validation, which are subsequently fetched using high-privilege server credentials.

Alon Barad
Alon Barad
7 views•7 min read
•1 day ago•GHSA-RM43-82J9-R4MJ
8.2

GHSA-RM43-82J9-R4MJ: Path Traversal (Arbitrary File Read) in atomic-agents-stack Dashboard

A path traversal vulnerability in the optional dashboard server of atomic-agents-stack before version 1.1.0 allows unauthenticated remote attackers to read arbitrary files from the host filesystem.

Amit Schendel
Amit Schendel
8 views•6 min read