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

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

Alon Barad
Alon Barad
Software Engineer

Nov 11, 2026·9 min read·2 visits

Executive Summary (TL;DR)

A stack-based buffer overflow in Microsoft.DiaSymReader.Native allows remote code execution when Visual Studio 2026 or the .NET runtime parses a crafted Program Database (.pdb) file containing malformed LF_DECIMAL symbol records.

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.

Vulnerability Overview

CVE-2026-114151 affects the debug symbol parsing architecture used by Microsoft Visual Studio 2026 and the .NET runtime ecosystem (versions 8.0, 9.0, 10.0, and 11.0) on Windows platforms. The vulnerable component is Microsoft.DiaSymReader.Native, a native C++ dynamic-link library responsible for implementing the unmanaged Debug Information Access (DIA) interfaces required to read legacy Windows Program Database (.pdb) files.

Program Database files store debugging and project state information generated during compilation, including function signatures, local variable offsets, source line mappings, and compile-time constants. Because .pdb files are routinely distributed alongside compiled binaries, stored in version control repositories, or retrieved dynamically over HTTP/SMB from remote symbol servers, the symbol parser represents a directly reachable attack surface for developer workstations and automated build or diagnostic servers.

The vulnerability is classified under two primary weakness categories: Deserialization of Untrusted Data (CWE-502) and Stack-based Buffer Overflow (CWE-121). When Microsoft.DiaSymReader.Native processes serialized CodeView symbol streams from an untrusted .pdb file, it fails to enforce boundary checks on specific numeric leaf records.

Consequently, loading a malformed .pdb file inside an active debugging session, IDE workspace, or runtime stack-trace generator corrupts adjacent stack memory. This memory corruption allows an unauthorized attacker to hijack control flow and execute arbitrary native code with the privileges of the user running Visual Studio (devenv.exe) or the target .NET host process.

Root Cause Analysis

To resolve source-level symbolic information during debugging or exception handling, the .NET runtime and Visual Studio invoke unmanaged COM interfaces exposed by Microsoft.DiaSymReader.Native. Specifically, when inspecting compile-time constants embedded within a module's symbol stream, the host calls the ISymUnmanagedConstant::GetValue method to extract the constant's raw value and convert it into a standard VARIANT structure.

Inside the binary CodeView format used by Windows .pdb files, constant symbols (S_CONSTANT) encode their values using variable-length numeric leaf descriptors. While small integer constants are stored inline, extended numeric types and floating-point decimals are prefixed with specific 16-bit leaf indicators, such as LF_DECIMAL (0x800a), followed by the serialized binary representation of the number.

When ISymUnmanagedConstant::GetValue encounters an LF_DECIMAL record, it invokes an internal deserialization routine to unpack the decimal metadata and mantissa bytes. In vulnerable versions of Microsoft.DiaSymReader.Native (prior to 18.9.1-beta1.26515.1), this routine allocates a fixed-size buffer on the thread stack sized only for a standard 16-byte DECIMAL structure.

The parser reads the length or byte count directly from the untrusted CodeView symbol stream without verifying that the source payload fits within the destination stack allocation. By supplying an oversized LF_DECIMAL record in a crafted .pdb file, an attacker triggers an unbounded memory copy onto the stack, overwriting local variables, saved frame pointers, and the function return address.

Code Analysis and Dependency Remediation

Because Microsoft.DiaSymReader.Native is distributed as a compiled native binary package (Microsoft.DiaSymReader.Native.<arch>.dll) rather than open-source C# code within the main .NET runtime repository, the vulnerability remediation in the .NET repositories manifests as a dependency version bump across servicing branches. The underlying C++ fix within the native DIA symbol reader introduces strict size validation prior to copying numeric leaf data.

To understand the mechanics of the native flaw and its correction, consider the following representative C++ reconstruction of the ISymUnmanagedConstant::GetValue numeric leaf parsing logic:

// Representative reconstruction of the vulnerable LF_DECIMAL unpacking logic
HRESULT CSymConstant::GetValue(VARIANT *pValue) {
    // ... initialization and pointer validation ...
    const BYTE* pbData = m_pSymbolData;
    USHORT leafType = *reinterpret_cast<const USHORT*>(pbData);
    pbData += sizeof(USHORT);
 
    if (leafType == LF_DECIMAL) {
        BYTE stackBuffer[sizeof(DECIMAL)]; // Fixed 16-byte stack allocation
        
        // VULNERABLE: Length derived from untrusted stream without bounds check
        size_t recordLength = GetSerializedRecordLength(pbData);
        memcpy(stackBuffer, pbData, recordLength); // CWE-121 Stack Buffer Overflow
        
        // Unpack into VARIANT...
    }
    return S_OK;
}

In the patched release of Microsoft.DiaSymReader.Native (18.9.1-beta1.26515.1), the deserialization parser validates that the remaining stream buffer contains sufficient bytes and ensures the target read size never exceeds the capacity of the destination DECIMAL structure.

// Representative reconstruction of the patched validation logic
    if (leafType == LF_DECIMAL) {
        DECIMAL decValue = {0};
        size_t recordLength = GetSerializedRecordLength(pbData);
 
        // PATCHED: Enforce strict upper bound check against sizeof(DECIMAL)
        if (recordLength > sizeof(DECIMAL) || recordLength > m_cbRemainingStream) {
            return E_INVALIDARG; // Abort parsing on malformed symbol record
        }
        memcpy(&decValue, pbData, recordLength);
        
        V_VT(pValue) = VT_DECIMAL;
        V_DECIMAL(pValue) = decValue;
    }

Across the .NET 8.0, 9.0, 10.0, and 11.0 servicing tags, Microsoft updated the internal dependency configuration files (Version.Details.xml and Versions.props) to ingest the patched native binary:

<!-- Dependency update applied in .NET servicing releases -->
<PropertyGroup>
  <!-- Previous vulnerable version: < 18.9.1-beta1.26515.1 -->
  <MicrosoftDiaSymReaderNativeVersion>18.9.1-beta1.26515.1</MicrosoftDiaSymReaderNativeVersion>
</PropertyGroup>

> [!NOTE] > While updating Microsoft.DiaSymReader.Native resolves the LF_DECIMAL stack overflow in ISymUnmanagedConstant::GetValue, native legacy PDB parsers rely heavily on pointer arithmetic over raw stream offsets. Security teams should treat legacy Windows PDB files as untrusted binary inputs and prefer Portable PDB formats where possible, as Portable PDBs are parsed using managed metadata readers with automatic bounds checking.

Exploitation Methodology

Exploiting CVE-2026-114151 requires an attacker to deliver a crafted Windows .pdb file to a target environment and induce a vulnerable process to parse the symbol constants within that file. Although the CVSS vector specifies Network attack vector (AV:N), User Interaction is required (UI:R) in typical developer scenarios.

A primary attack scenario involves software supply chain or repository poisoning. An attacker creates or modifies a Git repository, NuGet package, or build artifact archive containing a compiled .NET or native executable alongside a manipulated .pdb file. When a developer clones the repository, opens the solution in Visual Studio 2026, and initiates a debugging session or inspects symbol definitions, devenv.exe loads Microsoft.DiaSymReader.Native to parse the module's symbols.

An alternative delivery vector involves symbol server spoofing or Man-in-the-Middle (MitM) interception. If a Visual Studio instance or automated crash dump analyzer is configured to retrieve symbols over an unencrypted HTTP connection or from an untrusted network share, an attacker on the network path can serve a malicious .pdb matching the GUID and age signature requested by the debugger.

Once the .pdb is loaded into memory, the debugger enumerates local scopes and constants, calling ISymUnmanagedConstant::GetValue. To achieve reliable code execution on modern Windows systems, the attacker's payload must account for stack protections such as /GS stack cookies and Return Flow Guard / Control Flow Guard (CFG). For example, if the overflow reaches structured exception handling (SEH) records on x86 builds or overwrites vtable pointers/object references stored higher on the stack frame on x64 builds prior to the /GS cookie check at function epilogue, the attacker can pivot the stack and execute a Return-Oriented Programming (ROP) chain.

Impact Assessment

The CVSS v3.1 base score for CVE-2026-114151 is 8.8 (High), defined by the vector CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H. The attack complexity is rated Low (AC:L) because no special configuration is required beyond standard debugging or symbol resolution behavior, and no prior privileges (PR:N) are needed by the attacker.

Successful exploitation grants the attacker arbitrary code execution within the security context of the user running the host application (S:U). When triggered inside Visual Studio 2026, the attacker gains full control over the developer workstation. Developer accounts frequently possess elevated local privileges, access to proprietary source code, SSH keys, cloud deployment credentials, and code-signing certificates, making this a high-value target for lateral movement and supply chain compromise.

Furthermore, the vulnerability impacts server-side and CI/CD environments running .NET 8.0, 9.0, 10.0, or 11.0 on Windows. If a production web application, telemetry agent, or automated build pipeline processes untrusted .pdb files—for instance, to hydrate stack traces during exception logging or crash dump triage—an attacker who can upload or supply a crafted symbol file can achieve remote code execution directly on the server without interactive user intervention.

According to current threat intelligence, CVE-2026-114151 is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog, and its temporal Exploit Code Maturity metric is rated as Unproven (E:U). No public proof-of-concept exploits or active ransomware campaigns utilizing this flaw have been observed to date.

Remediation and Mitigation

Microsoft has released official security updates addressing CVE-2026-114151 across all affected product lines. Organizations and individual developers must update both their IDE installations and their deployed .NET runtimes/SDKs on Windows to the patched milestones.

For Visual Studio environments, upgrade Microsoft Visual Studio 2026 to version 18.12.0 or later via the Visual Studio Installer. For .NET environments on Windows, upgrade to the respective servicing releases: .NET 8.0.34, .NET 9.0.23, .NET 10.0.15, or .NET 11.0.0 (RTM). Additionally, software projects or custom diagnostic tools that directly reference the Microsoft.DiaSymReader.Native NuGet package must update their package dependency to version 18.9.1-beta1.26515.1 or newer and rebuild their applications.

If immediate patching is not feasible, administrators and developers should implement strict controls around symbol file ingestion:

  1. Restrict Symbol Server Connections: In Visual Studio, navigate to Tools > Options > Debugging > Symbols and remove any untrusted, third-party, or plaintext HTTP symbol server URLs. Ensure only the official Microsoft Symbol Servers (using HTTPS) or verified internal repositories are enabled.
  2. Disable Automatic Symbol Loading: Configure debuggers to load symbols only for specified, trusted modules rather than automatically resolving all modules in a workspace.
  3. Isolate Untrusted Projects: Do not open solutions, project files, or binary dumps originating from untrusted external sources on primary development workstations. Use isolated virtual machines or Windows Sandbox when analyzing third-party code or crash dumps.
  4. Endpoint Detection and Response (EDR): Monitor developer workstations for anomalous child processes (such as cmd.exe, powershell.exe, rundll32.exe, or unexpected network connections) spawned by devenv.exe, msvsmon.exe, or dotnet.exe.

Official Patches

MicrosoftMicrosoft Security Response Center (MSRC) Advisory for CVE-2026-114151
Microsoft.NET 10.0 Servicing Release v10.0.15
Microsoft.NET 11.0 Release v11.0.0
Microsoft.NET 8.0 Servicing Release v8.0.34
Microsoft.NET 9.0 Servicing Release v9.0.23

Technical Appendix

CVSS Score
8.8/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

Affected Systems

Microsoft Visual Studio 2026 (Windows)Microsoft .NET 8.0 (Windows)Microsoft .NET 9.0 (Windows)Microsoft .NET 10.0 (Windows)Microsoft .NET 11.0 (Windows)Microsoft.DiaSymReader.Native

Affected Versions Detail

Product
Affected Versions
Fixed Version
Visual Studio 2026
Microsoft
< 18.12.018.12.0
.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
.NET 11.0
Microsoft
>= 11.0.0-preview.1, < 11.0.011.0.0
Microsoft.DiaSymReader.Native
Microsoft
< 18.9.1-beta1.26515.118.9.1-beta1.26515.1
AttributeDetail
Vulnerability TypeStack-based Buffer Overflow / Untrusted Deserialization
CWE IDCWE-121 / CWE-502
CVSS v3.1 Score8.8 High (AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H)
Vulnerable ComponentMicrosoft.DiaSymReader.Native (ISymUnmanagedConstant::GetValue)
Attack VectorNetwork / Malicious Program Database (.pdb) Symbol File
Security ImpactRemote Code Execution (RCE) in Host Process Context
Exploit StatusUnproven (No public PoC or active exploitation)
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1203Exploitation for Client Execution
Execution
T1190Exploit Public-Facing Application
Initial Access
T1059Command and Scripting Interpreter
Execution
T1055Process Injection
Defense Evasion / Privilege Escalation
CWE-121
Stack-based Buffer Overflow

A stack-based buffer overflow condition is a condition where the buffer being overwritten is allocated on the stack (i.e., is a local variable or, rarely, a parameter to a function).

Vulnerability Timeline

Servicing release backports prepared across .NET release branches
2026-09-23
Microsoft published official CVE record and security advisory for CVE-2026-114151
2026-11-10
National Vulnerability Database (NVD) published CVE-2026-114151
2026-11-10

References & Sources

  • [1]Microsoft Security Response Center (MSRC) Advisory: CVE-2026-114151
  • [2]Official CVE Record (CVE.org): CVE-2026-114151
  • [3]National Vulnerability Database (NVD) Entry: CVE-2026-114151
  • [4]MITRE ATT&CK Search Mapping: CVE-2026-114151
  • [5].NET 10.0 Servicing Release v10.0.15
  • [6].NET 11.0 Release v11.0.0
  • [7].NET 8.0 Servicing Release v8.0.34
  • [8].NET 9.0 Servicing Release v9.0.23

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 2 hours ago•GHSA-6856-87HX-P5X7
7.5

CVE-2026-105544: Local Elevation of Privilege in .NET Test Platform CLI

CVE-2026-105544 is a high-severity local elevation of privilege vulnerability in Microsoft .NET and Microsoft.TestPlatform.CLI. Improper access control on local inter-process communication mechanisms and execution brokers allows an authorized local attacker to cross security boundaries and execute arbitrary code in the context of a higher-privileged user running a test execution cycle.

Amit Schendel
Amit Schendel
5 views•9 min read
•about 4 hours ago•CVE-2026-114152
8.8

CVE-2026-114152: Stack-Based Buffer Overflow and Untrusted Pointer Dereference in Microsoft DiaSymReader.Native

CVE-2026-114152 is a high-severity remote code execution vulnerability affecting Microsoft Visual Studio 2026 and multiple servicing branches of the Microsoft .NET runtime (.NET 8.0, 9.0, 10.0, and 11.0) on Windows platforms. The vulnerability exists within the native symbol reader library, Microsoft.DiaSymReader.Native, specifically inside the DiaObjectFile::ApplyFixup method during the processing of Common Object File Format (COFF) relocation records. By supplying a malformed object file or Program Database (PDB) symbol file containing out-of-bounds relocation offsets or invalid symbol table indices, an unauthenticated attacker can trigger an untrusted pointer dereference (CWE-822) and a stack-based buffer overflow (CWE-121). Successful exploitation occurs when a victim opens, compiles, or debugs a malicious project or symbol artifact, leading to arbitrary code execution within the security context of the active developer environment or build process.

Amit Schendel
Amit Schendel
5 views•11 min read
•about 5 hours ago•CVE-2026-118745
8.8

CVE-2026-118745: Remote Code Execution via Heap-Based Buffer Overflow in Microsoft Visual Studio and .NET DiaSymReader

CVE-2026-118745 is a high-severity remote code execution vulnerability affecting Microsoft Visual Studio 2026 and multiple supported versions of the .NET runtime (8.0, 9.0, 10.0, and 11.0) on Windows systems. The flaw is a heap-based buffer overflow (CWE-122) located within the native symbol reading library, Microsoft.DiaSymReader.Native, specifically in the routines responsible for extracting and parsing Program Database (.pdb) line number metadata. An attacker can exploit this vulnerability by supplying a crafted .pdb file alongside a repository, project, or compiled binary. When a developer or automated diagnostic process parses the malformed debug symbols, an out-of-bounds heap write occurs, permitting arbitrary code execution within the security context of the active user process.

Amit Schendel
Amit Schendel
8 views•10 min read
•about 6 hours ago•CVE-2026-109481
7.5

CVE-2026-109481: Cross-Site Request Forgery Leading to Elevation of Privilege in ASP.NET Core

CVE-2026-109481 is a high-severity Cross-Site Request Forgery (CSRF) vulnerability in the ASP.NET Core Blazor Server and interactive component architecture. The flaw exists within the internal circuit state synchronization endpoint (`/_blazor/refresh`), which fails to enforce antiforgery token validation or verify cross-origin request headers. By inducing an authenticated victim to issue a cross-site request targeting a pre-allocated circuit identifier, an unauthenticated attacker can bind the victim's security principal to the attacker's active SignalR circuit, resulting in full privilege elevation within the application scope.

Amit Schendel
Amit Schendel
6 views•9 min read
•about 7 hours ago•CVE-2026-126187
9.5

CVE-2026-126187: Unauthenticated Remote Code Execution in React Server Components

A critical deserialization vulnerability exists in React Server Components (RSC) packages (`react-server-dom-webpack`, `react-server-dom-parcel`, and `react-server-dom-turbopack`) across versions 19.0.0 through 19.3.0. The flaw occurs during the processing of React Flight protocol streams when handling multiple typed arrays sharing a backing ArrayBuffer alongside attacker-controlled inputs. By combining byte-stream buffer detachment semantics with unvalidated thenable invocation and exposed internal response states, an unauthenticated attacker can achieve remote code execution on server runtimes supporting React Server Components.

Alon Barad
Alon Barad
25 views•11 min read
•about 8 hours ago•CVE-2026-125123
2.3

CVE-2026-125123: Improper Output Neutralization and CI Workflow Command Injection in compose-lint CLI Parser

An improper output neutralization vulnerability (CWE-117 / CWE-150) exists in compose-lint version 0.31.0. When compose-lint is invoked on untrusted file paths without a preceding '--' option delimiter, Python's standard argparse module rejects malformed or dash-prefixed paths and writes them directly to standard error without passing through the application's output sanitizer. An attacker submitting a pull request containing crafted directory or file names with carriage returns or Unicode whitespace can inject arbitrary CI workflow commands into GitHub Actions or Azure Pipelines job logs.

Alon Barad
Alon Barad
5 views•10 min read