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-114154

CVE-2026-114154: Denial of Service in ASP.NET Core HttpSys Request Header Processing

Amit Schendel
Amit Schendel
Senior Security Researcher

Nov 11, 2026·9 min read·1 visit

Executive Summary (TL;DR)

An unauthenticated remote attacker can trigger a Denial of Service in ASP.NET Core applications hosted on Windows HTTP.sys by sending a single crafted HTTP request containing Transfer-Encoding: chunked, Content-Length, and X-Content-Length headers simultaneously.

CVE-2026-114154 is a high-severity Denial of Service (DoS) and uncontrolled resource consumption vulnerability in the Microsoft.AspNetCore.Server.HttpSys component of ASP.NET Core. When processing an HTTP request that simultaneously contains a chunked Transfer-Encoding header, a Content-Length header, and an explicit X-Content-Length header, the server throws an unhandled ArgumentException during header normalization. In certain versions, subsequent exception handling attempts to dereference a disposed native request context, aborting error response dispatch and leaking unmanaged HTTP.sys request structures.

Vulnerability Overview

CVE-2026-114154 is an unauthenticated remote Denial of Service (DoS) vulnerability affecting ASP.NET Core web applications configured to use the Windows HTTP Server API (HTTP.sys) via the Microsoft.AspNetCore.Server.HttpSys server implementation. Unlike Kestrel, which is a cross-platform managed web server, HttpSys interfaces directly with the kernel-mode http.sys driver on Windows to receive and process incoming HTTP requests.

The vulnerability is classified under CWE-401 (Missing Release of Memory after Effective Lifetime). It occurs during the initial request parsing and header normalization phase within the managed HttpSys wrapper. When an incoming HTTP/1.1 request includes both Transfer-Encoding: chunked and a Content-Length header, ASP.NET Core attempts to strip the Content-Length header to maintain compliance with RFC 9112 §6.1 and mitigate HTTP request smuggling risks.

To preserve the original value for diagnostic and backwards-compatibility purposes, the server copies the Content-Length value into a backup header named X-Content-Length. However, the code performs this insertion using IHeaderDictionary.Add(), which does not permit duplicate keys. If a client explicitly includes an X-Content-Length header alongside Transfer-Encoding: chunked and Content-Length, the dictionary throws an unhandled ArgumentException.

During the recovery phase in the asynchronous I/O completion callback (AsyncAcceptContext.IOCompleted), the exception handler attempts to send an HTTP 400 Bad Request response using the native request identifier. Because the underlying _nativeRequestContext may already be disposed or invalidated when the initial parsing fails, accessing its RequestId property triggers a secondary exception (such as a NullReferenceException or ObjectDisposedException). This secondary failure aborts the error dispatch routine, leaving unmanaged HTTP_REQUEST structures and asynchronous accept slots unreleased.

Root Cause Analysis

The root cause of CVE-2026-114154 consists of two distinct code defects in Microsoft.AspNetCore.Server.HttpSys: an unsafe dictionary insertion in Request.cs and an unsafe pointer/context dereference inside the exception handler of AsyncAcceptContext.cs.

First, during the instantiation and initialization of the managed Request object, the server validates request framing headers. When Transfer-Encoding: chunked is detected alongside a Content-Length header, the method RemoveContentLengthIfTransferEncodingContainsChunked() is invoked. In vulnerable versions of ASP.NET Core, this method executes headerDictionary.Add("X-Content-Length", headerDictionary[HeaderNames.ContentLength]). Because the Headers collection is populated directly from the client-supplied HTTP headers prior to this normalization step, any pre-existing X-Content-Length header sent over the wire already occupies that key in the dictionary. Calling .Add() on an existing key immediately raises a System.ArgumentException.

Second, request acceptance from the Windows kernel driver is managed asynchronously by AsyncAcceptContext.IOCompleted. Within this callback, a try block wraps the creation and initialization of the RequestContext and its corresponding Request object. When RemoveContentLengthIfTransferEncodingContainsChunked() throws the ArgumentException, control transfers to the catch (Exception) block in IOCompleted.

The catch block attempts to terminate the malformed request gracefully by calling server.SendError(asyncResult._nativeRequestContext.RequestId, StatusCodes.Status400BadRequest). However, during the construction and failure of the RequestContext inside the try block, ownership of _nativeRequestContext is manipulated and its underlying memory buffers or pins can be released or nulled out. Consequently, evaluating asyncResult._nativeRequestContext.RequestId inside the catch block results in a secondary unhandled exception, bypassing the SendError call entirely.

> [!IMPORTANT] > Because the secondary exception escapes the catch block before server.SendError can notify the kernel-mode http.sys driver, the unmanaged request handle remains open and the managed asynchronous accept context is not recycled properly.

Code Analysis

Microsoft addressed this vulnerability across multiple servicing branches, including .NET 8.0 (commit 8cb8dc4a1d3e5a6aedeb3dbbfd0b390aac59f172), .NET 9.0 (commit 20e629e9af9cabb0c1c02410be99521821b22f83), and the standalone Microsoft.AspNetCore.Server.HttpSys 2.3 branch (commit efc799e69e38cdc36c7b9c96580014d28e68201c).

In the .NET 8.0 and .NET 9.0 branches, the fix modifies RemoveContentLengthIfTransferEncodingContainsChunked() in src/Servers/HttpSys/src/RequestProcessing/Request.cs to use TryAdd instead of Add:

File: src/Servers/HttpSys/src/RequestProcessing/Request.cs
@@ -522,7 +522,9 @@ private void RemoveContentLengthIfTransferEncodingContainsChunked()
         // We should remove the Content-Length request header in this case, for compatibility
         // reasons, include x-Content-Length so that the original Content-Length is still available.
         IHeaderDictionary headerDictionary = Headers;
-        headerDictionary.Add("X-Content-Length", headerDictionary[HeaderNames.ContentLength]);
+
+        // if user already passed X-Content-Length, we won't overwrite it
+        headerDictionary.TryAdd("X-Content-Length", headerDictionary[HeaderNames.ContentLength]);
         Headers.ContentLength = StringValues.Empty;
 
         if (!AllowKeepAliveAfterCLTE)

By switching to headerDictionary.TryAdd(), the method checks whether X-Content-Length already exists in the dictionary before attempting insertion. If the client already provided an X-Content-Length header, TryAdd returns false without throwing an exception, preserving the client-supplied value while still clearing Headers.ContentLength.

In the release/2.3 branch (commit efc799e69e38cdc36c7b9c96580014d28e68201c), where TryAdd extension methods on IHeaderDictionary are not available on the target framework, the patch uses an explicit ContainsKey check and also remediates the secondary exception hazard in AsyncAcceptContext.cs:

File: src/Servers/HttpSys/src/AsyncAcceptContext.cs
@@ -70,6 +70,8 @@ private static void IOCompleted(AsyncAcceptContext asyncResult, uint errorCode,
                     HttpSysListener server = asyncResult.Server;
                     if (errorCode == UnsafeNclNativeMethods.ErrorCodes.ERROR_SUCCESS)
                     {
+                        var requestId = asyncResult._nativeRequestContext.RequestId;
+
                         // at this point we have received an unmanaged HTTP_REQUEST and memoryBlob
                         // points to it we need to hook up our authentication handling code here.
                         try
@@ -83,7 +85,7 @@ private static void IOCompleted(AsyncAcceptContext asyncResult, uint errorCode,
                         }
                         catch (Exception)
                         {
-                            server.SendError(asyncResult._nativeRequestContext.RequestId, StatusCodes.Status400BadRequest);
+                            server.SendError(requestId, StatusCodes.Status400BadRequest);
                             throw;
                         }
                         finally
 
File: src/Servers/HttpSys/src/RequestProcessing/Request.cs
@@ -380,7 +380,12 @@ private void RemoveContentLengthIfTransferEncodingContainsChunked()
             // We should remove the Content-Length request header in this case, for compatibility
             // reasons, include x-Content-Length so that the original Content-Length is still available.
             IHeaderDictionary headerDictionary = Headers;
-            headerDictionary.Add("X-Content-Length", headerDictionary[HttpKnownHeaderNames.ContentLength]);
+
+            // if user already passed X-Content-Length, we won't overwrite it
+            if (!headerDictionary.ContainsKey("X-Content-Length"))
+            {
+                headerDictionary.Add("X-Content-Length", headerDictionary[HttpKnownHeaderNames.ContentLength]);
+            }
             Headers.ContentLength = StringValues.Empty;

Caching var requestId = asyncResult._nativeRequestContext.RequestId; as a local value type (ulong) prior to entering the try block ensures that even if another parsing exception occurs during RequestContext initialization and disposes _nativeRequestContext, the catch handler can still reliably pass the requestId to server.SendError(). This makes the fix complete against both the specific X-Content-Length collision and any future exceptions thrown during early request initialization.

Exploitation

Exploiting CVE-2026-114154 requires no authentication, special privileges, or complex timing windows. The only prerequisite is that the target ASP.NET Core application is hosted using Microsoft.AspNetCore.Server.HttpSys (webBuilder.UseHttpSys()) and is reachable over HTTP or HTTPS without an intermediate reverse proxy stripping conflicting framing headers.

An attacker can trigger the exception path by sending an HTTP/1.1 request that includes all three headers (Transfer-Encoding: chunked, Content-Length, and X-Content-Length):

POST / HTTP/1.1
Host: target-server.local
Transfer-Encoding: chunked
Content-Length: 1
X-Content-Length: 100
Connection: keep-alive
 
0
 

When the target server receives this payload, the following execution sequence occurs:

  1. The kernel-mode http.sys driver parses the raw HTTP stream and passes the unmanaged HTTP_REQUEST structure to the managed HttpSysListener via AsyncAcceptContext.IOCompleted.
  2. The managed code populates the Headers dictionary with Transfer-Encoding, Content-Length, and X-Content-Length.
  3. Because both Transfer-Encoding: chunked and Content-Length are present, RemoveContentLengthIfTransferEncodingContainsChunked() is executed.
  4. The call to headerDictionary.Add("X-Content-Length", ...) collides with the attacker-supplied X-Content-Length: 100 header and throws an ArgumentException.
  5. In the exception handler of IOCompleted, dereferencing _nativeRequestContext.RequestId fails or the unhandled exception propagates up the I/O completion thread.

> [!NOTE] > In Microsoft's regression test suite (RequestTests.cs), a patched server responds to a request containing Transfer-Encoding: gzip, chunked, Content-Length: 1, and X-Content-Length: 123 with an HTTP 200 OK, stripping Content-Length while preserving X-Content-Length: 123.

By repeatedly transmitting this compact HTTP payload over concurrent connections, an unauthenticated attacker can exhaust available accept contexts, leak native request memory, or crash the hosting worker process, resulting in a sustained denial of service.

Impact Assessment

The primary impact of CVE-2026-114154 is a complete loss of service availability for affected ASP.NET Core endpoints. The vulnerability is rated 7.5 (High) under CVSS v3.1 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H). Because the flaw is triggered during initial header normalization before route matching, authentication middleware, or authorization policies execute, any publicly exposed endpoint on an HttpSys-hosted application is vulnerable.

The vulnerability does not allow arbitrary code execution, memory disclosure, or data modification (C:N/I:N). However, the availability impact (A:H) is severe because each malformed request causes unhandled exceptions on I/O completion threads or orphans native HTTP_REQUEST allocations. Low-bandwidth request floods are sufficient to exhaust server resources or trigger process termination.

Applications hosted on the default ASP.NET Core Kestrel web server (UseKestrel()) or hosted within IIS (using UseIIS() or UseIISIntegration()) do not execute the Microsoft.AspNetCore.Server.HttpSys request processing code path and are unaffected by this vulnerability.

As of publication, CVE-2026-114154 is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog, and no public weaponized exploit modules have been indexed in ExploitDB or PacketStorm.

Remediation

To remediate CVE-2026-114154, organizations must update their .NET runtimes, SDKs, or NuGet package references to the patched releases published by Microsoft.

Patched Versions

  • .NET 8.0: Upgrade to version 8.0.34 or later.
  • .NET 9.0: Upgrade to version 9.0.23 or later.
  • .NET 10.0: Upgrade to version 10.0.15 or later.
  • Microsoft.AspNetCore.Server.HttpSys: For applications referencing the standalone NuGet package (2.3.x branch), upgrade to version 2.3.14 or later.
  • Microsoft Visual Studio: Update Visual Studio 2022 to 17.14.45 and Visual Studio 2026 to 18.11.4 (or apply the update for 18.12.0).

Workarounds and Mitigations

If immediate patching of the .NET runtime or application packages is not feasible, security teams can apply the following mitigations:

  1. Enforce Strict RFC 9112 Framing at Upstream Proxies/WAFs: Configure any front-end load balancer, Application Delivery Controller (ADC), or Web Application Firewall (WAF) positioned in front of the HttpSys server to reject incoming HTTP requests that contain both a Transfer-Encoding header and a Content-Length header with an HTTP 400 Bad Request response.
  2. Strip X-Content-Length at the Edge: Configure upstream reverse proxies to remove any client-supplied X-Content-Length header before forwarding requests to the backend ASP.NET Core server.
  3. Migrate Hosting Model: Where architecturally appropriate, transition the application from UseHttpSys() to UseKestrel() or deploy behind IIS, provided Windows kernel-level features specific to HttpSys (such as kernel-mode Windows Authentication or direct port sharing without IIS) are not strictly required.

Official Patches

MicrosoftMicrosoft Security Response Center (MSRC) Advisory for CVE-2026-114154
MicrosoftASP.NET Core v10.0.15 Release
MicrosoftASP.NET Core v9.0.23 Release
MicrosoftASP.NET Core v8.0.34 Release

Fix Analysis (3)

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

Affected Systems

Microsoft.AspNetCore.Server.HttpSysASP.NET Core (.NET 8.0, .NET 9.0, .NET 10.0)Microsoft Visual Studio 2022 version 17.14Microsoft Visual Studio 2026 version 18.11Microsoft Visual Studio 2026 version 18.12

Affected Versions Detail

Product
Affected Versions
Fixed Version
Microsoft.AspNetCore.Server.HttpSys
Microsoft
>= 2.3.10, < 2.3.142.3.14
.NET 8.0
Microsoft
>= 8.0.0, < 8.0.348.0.34
.NET 9.0
Microsoft
>= 9.0.0, < 9.0.239.0.23
.NET 10.0
Microsoft
>= 10.0.0, < 10.0.1510.0.15
Microsoft Visual Studio 2022 version 17.14
Microsoft
>= 17.14.0, < 17.14.4517.14.45
Microsoft Visual Studio 2026 version 18.11
Microsoft
>= 18.11.0, < 18.11.418.11.4
Microsoft Visual Studio 2026 version 18.12
Microsoft
18.12.018.12.1
AttributeDetail
CWE IDCWE-401 (Missing Release of Memory after Effective Lifetime)
CVSS v3.1 Score7.5 High (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)
Attack VectorNetwork (Unauthenticated HTTP/1.1 Request)
Affected ComponentMicrosoft.AspNetCore.Server.HttpSys
Primary ImpactDenial of Service via Unhandled Exception & Native Resource Leak
Exploit StatusUnproven (No Public Weaponized Exploits)
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-401
Missing Release of Memory after Effective Lifetime

The application fails to release memory and native resources allocated for request contexts and unmanaged HTTP.sys handles after their effective lifetime when early parsing exceptions abort normal connection lifecycle management.

Vulnerability Timeline

CVE-2026-114154 published by Microsoft and indexed by CVE.org and NVD
2026-11-10
Official security patches released for .NET 8.0, .NET 9.0, .NET 10.0, and Microsoft.AspNetCore.Server.HttpSys 2.3
2026-11-10

References & Sources

  • [1]Microsoft Security Response Center (MSRC) Security Update Guide: CVE-2026-114154
  • [2]CVE Official Record: CVE-2026-114154
  • [3]GitHub Patch Commit (ASP.NET Core release/9.0 - PR 65561)
  • [4]GitHub Patch Commit (ASP.NET Core release/8.0 - PR 65559)
  • [5]GitHub Patch Commit (ASP.NET Core release/2.3 - PR 65343)
  • [6]ASP.NET Core Release v10.0.15
  • [7]ASP.NET Core Release v9.0.23
  • [8]ASP.NET Core Release v8.0.34
  • [9]Shodan CVEDB Entry: CVE-2026-114154

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

•15 minutes ago•CVE-2026-124194
6.5

CVE-2026-124194: Forced Authentication and NetNTLMv2 Credential Leakage in Microsoft Office Outlook

CVE-2026-124194 is a forced authentication and spoofing vulnerability in Microsoft Office Outlook caused by a missing user interface warning before dereferencing remote network paths (CWE-356). By embedding an attacker-controlled Universal Naming Convention (UNC) path within MAPI message properties such as PidLidReminderFileParameter, an unauthenticated remote attacker can force a victim's system to initiate an outbound SMB or WebDAV connection upon opening or previewing a crafted message. This automatic authentication handshake leaks the user's NetNTLMv2 hash, enabling offline password cracking or real-time NTLM relay attacks. The vulnerability was exploited in the wild as a zero-day prior to its remediation in Microsoft's November 2026 Patch Tuesday updates and is listed in the CISA Known Exploited Vulnerabilities (KEV) catalog.

Alon Barad
Alon Barad
0 views•10 min read
•about 1 hour ago•CVE-2026-120778
7.3

CVE-2026-120778: Local Elevation of Privilege via Insecure Temporary Directory Handling and MSBuild Response File Hijacking in Microsoft .NET Aspire CLI

A local elevation of privilege vulnerability exists in the Microsoft .NET Aspire CLI (`Aspire.Cli`) versions 13.5.4 prior to 13.6.5. When executing SDK management commands (`aspire sdk generate`, `aspire sdk dump`, and `aspire sdk export`), the CLI creates temporary project directories inside the shared operating system temporary folder (such as `/tmp` on Unix-like systems) without restricting directory permissions or disabling MSBuild automatic response file resolution. A local, low-privileged attacker on a multi-user system can place a crafted `Directory.Build.rsp` file in the shared temporary directory hierarchy. When a victim user executes an affected Aspire CLI command, MSBuild traverses upward, ingests the attacker-controlled response file, and executes arbitrary commands in the security context of the victim user.

Alon Barad
Alon Barad
2 views•10 min read
•about 2 hours ago•CVE-2026-120792
7.3

CVE-2026-120792: Local Information Disclosure via Temporary File Logging in Microsoft .NET Aspire CLI

CVE-2026-120792 is a high-severity local information disclosure vulnerability in the Microsoft .NET Aspire CLI (Aspire.Cli) affecting versions 13.5.4 prior to 13.6.5. The flaw stems from the insertion of sensitive information into a shared temporary log file (CWE-532) combined with insecure temporary file creation (CWE-377) within the DeprecatedMcpCommandScanner component. During agent configuration scanning, the CLI unconditionally appends internal workspace paths and the first 200 characters of Model Context Protocol (MCP) agent configuration files to a statically named file in the system temporary directory. On multi-user systems, unprivileged local users can read this file to harvest API keys, authentication tokens, and internal service endpoints.

Alon Barad
Alon Barad
3 views•9 min read
•about 3 hours ago•CVE-2026-114159
8.8

CVE-2026-114159: Heap-Based Buffer Overflow in Microsoft Visual Studio and .NET Native Symbol Reader

CVE-2026-114159 is a heap-based buffer overflow vulnerability (CWE-122) in Microsoft.DiaSymReader.Native affecting Microsoft Visual Studio and the .NET Runtime on Windows. An integer truncation error during the parsing of oversized document names in Portable PDB symbol files causes an undersized heap allocation, leading to an out-of-bounds memory write and remote code execution.

Alon Barad
Alon Barad
6 views•10 min read
•about 4 hours ago•CVE-2026-114158
8.8

CVE-2026-114158: Heap-Based Buffer Overflow in Microsoft.DiaSymReader.Native Portable PDB Parser

CVE-2026-114158 is a high-severity remote code execution vulnerability affecting Microsoft Visual Studio 2026 and multiple supported servicing branches of Microsoft .NET (.NET 8.0, 9.0, 10.0, and 11.0) on Windows. The flaw resides in the native symbol reader library, Microsoft.DiaSymReader.Native, and is triggered when parsing Portable Program Database (PDB) metadata containing malformed EmbeddedSource custom debug information records. By supplying a parent Record Identifier (RID) of zero or an out-of-bounds value, an attacker causes an integer underflow during 1-based to 0-based index conversion, leading to a heap-based buffer overflow and arbitrary code execution within the context of the host developer tool or runtime.

Amit Schendel
Amit Schendel
4 views•10 min read
•about 5 hours ago•CVE-2026-114151
8.8

CVE-2026-114151: Remote Code Execution via Stack-Based Buffer Overflow in Microsoft Visual Studio and .NET Symbol Reader

CVE-2026-114151 is a high-severity remote code execution vulnerability affecting Microsoft Visual Studio 2026 and multiple supported versions of the Microsoft .NET runtime on Windows. The flaw resides in the native Debug Information Access (DIA) symbol reader component, Microsoft.DiaSymReader.Native. When parsing Program Database (.pdb) files, the component fails to validate the length of serialized numeric records (specifically LF_DECIMAL structures) before unpacking them into a fixed-size stack buffer. An attacker who convinces a user or automated diagnostic process to load a crafted .pdb file can trigger a stack-based buffer overflow, resulting in arbitrary code execution within the context of the host process.

Alon Barad
Alon Barad
5 views•9 min read