Sep 9, 2026·7 min read·271 visits
A heap-based buffer overflow in .NET and Visual Studio allows unauthenticated remote code execution via malformed project files or network payloads.
CVE-2026-69522 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET runtimes, .NET Framework, and Visual Studio caused by a heap-based buffer overflow (CWE-122). An unauthenticated attacker can exploit this flaw by inducing a user to open a malicious project file or by transmitting crafted payloads over the network, leading to arbitrary code execution within the context of the running application.
CVE-2026-69522 is a critical heap-based buffer overflow vulnerability residing within the native parsing libraries utilized by the Microsoft .NET Runtime and Visual Studio. The flaw allows an unauthenticated, remote attacker to execute arbitrary code within the security context of the affected application or user. To exploit this vulnerability, an attacker must leverage network delivery or local file distribution to deliver a malformed payload that triggers the parsing logic.
The vulnerability is classified under CWE-122 (Heap-based Buffer Overflow). In client-side environments such as Visual Studio, exploitation typically relies on user interaction, such as persuading a developer to open a corrupted project configuration or localized resource file. In server-side .NET applications, the vulnerability may be triggered when the application parses untrusted network inputs or streams using vulnerable native modules.
The CVSS v3.1 score for this vulnerability is assessed at 8.8 (High), reflecting a high-impact threat that demands immediate remediation. Although exploitation is theoretical and no public proof-of-concept is currently available, the capability for complete confidentiality, integrity, and availability compromise makes this vulnerability a priority target for enterprise patching.
The root cause of CVE-2026-69522 lies in the boundary handling of native parsing functions within the .NET runtime host environment. While managed .NET assemblies run within a safe execution environment, certain high-performance tasks such as localized resources, cryptographic parsing, and GUI layout are handed off to native C/C++ dynamic link libraries. This interface presents a potential boundary where security controls can break down if input validation is insufficient.
When the native parsing library processes external assets or network streams, it reads a length header indicating the size of the incoming payload. The vulnerability occurs because the parser allocates a fixed-size buffer on the process heap without verifying that the declared stream payload fits within the allocated block. If the payload exceeds the allocated buffer size, a subsequent copy instruction writes data past the buffer boundary.
This classic heap-based overflow corrupts adjacent heap headers and pointers in memory. In a structured heap-based attack, the overflow allows the corruption of internal C++ object virtual tables (vtables) or application function pointers. When the application attempts to resolve and execute a virtual method from the corrupted table, execution control is hijacked.
The following diagram illustrates the vulnerable data flow during the processing of localized assets or remote project stream files. The lack of bounds checking before the allocation and write operations leads directly to heap corruption.
To illustrate the vulnerability and its remediation, consider the following representation of the native parsing mechanism before and after the application of the Microsoft patch.
// VULNERABLE IMPLEMENTATION
void ParseResourceStream(char* sourceStream, unsigned int streamSize) {
// Reading the length header from the stream
unsigned short declaredLength = *(unsigned short*)sourceStream;
// Allocating a fixed buffer size on the heap based on assumptions
char* heapBuffer = (char*)malloc(FIXED_BUFFER_SIZE);
if (heapBuffer == NULL) return;
// Vulnerable copy: fails to validate if declaredLength exceeds FIXED_BUFFER_SIZE
// This allows an attacker to overwrite memory beyond the allocated 1024 bytes
memcpy(heapBuffer, sourceStream + sizeof(unsigned short), declaredLength);
ProcessData(heapBuffer);
free(heapBuffer);
}The patch introduces strict validation of the incoming payload length against both the allocated buffer and maximum boundaries, preventing the heap corruption.
// PATCHED IMPLEMENTATION
void ParseResourceStream(char* sourceStream, unsigned int streamSize) {
if (streamSize < sizeof(unsigned short)) return;
unsigned short declaredLength = *(unsigned short*)sourceStream;
// Remediation: Ensure the declared length does not exceed stream size or buffer limit
if (declaredLength > FIXED_BUFFER_SIZE || (declaredLength + sizeof(unsigned short)) > streamSize) {
// Reject processing immediately to prevent buffer overflow
return;
}
char* heapBuffer = (char*)malloc(FIXED_BUFFER_SIZE);
if (heapBuffer == NULL) return;
// Safe copy operation confined within the allocated heap boundaries
memcpy(heapBuffer, sourceStream + sizeof(unsigned short), declaredLength);
ProcessData(heapBuffer);
free(heapBuffer);
}Exploitation of CVE-2026-69522 requires the delivery of a malformed data structure to a vulnerable .NET runtime or Visual Studio environment. In a typical client-side attack scenario, an attacker crafts a malicious localized resource file (.resx), project configuration file, or solution file. This asset is then integrated into a public repository or delivered directly to the target user.
Once the developer opens the corrupted solution folder or clones the repository, Visual Studio automatically initiates design-time compilation and resource loading. During this parsing sequence, the native module processes the malformed stream, triggering the heap overflow. The application's process context is corrupted, allowing the attacker's shellcode to run.
For server-side .NET applications, exploitation depends on whether the application parses serialized remote payloads or incoming network packets via vulnerable components. An attacker sends a crafted network stream directly to the application socket, triggering the heap-based buffer overflow remotely. Because no privileges are required to connect to the public endpoint, this vector represents a significant risk to unpatched internet-exposed applications.
The security impact of CVE-2026-69522 is severe, as successful exploitation results in arbitrary code execution in the context of the running application. On developer workstations, this allows attackers to compromise sensitive intellectual property, steal credentials, or establish persistence within corporate networks. The compromise of a developer machine often serves as a stepping stone for supply chain attacks.
In server environments, an attacker could exploit the flaw to execute code under the service account of the .NET application. If the application is configured to run with elevated privileges, the attacker gains immediate control of the host operating system. This could lead to data exfiltration from connected database backends or the modification of sensitive production services.
The CVSS v3.1 base score of 8.8 reflects high severity. The metrics emphasize that the attack vector is network-based (AV:N), complexity is low (AC:L), and no privileges are required (PR:N). However, because exploitation relies on the victim opening a file or establishing a malicious connection, user interaction is marked as required (UI:R).
The primary remediation strategy is the immediate deployment of security updates provided by Microsoft. Developers should verify that all installations of Visual Studio are updated to version 17.14.40 (for Visual Studio 2022) or 18.9.3 (for Visual Studio 2026). Production and development environments running .NET runtimes must be upgraded to 8.0.31, 9.0.20, 10.0.12, or 11.0 RC1.
For environments where immediate patching is not possible, local mitigations must be implemented to minimize the attack surface. Administrators should enforce strict Trust Settings within Visual Studio, preventing automatic build actions or design-time parsing for folders located on untrusted network shares. This prevents the execution of malicious templates upon simply opening a workspace.
Additionally, organizations should restrict egress network connections from developer environments to untrusted external NuGet feeds or repositories. Security teams should deploy application control policies and monitor system behavior for anomalies originating from devenv.exe or standard .NET host processes. These measures help isolate development environments from potential lateral movement or initial access vectors.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
.NET Microsoft | >= 8.0.0, < 8.0.31 | 8.0.31 |
.NET Microsoft | >= 9.0.0, < 9.0.20 | 9.0.20 |
.NET Microsoft | >= 10.0.0, < 10.0.12 | 10.0.12 |
Visual Studio 2022 Microsoft | >= 17.14.0, < 17.14.40 | 17.14.40 |
Visual Studio 2026 Microsoft | >= 18.9.0, < 18.9.3 | 18.9.3 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-122 |
| Attack Vector | Network (AV:N) |
| CVSS Score | 8.8 |
| EPSS Score | 0.00805 (Percentile: 54.60%) |
| Exploit Status | No public PoC available |
| KEV Status | Not listed |
| Impact | Remote Code Execution |
A heap-based buffer overflow condition occurs when a buffer that is allocated in the heap memory space is written to with more data than it can hold.
CVE-2026-115895 is a high-severity code injection vulnerability (CWE-94) in the happy-dom npm package prior to version 21.0.4. The vulnerability exists within the ECMAScriptModuleCompiler component, which transforms ECMAScript module syntax into executable Node.js functions when JavaScript evaluation is enabled. Due to an incomplete fix for CVE-2026-33943, the compiler failed to validate local named import aliases against legal JavaScript identifier rules. Attackers supplying crafted module imports—specifically utilizing destructuring default initializers alongside JSON module attributes—can inject arbitrary JavaScript expressions directly into the host Node.js runtime context.
An improper input validation and authorization bypass vulnerability exists in the LangGraph storage layer affecting langgraph, langgraph-checkpoint-postgres, and langgraph-checkpoint-sqlite. Because relational store implementations serialize namespace tuples into dot-delimited strings without validating labels on read, search, delete, and batch operations, an attacker who controls a namespace label can inject periods (.) to traverse namespace boundaries and access, modify, or delete data belonging to other namespaces.
CVE-2026-115886 (GHSA-2wqp-q3c6-ccj5) is a Server-Side Request Forgery (SSRF) and Unsafe Reflection vulnerability in MLflow versions 3.12.0rc0 prior to 3.17.0. Unauthenticated REST API endpoints accept serialized third-party scorer JSON payloads that are dynamically deserialized and reflectively instantiated without sanitizing constructor keyword arguments. When optional dependencies such as trulens and trulens-providers-litellm are installed, attackers can inject egress-steering arguments into the scorer payload, forcing the MLflow server to dispatch outbound HTTP requests to arbitrary internal destinations or cloud metadata services.
CVE-2026-113872 (GHSA-q7qp-rjg7-q26m) is a high-severity denial-of-service vulnerability affecting the multer multipart/form-data upload middleware for Node.js and Express in versions 2.0.0 through 2.4.0. When an endpoint is configured to accept multiple files using an asynchronous fileFilter callback, a crafted, truncated multipart HTTP request can trigger an unhandled error event on the underlying busboy stream parser after request teardown has already completed. Because all error listeners are stripped during teardown, Node.js treats the resulting error event as an uncaught exception and immediately terminates the server process.
CVE-2026-115897 (also tracked as GHSA-m5mm-p8h7-m29v and aliased as CVE-2026-115754) is a Cross-Site Scripting (XSS) vulnerability in the Yahoo serialize-javascript npm package prior to version 7.1.3. The flaw exists in the regular expression used by escapeFunctionBody() to neutralize HTML script closing tags within serialized JavaScript functions. Because function bodies are sanitized in isolation before structural formatting is applied, a function whose string representation terminates directly with the sequence '</script' bypasses the positive lookahead check. When combined with serialization formatting options that introduce whitespace delimiters and a subsequent property that supplies a closing bracket, an attacker can prematurely terminate an enclosing HTML <script> block and inject arbitrary HTML or JavaScript into the rendered document.
CVE-2026-109841 is a Subresource Integrity (SRI) verification bypass vulnerability in undici, the official HTTP/1.1 and HTTP/2 client library for Node.js that powers the global fetch() implementation. The flaw stems from improper handling of case sensitivity (CWE-178) when validating cryptographic hash algorithm tokens within SRI metadata. Because undici compared incoming algorithm identifiers against a strictly lowercase set without prior ASCII-lowercase normalization, valid uppercase or mixed-case tokens such as SHA256- or Sha384- were treated as unrecognized algorithms and discarded. Under SRI forward-compatibility rules, discarding all provided tokens results in an empty integrity list, causing undici to fail open and accept tampered HTTP response bodies without cryptographic verification.