Aug 12, 2026·6 min read·3 visits
Use-after-free in MSQuic leads to high-impact remote information disclosure of server memory.
A critical use-after-free vulnerability in Microsoft QUIC allows unauthenticated remote attackers to disclose sensitive system memory over the network. The vulnerability is caused by a race condition during rapid connection termination and asynchronous packet retransmission.
The Microsoft QUIC library (msquic.dll) forms the foundational transport layer for high-performance networks in the .NET runtime ecosystem. It handles state machines, packet processing, and transport-level encryption for protocols like HTTP/3. In multi-tenant or concurrent environments, this component exposes a critical network attack surface, as it directly processes raw, untrusted incoming network frames before dispatching them to the application layer.
CVE-2026-62898 identifies a critical memory lifecycle vulnerability within this transport library. The flaw is classified under CWE-416 (Use After Free). It allows an unauthenticated remote attacker to compromise system confidentiality by forcing the host to transmit sensitive process memory over the network.
Because the underlying library operates within high-privilege user-space processes (such as Kestrel web servers hosting ASP.NET Core applications), the leaked data may contain cryptographic keys, session tokens, or transaction payloads. This analysis explores the technical architecture of the vulnerability, its root causes, and remediation paths.
The vulnerability is located in the memory buffer synchronization mechanism between the managed .NET layer (System.Net.Quic) and the native MSQuic library (msquic.dll). To minimize garbage collection overhead, .NET pins managed byte arrays and passes their memory addresses directly to native code as zero-copy QUIC_BUFFER structures. MSQuic manages these transport buffers through high-speed internal lookaside lists and memory pools, such as CXPLAT_POOL.
A synchronization defect occurs when a connection or stream is abruptly torn down while asynchronous write operations are still pending in the queue. Under normal circumstances, MSQuic maintains an internal reference counter on active packets to prevent premature reclamation. However, a race condition exists during immediate connection terminations, such as when a CONNECTION_CLOSE or RESET_STREAM frame is processed simultaneously with an active retransmission event.
When the connection aborts, the cleanup routine prematurely decrements the reference count of the associated network buffers, freeing the memory back to the global allocator. Crucially, the pointer to this buffer remains in the asynchronous send queue or the loss-recovery retransmission queue. If another thread reallocates this memory block for a different session, the subsequent asynchronous transmission routine reads from the dangling pointer and serializes recycled data to the remote peer.
The vulnerability in the .NET runtime was resolved by updating the dependency configuration to point to a patched version of the MSQuic native library. The fix is tracked in the dotnet/runtime repository.
File: eng/Versions.props
@@ -161,7 +161,7 @@
<!-- Docs -->
<MicrosoftPrivateIntellisenseVersion>10.0.0-preview-20251006.1</MicrosoftPrivateIntellisenseVersion>
<!-- MsQuic -->
- <MicrosoftNativeQuicMsQuicSchannelVersion>2.4.18</MicrosoftNativeQuicMsQuicSchannelVersion>
+ <MicrosoftNativeQuicMsQuicSchannelVersion>2.5.9</MicrosoftNativeQuicMsQuicSchannelVersion>
<SystemNetMsQuicTransportVersion>9.0.0-alpha.1.24167.3</SystemNetMsQuicTransportVersion>
<!-- emscripten / Node -->
<MicrosoftNETRuntimeEmscriptenVersion>$(MicrosoftDotNetApiCompatTaskPackageVersion)</MicrosoftNETRuntimeEmscriptenVersion>The update from MSQuic 2.4.18 to 2.5.9 implements critical architectural changes within the native packet allocation engine. In version 2.5.9, MSQuic introduces stricter ownership boundaries and memory barriers during stream destruction. This prevents the cleanup code path from releasing packets while they are registered in any active retransmission or send queues.
In the patched version, the reference counting tracking packet lifecycles covers the lifetime of both the primary transmission queue and the connection's loss recovery timers. The underlying buffer cannot be returned to the CXPLAT_POOL lookaside list until the socket layer confirms that no further retransmission attempts can occur for that specific packet identifier.
An attack targeting CVE-2026-62898 does not require prior authentication or specialized privileges. The adversary must establish a standard QUIC handshake with a vulnerable service, such as an HTTP/3 endpoint hosted on Kestrel in .NET 10.0, 9.0, or 8.0. Once the connection is established, the attacker must generate high volumes of concurrent stream requests to populate the server's asynchronous I/O queues.
To trigger the race condition, the attacker issues a rapid series of stream reset requests (RESET_STREAM or CONNECTION_CLOSE) immediately after transmitting payloads. Simultaneously, the attacker must induce packet loss by selectively dropping specific acknowledgement (ACK) packets sent by the server. This sequence forces the server's loss recovery state machine to schedule retransmissions of the recently closed streams.
If the race condition succeeds, the server processes the stream destruction and frees the associated transport buffers before the retransmission routine executes. When the retransmission event eventually triggers, the server reads the current contents of the freed memory block—now populated with data from concurrent server threads—and transmits it to the attacker. The attacker extracts sensitive heap remnants directly from the incoming encrypted payload without crashing the remote process.
The security impact of CVE-2026-62898 is classified as High, with a CVSS v3.1 base score of 7.5. The impact vector is evaluated as CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N. Because the vulnerability resides in the network transport layer, the attack can be executed entirely over the network without local access or user interaction.
The vulnerability is limited to information disclosure (Confidentiality: High) and does not directly support arbitrary code execution (Integrity: None, Availability: None). However, the leakage of heap memory from a high-performance web server poses a significant operational risk. The leaked buffers may contain raw HTTP request headers, session tokens, authorization headers, database queries, or TLS session keys belonging to other users.
Furthermore, because the memory pool reuse occurs silently within the native process, exploiting this flaw does not cause application crashes or trigger system alerts. This lack of crash indicators makes detection via traditional availability monitoring tools highly difficult, allowing prolonged unauthorized data collection under specific network conditions.
The primary remediation for CVE-2026-62898 is applying the official security updates released by Microsoft. Developers and administrators must upgrade their .NET runtimes, SDKs, and Visual Studio installations to the designated secure versions immediately.
For .NET environments, the required secure versions are:
For development environments running Microsoft Visual Studio, the patched versions are:
In scenarios where immediate patching is not feasible, organizations should evaluate whether HTTP/3 (QUIC) can be temporarily disabled at the web server layer (e.g., Kestrel configuration or reverse proxy) to fall back to HTTP/2 over standard TLS (TCP). This configuration change effectively eliminates the attack surface by bypassing the vulnerable msquic.dll state machine.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
.NET 10.0 Microsoft | >= 10.0.0, < 10.0.11 | 10.0.11 |
.NET 9.0 Microsoft | >= 9.0.0, < 9.0.19 | 9.0.19 |
.NET 8.0 Microsoft | >= 8.0.0, < 8.0.30 | 8.0.30 |
Microsoft Visual Studio 2022 Microsoft | >= 17.14.0, < 17.14.38 | 17.14.38 |
Microsoft Visual Studio 2026 Microsoft | >= 18.0, < 18.8.3 | 18.8.3 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-416 |
| Attack Vector | Network |
| CVSS Score | 7.5 (High) |
| EPSS Score | 0.00% |
| Exploit Status | No weaponized exploit available |
| KEV Status | Not listed in CISA KEV |
The product uses a pointer after it has been freed, which can lead to unexpected behaviors, including crashes, use of stale data, or memory corruption.
CVE-2026-62899 is a security feature bypass vulnerability in the Microsoft .NET runtime environment on non-Windows platforms. The flaw manifests as an HTTP Request/Response Smuggling vulnerability (CWE-444) within the managed implementation of the System.Net.HttpListener class. This allows unauthenticated remote attackers to desynchronize request boundaries when the backend .NET application is hosted behind an upstream reverse proxy.
CVE-2026-62901 is a high-severity Denial of Service (DoS) vulnerability in the Microsoft .NET ecosystem, specifically affecting the System.Net.WebSockets frame-processing engine and associated network transports. Under certain circumstances, a remote, unauthenticated attacker can exploit this vulnerability by sending malformed or specifically crafted WebSocket packets over the network, causing a targeted .NET application server to enter a tight infinite loop. This behavior results in 100% CPU utilization on the executing thread, starving application resources and leading to a complete Denial of Service.
A high-severity Local Elevation of Privilege (EoP) vulnerability exists in the Microsoft .NET runtime and Visual Studio on Unix-like platforms. The flaw arises from an unchecked return value (CWE-252) during the initialization of the Diagnostics Inter-Process Communication (IPC) socket. By exploiting this vulnerability, a low-privileged local attacker can execute arbitrary commands with the privileges of a higher-privileged .NET process.
CVE-2026-70354 is a high-severity local code execution vulnerability affecting multiple versions of the Microsoft .NET runtime, .NET Framework, and Microsoft Visual Studio. The vulnerability is located within the Windows Presentation Foundation (WPF) layout and rendering subsystems, specifically within the parsing and rasterization of complex graphical layouts, XPS files, or custom font structures.
An integer overflow vulnerability (CWE-190) exists in the layout and rendering engines of the Microsoft .NET Framework and .NET Core. This flaw resides within the processing of complex coordinate maps, font tables, and image metadata in Windows Presentation Foundation (WPF) and Windows Forms (WinForms). By convincing a user to open a crafted vector graphic or layout document, a local attacker can exploit this arithmetic error to induce an undersized memory allocation, leading to a heap-based buffer overflow and subsequent arbitrary code execution within the context of the vulnerable application.
CVE-2026-62871 is a high-severity local code execution and elevation of privilege vulnerability in Microsoft .NET and Microsoft Visual Studio. It arises from an out-of-bounds write (heap-based buffer overflow) in the runtime environment during native interoperability or unmanaged pointer manipulation, requiring user interaction to execute arbitrary instructions.