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

Glass Houses: Shattering KASLR via Windows DWM (CVE-2026-20805)

Alon Barad
Alon Barad
Software Engineer

Jan 22, 2026·7 min read·183 visits

Executive Summary (TL;DR)

CVE-2026-20805 is a local info-leak in `dwm.exe` that reveals kernel memory addresses. While it doesn't execute code on its own, it allows attackers to bypass Kernel Address Space Layout Randomization (KASLR), a primary defense mechanism in Windows. It is currently listed in the CISA KEV catalog, meaning ransomware groups and APTs are actively chaining it with other exploits to achieve privilege escalation.

A seemingly benign information disclosure vulnerability in the Windows Desktop Window Manager (dwm.exe) serves as a critical KASLR bypass primitive. By querying system handle information, unprivileged local attackers can leak raw kernel virtual addresses associated with ALPC ports, effectively de-randomizing the kernel memory layout.

The Hook: Peering Through the Looking Glass

In the modern exploit development landscape, memory corruption is only half the battle. You might have a perfectly good buffer overflow or a Use-After-Free (UAF), but if you don't know where you are in memory, you are firing blind. This is thanks to Kernel Address Space Layout Randomization (KASLR), which shuffles the kernel's furniture every time the system boots. To win, an attacker first needs a map. Enter CVE-2026-20805.

This vulnerability resides in the Desktop Window Manager (dwm.exe), the process responsible for the pretty visual effects, window composition, and transparency in Windows. Because DWM needs to talk to practically everything on the screen, it holds a massive number of handles to system objects. It sits at a privileged intersection between user-land and kernel-land.

Security researchers discovered that dwm.exe is a bit of a blabbermouth. When asked politely via specific Windows Native APIs, it inadvertently hands over the raw 64-bit virtual addresses of its kernel objects. For an attacker, this is like finding the blueprints to the bank vault taped to the front door. It transforms a 'guess-and-pray' exploit attempt into a calculated, deterministic strike.

The Flaw: The Dirty Laundry of ALPC

The root cause of this vulnerability is a failure to sanitize kernel metadata before returning it to user mode. The Windows kernel tracks resources using 'Objects' (Files, Processes, Threads, etc.), and user-mode applications reference these via 'Handles'.

When a process calls NtQuerySystemInformation with the SystemExtendedHandleInformation class, the kernel generates a list of all open handles on the system. Historically, Microsoft has hardened this API. For standard users, the Object pointer field (which contains the actual kernel memory address) is supposed to be redacted—usually zeroed out or obfuscated—to prevent exactly this kind of mapping.

However, the logic handling Asynchronous Local Procedure Call (ALPC) ports and Section Objects within the context of dwm.exe missed a spot. The specific structures initialized for DWM's ALPC communication channels fail to apply the necessary mask when enumerated. This means that when the handle table is traversed, the kernel says, 'Here is the handle ID, and oh, here is the exact 64-bit memory address where the ALPC port object lives in the kernel pool.'

> [!NOTE] > Technical Nuance: This isn't a corruption bug. The code works exactly as written; it just shares too much. It is a logic error in the boundary between SystemExtendedHandleInformation reporting and the specific object type attributes of DWM's resources.

The Code: The Smoking Gun

To understand the gravity of the situation, we have to look at how an attacker views the system. They aren't looking at source code; they are looking at structures returned by the Windows Native API. The critical structure involved is SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX.

Below is a reconstruction of the data leak. A secure implementation (Before the exploit is known) assumes the kernel sanitizes the pointer. The vulnerable reality allows the Object field to pass through untouched.

The Vulnerable Structure View

// Definition of the handle information structure
typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX {
    PVOID Object;                // <--- THE LEAK. Should be NULL/Obfuscated for low-priv users.
    ULONG_PTR UniqueProcessId;   // We look for DWM's PID here
    ULONG_PTR HandleValue;
    ULONG GrantedAccess;
    USHORT CreatorBackTraceIndex;
    USHORT ObjectTypeIndex;      // We look for ALPC Port (24/25) or Section (36)
    ULONG HandleAttributes;
    ULONG Reserved;
} SYSTEM_HANDLE_TABLE_ENTRY_INFO_EX, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO_EX;

The Logic Failure

In a simplified pseudo-code representation of the kernel's handle enumeration routine, the failure looks something like this:

// Pseudo-code of the kernel logic handling the query
foreach (Handle in SystemHandles) {
    Entry.UniqueProcessId = Handle.OwnerPid;
    Entry.HandleValue = Handle.Value;
    
    // Security Check: Should we hide the kernel address?
    if (RequesterMode == UserMode && !HasDebugPrivilege) {
        // The Fix would ensure ALL object types are scrubbed here.
        // The Bug: Specific ALPC objects owned by DWM bypass this or
        // are incorrectly classified, leaking the raw pointer.
        Entry.Object = NULL; // Expected behavior
    } else {
        Entry.Object = Handle.KernelObjectAddress; // Vulnerable path taken
    }
    
    CopyToUserBuffer(UserBuffer, &Entry);
}

Because of the oversight in CVE-2026-20805, the Entry.Object is populated with a value like 0xFFFFD58F80C0E5E0. Since the attacker knows the offset of the ALPC Port object relative to the Kernel Base (or can use the object to fingerprint the heap), KASLR is defeated.

The Exploit: Mapping the Territory

Exploiting this vulnerability is trivial for any code running on the machine, even with low privileges. The attack does not require a race condition or complex heap grooming. It is a deterministic read.

The Attack Chain

  1. Reconnaissance: The exploit first finds the Process ID (PID) of dwm.exe. This is standard behavior for any tool.
  2. The Ask: The exploit allocates a large buffer and calls NtQuerySystemInformation with the SystemExtendedHandleInformation (64) class.
  3. The Sift: The exploit iterates through the millions of handles returned. It filters for UniqueProcessId == DWM_PID.
  4. The Gold: Inside the DWM handles, it looks for ObjectTypeIndex corresponding to ALPC Ports (typically index 24 on modern Windows versions, though this varies slightly by build).
  5. The Calculation: It extracts the Object pointer. By subtracting known offsets for the specific Windows version (which can be determined dynamically), the attacker calculates the ntoskrnl.exe base address.

Exploit Flow Diagram

Once the KASLR slide is known, the attacker can adjust their ROP (Return Oriented Programming) gadgets in a secondary exploit (e.g., a vulnerable driver or another kernel bug) to achieve reliable code execution.

The Impact: Why CISA is Watching

You might ask, 'So what? It's just an address.' In the world of high-tier exploitation, an information leak is often more valuable than a crash. A crash denies service; a leak enables control.

This vulnerability carries a CVSS score of 5.5, which feels deceptively low. However, its inclusion in the CISA Known Exploited Vulnerabilities (KEV) catalog tells the real story. Threat actors are using this right now.

The Force Multiplier

Many kernel vulnerabilities (like integer overflows or pool corruptions) are 'unreliable' because hitting the wrong memory address causes a Blue Screen of Death (BSOD), killing the attack and alerting defenders. By using CVE-2026-20805 to peek at the memory layout first, attackers turn 10% reliability exploits into 100% reliability weapons.

This vulnerability is particularly dangerous because it affects all modern versions of Windows, from Windows 10 up to Server 2025. It serves as the skeleton key for ransomware operators looking to escalate from a compromised user account to full NT AUTHORITY\SYSTEM control.

The Fix: Closing the Blinds

The remediation is straightforward but requires a system restart. Microsoft has patched the kernel logic to ensure that queries targeting DWM handles properly sanitize the Object field, regardless of the object type.

Mitigation Steps

  1. Patch Management: Apply the January 2026 Cumulative Update immediately.
    • Windows 11 23H2: Update to build 10.0.22631.6491 or higher.
    • Windows Server 2025: Update to build 10.0.26100.7623 or higher.
  2. EDR Telemetry: If patching is delayed, security teams should configure EDR solutions to flag high-volume calls to NtQuerySystemInformation originating from non-administrative processes. While legitimate software uses this API, repeated calls followed by memory probing are indicative of an exploit attempt.
  3. Attack Surface Reduction: Where possible, restrict access to the machine. Since this is a local exploit, the attacker must already have code execution on the box. Preventing the initial foothold (phishing, drive-by downloads) remains the best defense against the start of this chain.

Official Patches

MicrosoftMicrosoft Security Response Center Advisory

Technical Appendix

CVSS Score
5.5/ 10
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
EPSS Probability
5.86%
Top 10% most exploited

Affected Systems

Windows 10 Version 1607 through 22H2Windows 11 Version 22H3 through 25H2Windows Server 2012 / 2012 R2Windows Server 2016 / 2019 / 2022Windows Server 2025

Affected Versions Detail

Product
Affected Versions
Fixed Version
Windows 10 1809
Microsoft
< 10.0.17763.827610.0.17763.8276
Windows 11 23H2
Microsoft
< 10.0.22631.649110.0.22631.6491
Windows Server 2025
Microsoft
< 10.0.26100.762310.0.26100.7623
AttributeDetail
CWE IDCWE-200
Attack VectorLocal (AV:L)
CVSS Score5.5 (Medium)
EPSS Score5.86% (High Percentile)
ImpactKernel Address Space Layout Randomization (KASLR) Bypass
Exploit StatusActive Exploitation (CISA KEV)

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
T1012Query Registry
Discovery
T1082System Information Discovery
Discovery
CWE-200
Exposure of Sensitive Information to an Unauthorized Actor

The product exposes sensitive information to an actor that is not explicitly authorized to have access to that information.

Known Exploits & Detection

GitHubC++ implementation of NtQuerySystemInformation dumper targeting DWM
GitHubPython-based memory leak monitor for ALPC structures

Vulnerability Timeline

CVE Published by Microsoft
2026-01-13
Added to CISA KEV Catalog
2026-01-13
Multiple PoCs published on GitHub
2026-01-14
CISA Remediation Due Date
2026-02-03

References & Sources

  • [1]Microsoft Advisory
  • [2]CISA KEV 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

•about 7 hours ago•CVE-2026-128087
3.7

CVE-2026-128087: Premature Key Exchange Callback Invocation Prior to Host Key Verification in russh

CVE-2026-128087 (GHSA-9264-jvgf-6w2f) is an incorrect behavior order (CWE-696) and improper authorization (CWE-863) vulnerability in the russh Rust SSH library, affecting versions 0.55.0 through 0.65.0. During the initial SSH key exchange (KEX) handshake, the client state machine invokes the client::Handler::kex_done() callback—providing the negotiated raw shared secret bytes—prior to validating the remote server's host key or certificate via check_server_key(). Consequently, an untrusted or rogue SSH server can complete cryptographic key agreement and force a connecting client to execute side-effecting application logic inside kex_done() before the server's identity is checked and rejected.

Amit Schendel
Amit Schendel
4 views•10 min read
•about 8 hours ago•CVE-2026-128082
7.5

CVE-2026-128082: Uncontrolled Recursion and Denial of Service in AutoMapper via Constructor Parameter Mapping

CVE-2026-128082 (GHSA-6vhm-j9h7-f9gh) is an uncontrolled recursion vulnerability (CWE-674) in AutoMapper, a convention-based object-object mapper for .NET. When mapping nested or self-referential types into destination models that rely on parameterized constructors, C# positional records, or recursive ConstructUsing expressions, AutoMapper evaluates child constructor arguments prior to incrementing the parent's recursion depth counter. This ordering flaw bypasses both explicit MaxDepth limits and the default depth limit of 64. An unauthenticated remote attacker can supply deeply nested input payloads to affected endpoints, exhausting the thread call stack and triggering an uncatchable System.StackOverflowException that terminates the hosting .NET process.

Amit Schendel
Amit Schendel
6 views•11 min read
•about 9 hours ago•CVE-2026-128080
5.8

CVE-2026-128080: Sensitive Query Parameter Disclosure on Incoming Server Spans in OpenTelemetry JavaScript (@opentelemetry/instrumentation-http)

An information exposure vulnerability in the @opentelemetry/instrumentation-http package for OpenTelemetry JavaScript versions 0.204.0 prior to 0.222.0 causes incoming HTTP server spans to record raw, unredacted query string parameters under the url.query attribute. While outgoing client spans applied built-in and user-configured query parameter redaction, incoming server spans bypassed this sanitization completely, resulting in the transmission of sensitive credentials such as pre-signed cloud URLs and API tokens to external observability backends.

Alon Barad
Alon Barad
6 views•10 min read
•about 10 hours ago•CVE-2026-128089
7.5

CVE-2026-128089: Uncontrolled Resource Consumption in dnspython WKS Record Parser

CVE-2026-128089 is an uncontrolled resource consumption vulnerability in the dnspython toolkit for Python, affecting all versions prior to 2.9.2. When parsing Well-Known Service (WKS) records from text via dns.rdtypes.IN.WKS.WKS.from_text(), the parser fails to validate that numeric service port identifiers fall within the RFC 1035 valid range of 0 through 65535. An attacker capable of supplying untrusted zone files or RDATA text strings containing an arbitrarily large service port integer can force the parser to allocate an unbounded bitmap array using an inefficient linear append loop, resulting in severe CPU exhaustion, application hangs, or Out-Of-Memory (OOM) process termination.

Amit Schendel
Amit Schendel
5 views•10 min read
•about 11 hours ago•CVE-2026-126347
3.1

CVE-2026-126347: Open Redirect via Triple-Slash Redirect Paths in Tornado RedirectHandler

CVE-2026-126347 (GHSA-5cjw-f85j-cv6r) is an open redirect vulnerability (CWE-601) in Tornado, an asynchronous Python networking library and web framework. The flaw resides in tornado.web.RedirectHandler when dynamic URL redirection templates incorporate unvalidated user input. Due to a parser differential between RFC 3986 (used by Python's urllib.parse.urlsplit) and the WHATWG URL Standard (used by modern web browsers), inputs containing three or more leading slashes bypass Tornado 6.6.0's validation logic, allowing unauthenticated attackers to redirect users to arbitrary external domains.

Alon Barad
Alon Barad
6 views•11 min read
•about 12 hours ago•CVE-2026-128123
5.9

CVE-2026-128123: Uncaught Exception and Denial of Service in SvelteKit @sveltejs/adapter-node

A Denial of Service (DoS) vulnerability exists in @sveltejs/adapter-node versions 5.5.7 and 6.0.0-next.0 through 6.0.0. When a SvelteKit server route returns a direct response from a fetch() call with a Content-Type of text/event-stream, the Node.js adapter attempts to mutate the response headers to disable proxy buffering. Because headers returned directly by the WHATWG Fetch API carry an immutable guard, this mutation throws an unhandled TypeError, terminating the underlying Node.js process and denying service to all active and subsequent clients.

Alon Barad
Alon Barad
5 views•9 min read