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

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

Amit Schendel
Amit Schendel
Senior Security Researcher

Nov 11, 2026·9 min read·3 visits

Executive Summary (TL;DR)

An unauthenticated attacker can hijack an authenticated user's session security context in ASP.NET Core Blazor Server applications via a Cross-Site Request Forgery flaw in the `/_blazor/refresh` endpoint, leading to Elevation of Privilege.

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.

Vulnerability Overview

CVE-2026-109481 is an Elevation of Privilege (EoP) vulnerability in Microsoft ASP.NET Core affecting .NET 11.0 preview releases and Microsoft Visual Studio 2026 version 18.12. The flaw resides in the server-side interactive component architecture, specifically within the Blazor Server and SignalR circuit management subsystem. This subsystem is responsible for maintaining stateful UI rendering and user session boundaries across persistent connections.

In a Blazor Server deployment, client-side events are transmitted over a persistent SignalR connection to a server-side construct known as a circuit. Each circuit encapsulates the component hierarchy, application state, and the authenticated security context (ClaimsPrincipal) of the connected user. To support dynamic authentication state changes—such as cookie sliding expiration or token refreshes—ASP.NET Core exposes an auxiliary HTTP endpoint at /_blazor/refresh.

Classified under CWE-352 (Cross-Site Request Forgery), the vulnerability occurs because the /_blazor/refresh endpoint accepts state-modifying HTTP requests without validating request origin or antiforgery tokens. An unauthenticated remote attacker can exploit this weakness by tricking an authenticated user into visiting a malicious web page that submits a cross-site request containing the attacker's circuit identifier.

When the vulnerable endpoint processes this cross-site request, it extracts the authenticated identity from the victim's ambient session cookies and binds that ClaimsPrincipal to the attacker-controlled circuit. Consequently, the attacker gains the ability to execute server-side component actions and access sensitive data under the victim's security context, achieving privilege elevation within the application.

Root Cause Analysis

The root cause of CVE-2026-109481 is the omission of origin verification and CSRF protection mechanisms on the /_blazor/refresh endpoint within the ASP.NET Core Blazor Server middleware pipeline. While standard SignalR connection negotiation and component rendering lifecycles implement baseline security checks, the auxiliary refresh endpoint processed incoming requests relying solely on ambient HTTP credentials.

During normal operation, when an application's HTTP authentication state updates, the client invokes /_blazor/refresh to synchronize the active HTTP HttpContext.User with the in-memory SignalR circuit. The server reads the target circuit identifier from the incoming HTTP request and updates that circuit's internal authentication state using the ClaimsPrincipal derived from the request's authentication cookies.

The endpoint failed to enforce three critical security controls required for state-synchronization routes:

  • It did not require or validate an ASP.NET Core antiforgery token via the IAntiforgery service.
  • It did not verify that the Origin or Referer headers matched the application's host authority, nor did it inspect Fetch Metadata headers (Sec-Fetch-Site).
  • It did not verify whether the caller initiating the refresh already owned or was previously associated with the target circuit connection prior to rebinding the identity.

Because browsers automatically attach ambient session cookies to cross-site requests unless restricted by strict SameSite policies, a third-party origin can trigger this endpoint. When the server processes the forged request, it fails to distinguish between a legitimate synchronization event initiated by the client application and a cross-origin request forged by an external party.

Code Analysis and Middleware Defense Mechanics

While Microsoft did not publish a standalone commit diff isolated from the .NET 11.0.0 general availability release tag, the mechanics of the vulnerability and the necessary defensive logic can be analyzed through the ASP.NET Core middleware pipeline. In vulnerable pre-release versions (11.0.0-preview.1), the endpoint handler for /_blazor/refresh accepted incoming requests and immediately proceeded to circuit state hydration without passing through an antiforgery filter.

To remediate this flaw at the request pipeline level, the endpoint must enforce both cryptographic token validation and browser-enforced Fetch Metadata checks. The following implementation demonstrates the defensive middleware controls required to secure the /_blazor/refresh route against cross-site principal rebinding:

// Remediation pattern: Enforcing Antiforgery and Fetch Metadata on Blazor auxiliary endpoints
app.UseAntiforgery();
 
app.Use(async (context, next) =>
{
    // Intercept requests targeting the internal Blazor circuit refresh endpoint
    if (context.Request.Path.StartsWithSegments("/_blazor/refresh"))
    {
        // 1. Validate Fetch Metadata to block cross-site requests at the protocol boundary
        if (context.Request.Headers.TryGetValue("Sec-Fetch-Site", out var site) &&
            site != "same-origin" && site != "same-site")
        {
            context.Response.StatusCode = StatusCodes.Status403Forbidden;
            return;
        }
 
        // 2. Enforce explicit Antiforgery token validation
        var antiforgery = context.RequestServices.GetRequiredService<IAntiforgery>();
        try
        {
            await antiforgery.ValidateRequestAsync(context);
        }
        catch (AntiforgeryValidationException)
        {
            context.Response.StatusCode = StatusCodes.Status400BadRequest;
            return;
        }
    }
    
    await next();
});

In addition to endpoint-specific checks, session cookie configuration plays a decisive role in determining whether ambient credentials are transmitted during cross-origin requests. If an application configures authentication cookies with SameSite=None to support cross-domain embedding or federated authentication flows, the browser sends the session cookie with every cross-origin request.

// Hardening session cookie configuration to restrict cross-origin transmission
builder.Services.ConfigureApplicationCookie(options =>
{
    // Restrict cookie transmission to first-party contexts and top-level navigation
    options.Cookie.SameSite = SameSiteMode.Lax;
    options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
    options.Cookie.HttpOnly = true;
});

Assessing fix completeness requires evaluating both token validation and circuit ownership verification. Enforcing SameSiteMode.Lax prevents cookies from being sent on cross-site fetch or XMLHttpRequest calls, but top-level navigation requests (GET) still transmit Lax cookies. Therefore, complete remediation requires the server to reject GET requests for state synchronization, validate Sec-Fetch-Site headers, and verify cryptographic antiforgery tokens bound to the specific user identity.

Exploitation Methodology

Exploiting CVE-2026-109481 requires coordination between an attacker-controlled connection and an authenticated victim's browser session. This requirement accounts for the High Attack Complexity (AC:H) and Required User Interaction (UI:R) metrics in the CVSS v3.1 scoring. The attacker does not need valid credentials on the target application (PR:N), provided the application allows unauthenticated users to initialize a baseline Blazor circuit (such as on a public landing page or login view).

The exploitation sequence proceeds across six distinct phases:

  1. Circuit Pre-allocation: The attacker establishes a connection to the target ASP.NET Core application and negotiates an active, unauthenticated Blazor Server circuit over SignalR. The attacker extracts and records the negotiated circuit identifier (circuitId) from the handshake response.
  2. Trap Deployment: The attacker deploys a web page on an external domain under their control. This page contains client-side script or an auto-submitting HTML form configured to issue an HTTP request to https://<target-app>/_blazor/refresh, embedding the attacker's pre-allocated circuitId as a parameter.
  3. Victim Delivery: The attacker delivers the link to the malicious site to a user who holds an active, authenticated session on the target ASP.NET Core application.
  4. Cross-Site Request Execution: When the victim navigates to the attacker's page, the victim's browser executes the forged request to /_blazor/refresh. If the target application's authentication cookies are configured to allow transmission in that request context, the browser includes the victim's session cookie.
  5. Principal Rebinding: The vulnerable ASP.NET Core server receives the request, authenticates the session cookie to construct the victim's ClaimsPrincipal, and updates the in-memory circuit matching the provided circuitId with this authenticated identity.
  6. Privilege Abuse: Because the attacker maintains the active WebSocket/SignalR connection bound to that circuitId, all subsequent component interactions and server-side method invocations executed by the attacker are evaluated under the victim's elevated security context.

> [!NOTE] > As of the publication of this report, the CVSS Exploit Code Maturity metric is classified as Unproven (E:U). No public proof-of-concept scripts or weaponized exploit modules have been indexed in public repositories.

Impact Assessment

Successful exploitation of CVE-2026-109481 grants an unauthenticated attacker full access to the application capabilities and data authorized for the compromised victim account. Because Blazor Server circuits execute directly on the server and maintain direct access to backend services, database contexts, and internal APIs via dependency injection, hijacking a circuit's security principal compromises Confidentiality, Integrity, and Availability within the application's scope (S:U).

In terms of Confidentiality (C:H), the attacker can render privileged UI components and invoke component lifecycle methods that retrieve sensitive user data, administrative records, or configuration secrets exposed to the victim's role. For Integrity (I:H), the attacker can trigger state-changing server-side event handlers, modify database records, or create new administrative accounts if an administrator's session is targeted.

For Availability (A:H), the attacker can manipulate shared application state, terminate active administrative workflows, or exhaust circuit resources allocated to privileged operations. The CVSS v3.1 base score of 7.5 reflects the balance between the severe post-exploitation impact and the operational constraints of synchronizing an active SignalR circuit with a timed user interaction.

From a threat intelligence perspective, CVE-2026-109481 is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog, and there is no evidence of active exploitation in the wild. The vulnerability specifically impacts pre-release deployments running .NET 11.0 (11.0.0-preview.1) across Linux, macOS, and Windows platforms, as well as developer environments running Microsoft Visual Studio 2026 version 18.12 prior to 18.12.0.

Remediation and Mitigation

The primary remediation for CVE-2026-109481 is to upgrade affected .NET runtimes, SDKs, and development environments to the patched general availability releases provided by Microsoft. Administrators and developers utilizing pre-release builds of .NET 11.0 must upgrade to .NET 11.0.0 or later. Users of Microsoft Visual Studio 2026 on Windows must update their installations to version 18.12.0 or higher.

For environments where immediate runtime patching cannot be completed, defense-in-depth mitigations can be applied within the application code or at the reverse proxy layer:

  • Custom Request Filtering Middleware: Register custom middleware prior to endpoint routing that intercepts requests to /_blazor/refresh and enforces Sec-Fetch-Site header validation. Reject any request where the Sec-Fetch-Site header is present and set to cross-site or none.
  • Antiforgery Enforcement: Ensure app.UseAntiforgery() is explicitly registered in the HTTP request pipeline between UseAuthentication()/UseAuthorization() and endpoint mapping declarations (MapRazorComponents).
  • Cookie Hardening: Audit all authentication cookie schemes (AddCookie, OpenID Connect session handlers) to ensure SameSite is set to SameSiteMode.Lax or SameSiteMode.Strict, and CookieSecurePolicy is set to Always.

At the perimeter or Web Application Firewall (WAF) layer, security engineers can deploy inspection rules targeting the /_blazor/refresh URI path. Blocking requests to this endpoint when the Sec-Fetch-Site header equals cross-site or when the Origin header does not match the Host header prevents cross-origin exploitation attempts before they reach the Kestrel web server.

Official Patches

MicrosoftMicrosoft Security Response Center (MSRC) Security Update Guide for CVE-2026-109481
MicrosoftASP.NET Core Official Release Tag v11.0.0

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C

Affected Systems

Microsoft .NET 11.0 on LinuxMicrosoft .NET 11.0 on macOSMicrosoft .NET 11.0 on WindowsMicrosoft Visual Studio 2026 on Windows

Affected Versions Detail

Product
Affected Versions
Fixed Version
.NET 11.0 (Linux, macOS, Windows)
Microsoft
11.0.0-preview.1 (< 11.0.0)11.0.0
Microsoft Visual Studio 2026
Microsoft
18.12 (< 18.12.0)18.12.0
AttributeDetail
Vulnerability TypeCross-Site Request Forgery (CWE-352) to Elevation of Privilege
CVSS v3.1 Score7.5 High (CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H)
Affected ComponentASP.NET Core Blazor Server Circuit Endpoint (/_blazor/refresh)
Attack VectorNetwork (Cross-Origin Browser Request)
Privileges RequiredNone (Requires Victim User Interaction)
Security ImpactHijacking of authenticated ClaimsPrincipal on attacker SignalR circuit
Exploit StatusUnproven (No public PoC or active exploitation)
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
CWE-352
Cross-Site Request Forgery (CSRF)

The web application does not, or can not, sufficiently verify whether a well-formed, valid, consistent request was intentionally provided by the user who submitted the request.

Vulnerability Timeline

CVE-2026-109481 officially published by Microsoft CNA.
2026-11-10
Assessed against CISA KEV catalog; confirmed not listed or actively exploited.
2026-11-10
CVE record metadata updated and remediation delivered in .NET 11.0.0 release.
2026-11-10

References & Sources

  • [1]Microsoft Security Response Center (MSRC) Security Update Guide
  • [2]Official CVE Record: CVE-2026-109481
  • [3]ASP.NET Core Official Release Tag v11.0.0
  • [4]MITRE ATT&CK Search: CVE-2026-109481
  • [5]CISA Known Exploited Vulnerabilities Catalog

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

•16 minutes 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
1 views•10 min read
•about 2 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
12 views•11 min read
•about 3 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
4 views•10 min read
•about 4 hours ago•CVE-2026-125116
4.8

CVE-2026-125116: Type Confusion in Mongoose Discriminator Resolution

CVE-2026-125116 (GHSA-wr5m-5jph-8m96) is a type confusion vulnerability (CWE-843) in Mongoose, the MongoDB object modeling library for Node.js. When resolving discriminator models or schemas via user-supplied discriminator keys (defaulting to `__t`), Mongoose performs direct property indexing on plain JavaScript registry objects without verifying own-property ownership. Supplying inherited `Object.prototype` property names such as `'constructor'` causes Mongoose to resolve built-in functions rather than valid Mongoose constructors, resulting in unhandled runtime exceptions, schema validation bypasses, and persistent collection query denial of service.

Alon Barad
Alon Barad
4 views•11 min read
•about 5 hours ago•CVE-2026-125119
7.5

CVE-2026-125119: Connection-Level Filter Sanitization Bypass in Mongoose ODM

A flaw in Mongoose's query condition casting pipeline causes the `sanitizeFilter` configuration option to be silently ignored when defined at the connection level via `mongoose.connect()` or `mongoose.createConnection()`. Because internal query methods inspect `Connection.options` rather than `Connection.config`, applications relying on connection-scoped filter sanitization remain vulnerable to NoSQL query selector injection (CWE-943), permitting authentication bypass and unauthorized data access across Mongoose versions 6.x through 9.x.

Amit Schendel
Amit Schendel
4 views•9 min read
•about 6 hours ago•CVE-2026-125110
5.3

CVE-2026-125110: Path Canonicalization Mismatch and Security Header Bypass in Rack::Static

CVE-2026-125110 is a path canonicalization mismatch vulnerability in Rack (specifically within the Rack::Static middleware component). When serving static files, Rack normalizes the requested URL path to resolve the physical file on disk, but evaluates configured path-specific header rules against an unnormalized, raw path that has only undergone URL percent-decoding. Unauthenticated remote attackers can exploit this discrepancy by injecting raw or percent-encoded dot-segments into HTTP requests, causing Rack to serve restricted static assets without their intended security headers.

Amit Schendel
Amit Schendel
6 views•10 min read