Feb 19, 2026·7 min read·600 visits
High-severity Elevation of Privilege in Windows Admin Center (WAC). A logic flaw in the Gateway Service allows low-privileged users to bypass authorization checks and execute administrative commands on managed servers. Update to version 2.6.4 immediately.
Microsoft's Windows Admin Center (WAC) was designed to be the modern 'single pane of glass' for system administrators—a web-based evolution of the clunky old MMC snap-ins. Unfortunately, a critical flaw in the Gateway Service turned that glass into a sieve. CVE-2026-26119 allows any authenticated user, regardless of how low their privileges are, to trick the gateway into executing commands with administrative rights. It’s a classic case of a proxy service trusting the client a little too much, effectively handing the keys to the kingdom to anyone who can log in.
Windows Admin Center (WAC) is the darling of modern Microsoft infrastructure management. It’s sleek, it’s web-based, and it consolidates everything—Server Manager, Failover Clustering, Hyper-V—into one browser tab. To make this magic happen, WAC uses a Gateway Service (ServerManagementGateway.exe). This gateway is the middleman; it takes your HTTP clicks, translates them into PowerShell or WMI calls, and fires them off to the managed servers. Because it needs to do heavy lifting, the Gateway itself usually runs with high privileges (often SYSTEM or a dedicated high-priv service account) or utilizes complex delegation mechanisms like CredSSP to impersonate the user.
Here is the catch: When you build a proxy that acts on behalf of others, your impersonation logic better be bulletproof. If the gateway gets confused about who is asking for a command versus who it is executing the command as, you have a problem. CVE-2026-26119 is exactly that problem.
Imagine a bank teller (the Gateway) who is supposed to check your ID before letting you into the vault. In this scenario, you show them a library card (low privileges), but you slip them a note saying, 'Actually, I'm the CEO,' and they just believe you without checking the signature. That is the essence of this vulnerability. It turns the WAC Gateway into a confused deputy that happily elevates your mundane requests into administrative decrees.
The root cause lies deep within the authentication handling of the Windows Admin Center Gateway Service. Specifically, the flaw is a textbook Improper Authentication (CWE-287) issue combined with a failure in privilege context switching. The WAC Gateway exposes various API endpoints to the frontend. When a user logs in, they are issued a token or session cookie. For most operations, the Gateway checks this token to ensure the user has the right to view a page.
However, when it comes to executing commands (the dangerous part), the validation logic fell short. The vulnerability implies that the checks performed by the Gateway were strictly checking if a user was authenticated, but failed to robustly validate the authorization scope for specific high-privilege operations, or potentially trusted user-controlled input to determine the execution context.
Technical analysis suggests that the service fails to properly validate authentication tokens when handling requests for high-privileged operations. This means a low-privileged user—someone who perhaps only has rights to view event logs—can craft a request that targets an administrative API endpoint. Instead of rejecting the request with a 403 Forbidden, the Gateway processes it. Why? Because the code likely decoupled the 'authentication' (Are you a valid user?) from the 'authorization' (Can you do this specific thing?), and the latter check was either missing or bypassable via token manipulation.
While Microsoft has not released the exact source code, we can reconstruct the vulnerability pattern based on the behavior of ServerManagementGateway.exe and typical .NET middleware flaws. The vulnerable logic likely resembles a pattern where the authorization context is derived from a mutable request parameter rather than the immutable identity token.
Consider the following reconstructed pseudo-code representing the flawed logic:
// VULNERABLE LOGIC (Conceptual)
public async Task<IActionResult> ExecuteCommand([FromBody] CommandRequest request)
{
// 1. Check if the user is logged in (Authentication)
if (!this.User.Identity.IsAuthenticated)
{
return Unauthorized();
}
// 2. THE BUG: The code trusts the 'TargetRole' specified in the request
// or fails to cross-reference it against the User's actual claims.
var executionContext = request.TargetRole == "Admin"
? _adminContext
: _userContext;
// 3. Execute the PowerShell script
return await _powerShellRunner.Run(request.Script, executionContext);
}In the corrected version (Patch 2.6.4), the logic forces a strict validation against the backend access control list (ACL) or the actual delegated credentials, ignoring any client-side suggestions of privilege:
// PATCHED LOGIC (Conceptual)
public async Task<IActionResult> ExecuteCommand([FromBody] CommandRequest request)
{
// 1. Authenticate
if (!this.User.Identity.IsAuthenticated) return Unauthorized();
// 2. THE FIX: Explicitly validate permissions against the backend identity source
if (request.RequiresAdmin && !this.User.IsInRole("WAC_Admins"))
{
// Hard stop if the user isn't actually an admin
return Forbid("Insufficient privileges for this operation.");
}
// 3. Use the user's OWN identity for execution, never a cached generic admin context
return await _powerShellRunner.Run(request.Script, this.User.Identity);
}The patch effectively removes the 'trust' the Gateway placed in the request parameters, enforcing a server-side truth about who the user actually is.
To exploit this, an attacker needs Valid Accounts (T1078) on the WAC instance. This is not an unauthenticated RCE; it is an insider threat or compromised credential scenario. Once inside, the exploitation path is straightforward but devastating.
Step 1: Reconnaissance
The attacker logs into WAC with their low-level account. They open the browser's Developer Tools (F12) and monitor the network traffic while performing basic allowed actions. They are looking for API calls to endpoints like /_api/nodes/{target}/features/powershell.
Step 2: Token/Header Manipulation
The attacker identifies the request responsible for executing scripts. They copy this request to a tool like Burp Suite or Postman. They modify the payload. If the system expects a script block, they inject a command to add themselves to the local administrators group:
Add-LocalGroupMember -Group "Administrators" -Member "DOMAIN\LowPrivUser"
Step 3: The Bypass
The critical step involves manipulating the headers. The attacker might modify custom headers used by the WAC Gateway for session tracking, or simply replay the request to an administrative endpoint that typically requires higher clearance. Due to the CVE-287 flaw, the Gateway processes the Add-LocalGroupMember command using its own high-privilege context (or a cached admin context) rather than the user's restricted context.
Step 4: Persistence Once the command executes, the attacker's user is now a local administrator on the target machine. They can now RDP in, dump credentials (LSASS), or move laterally to the Domain Controller.
Windows Admin Center is often used to manage Tier 0 assets—Domain Controllers, Hyper-V clusters, and Backup servers. A compromise here is Game Over for the entire domain.
Confidentiality: An attacker can access sensitive files, configuration data, and potentially credential stores on managed nodes. If WAC manages virtual machines, the attacker could snapshot and download active directory database files (ntds.dit).
Integrity: The ability to modify system configurations allows for the installation of backdoors, disabling of EDR/Antivirus solutions, and the manipulation of firewall rules to permit C2 traffic.
Availability: The most immediate threat is ransomware. With administrative access to the management gateway, an attacker can push a ransomware binary to every managed server simultaneously using WAC's own legitimate deployment features, encrypting the entire infrastructure in minutes.
Microsoft has released version 2.6.4 to address this vulnerability. The update hardens the authentication logic within the Gateway Service, ensuring that every API call is strictly validated against the user's actual token claims before execution.
Immediate Actions:
Gateway Users group on the WAC server. Ensure only authorized personnel have access to log in at all. Even with the patch, WAC is a high-value target.Defense in Depth: If you cannot patch immediately (why?), you must restrict access to the WAC interface. Use network segmentation to ensure only a jump box or specific management subnet can reach the WAC HTTPS port. Do not expose WAC to the open internet—that's just asking for trouble, vulnerability or not.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H| Product | Affected Versions | Fixed Version |
|---|---|---|
Windows Admin Center Microsoft | 1809.0 <= v < 2.6.4 | 2.6.4 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-287 (Improper Authentication) |
| Attack Vector | Network (AV:N) |
| CVSS v3.1 | 8.8 (High) |
| Privileges Required | Low (PR:L) |
| Impact | Total Compromise / RCE |
| Exploit Status | Proof of Concept Expected |
An elevation of privilege vulnerability exists in .NET Aspire versions prior to 13.6.5 due to the insertion of sensitive information into sent data (CWE-201). When the Developer Control Plane (DCP) container tunneling feature is enabled, the orchestration engine implicitly exposes all endpoints of the Aspire Dashboard—including its administrative frontend and management APIs—to containerized workloads instead of restricting tunnel access solely to OpenTelemetry Protocol (OTLP) collection endpoints. This exposure allows an attacker operating within a compromised or untrusted container to query the dashboard frontend, extract sensitive environment variables and connection strings, and elevate privileges across the host orchestration boundary.
CVE-2026-118750 is an uncontrolled resource allocation vulnerability (CWE-770) affecting the Microsoft.AspNetCore.WebUtilities component in ASP.NET Core. Specifically, the FileBufferingReadStream class eagerly allocates large memory buffers from the shared ArrayPool<byte> inside its constructor prior to reading any incoming request payload data. An unauthenticated remote attacker can exploit this behavior by opening numerous concurrent connections and stalling or omitting request body transmission, exhausting shared memory pools and causing a server-wide Denial of Service (DoS).
CVE-2026-114155 is a local elevation of privilege vulnerability affecting Microsoft .NET on Linux and macOS platforms. The vulnerability exists within the dotnet-watch (Hot Reload) component and is caused by a Time-of-Check Time-of-Use (TOCTOU) race condition (CWE-367) during the generation and execution of temporary XML solution files (.slnx) in shared system temporary directories. A local attacker with low privileges can intercept and modify the temporary solution file before MSBuild evaluates it, achieving arbitrary code execution in the security context of the user running dotnet-watch.
CVE-2026-118748 is a remote Denial of Service (DoS) vulnerability in Microsoft ASP.NET Core (.NET 11.0 preview releases prior to 11.0.0) and Microsoft Visual Studio 2026 (prior to 18.12.0). The flaw originates from unbounded resource allocation (CWE-770) within the Blazor static server-side rendering (static-SSR) validation pipeline, where dynamic or attacker-supplied form field identifiers are cached in a singleton-scoped memory structure without size limits or eviction policies. Unauthenticated remote attackers can exploit this condition over the network by sending repeated HTTP requests with unique field names, exhausting heap memory and terminating the host process via an unhandled OutOfMemoryException.
CVE-2026-114150 is a network-accessible information disclosure vulnerability affecting Microsoft ASP.NET Core in .NET 11.0 preview releases and Microsoft Visual Studio 2026 prior to version 18.12.0. The flaw stems from the use of uninitialized resources (CWE-908) within response buffering components, specifically ResponseBufferingStream used by middleware such as HTTP Logging and Output Caching. Because rented memory segments from ArrayPool<byte> or MemoryPool<byte> are not cleared upon return or strictly bounded to the exact written byte count during subsequent reads, residual response payloads from earlier HTTP requests remain in the buffer tail. Downstream consumers or log sinks reading these buffers expose confidential cross-session data, including authentication tokens and personally identifiable information.
An incorrect authorization vulnerability (CWE-863) exists in the ASP.NET Core SignalR HTTP Connection Dispatcher (`Microsoft.AspNetCore.Http.Connections`). The connection negotiation process failed to bind the authenticated caller identity to the generated connection state, and subsequent transport or message dispatch handlers failed to verify caller consistency. Consequently, an authenticated low-privilege attacker who obtains a valid connection identifier or token can inject messages into or hijack another user's SignalR session, achieving an elevation of privilege across security boundaries.