CVE-2026-20871 — Desktop Windows Manager Elevation of Privilege Vulnerability
Executive Summary
Use after free in Desktop Windows Manager allows an authorized attacker to elevate privileges locally.
Overview
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C
EPSS Score
Affected Products
| Product | KB Article | Severity | Impact | Restart Required |
|---|---|---|---|---|
| Windows 10 Version 21H2 for 32-bit Systems | 5073724 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for ARM64-based Systems | 5073724 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for x64-based Systems | 5073724 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for 32-bit Systems | 5073724 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for ARM64-based Systems | 5073724 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for x64-based Systems | 5073724 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 23H2 for ARM64-based Systems | 5073455 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 23H2 for x64-based Systems | 5073455 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 24H2 for ARM64-based Systems | 5074109 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 24H2 for x64-based Systems | 5074109 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 25H2 for ARM64-based Systems | 5074109 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 25H2 for x64-based Systems | 5074109 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2022 | 5073457 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2022 (Server Core installation) | 5073457 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2022, 23H2 Edition (Server Core installation) | 5073450 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2025 | 5073379 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2025 (Server Core installation) | 5073379 (Security Update) |
Important | Elevation of Privilege | Yes |
Patches
| Article | Type | Restart |
|---|---|---|
5073724 |
Security Update | Yes |
5073455 |
Security Update | Yes |
5074109 |
Security Update | Yes |
5073457 |
Security Update | Yes |
5073450 |
Security Update | Yes |
5073379 |
Security Update | Yes |
Patch Diff
UAF in CSynchronousSuperWetInk destructor. Pre-patch, RemoveSource() was called only if IsSuperWetCompatible() returned true — a state that could be flipped by a low-priv attacker between registration and destruction (via CMD_SET_PROPERTY LookupMode=0), leaving a dangling pointer in CSuperWetInkManager::localStrokesVector. DirtyActiveInk later dereferences the freed vtable. Patch adds Feature_1732988217 CFR flag; when enabled, RemoveSource() runs unconditionally. Sibling fix in CDelegatedInkCanvas destructor uses the same flag. Full public exploit chain (GetRECT heap spray + __fnINSTRING/CStdAsyncStubBuffer2_Disconnect gadgets → VirtualProtect + WinExec) published by Joe Desimone / Elastic Security Labs.
| Function | Address | Change | Note |
|---|---|---|---|
CSynchronousSuperWetInk::~CSynchronousSuperWetInk |
1802a9818 -> 1802a9ad8 |
code, length, address, called | similarity 0.82 |
wil::details::WilApi_GetFeatureEnabledState |
18022b11c |
refcount, calling | similarity 1.0 |
CDelegatedInkCanvas::~CDelegatedInkCanvas |
18029b90c |
code, length, called | similarity 0.69 |
wil::details::ReportUsageToService |
1800ea660 |
refcount, calling | similarity 0.96 |
wil::details_abi::heap_buffer::push_back |
180216760 |
refcount, calling | similarity 1.0 |
wil::details::unique_storage<struct_wil::details::resource_policy<struct__RTL_SRWLOCK*___ptr64,void_(__cdecl*)(struct__RTL_SRWLOCK*___ptr64),&void___cdecl_ReleaseSRWLockExclusive(struct__RTL_SRWLOCK*___ptr64),struct_wistd::integral_constant<unsigned___int64,1>,struct__RTL_SRWLOCK*___ptr64,struct__RTL_SRWLOCK*___ptr64,0,std::nullptr_t>_>::~unique_storage<struct_wil::details::resource_policy<struct__RTL_SRWLOCK*___ptr64,void_(__cdecl*)(struct__RTL_SRWLOCK*___ptr64),&void___cdecl_ReleaseSRWLockExclusive(struct__RTL_SRWLOCK*___ptr64),struct_wistd::integral_constant<unsigned___int64,1>,struct__RTL_SRWLOCK*___ptr64,struct__RTL_SRWLOCK*___ptr64,0,std::nullptr_t>_> |
1802082fc |
refcount, calling | similarity 1.0 |
wil::details::EnsureSubscribedToFeatureConfigurationChanges |
180201d0c |
refcount, calling | similarity 1.0 |
API-MS-WIN-CORE-SYNCH-L1-1-0.DLL::AcquireSRWLockExclusive |
EXTERNAL:0000005d |
refcount, calling | similarity 1.0 |
Known Exploits
Acknowledgments
Anonymous working with Trend Zero Day Initiative