CVE-2026-20817: Windows Error Reporting Service (WerSvc.dll) Local Privilege Escalation via ALPC Argument Injection

CVE-2026-20817 (TL-2026-2479) is a high-severity software vulnerability scored CVSS 7.8, first published 2026-09-13. It has no confirmed attribution, affects Microsoft Windows 10 Version 21H2, references 1 CVE (CVE-2026-20817), maps to 9 MITRE ATT&CK techniques (T1007, T1012, T1027.011), and is covered by 9 detection rules and 12 indicators of compromise.

Key facts for TL-2026-2479

Threat ID
TL-2026-2479
Severity
HIGH
CVSS
7.8 (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Status
ACTIVE
Category
VULNERABILITY
First published
2026-09-13
Last reviewed
2026-09-13
Attribution confidence
LOW
Motivation
UNKNOWN
Detection rules
9
Indicators of compromise
12

Malware and tooling in CVE-2026-20817

Malware and tooling: Windows10, Fake/trojanized CVE-2026-20817 PoC repositories on GitHub, Vicarius vSociety CVE-2026-20817 Detection Script, Vicarius vSociety CVE-2026-20817 Mitigation Script, itm4n/CVEs CVE-2026-20817 PoC (poc.cpp), oxfemale/CVE-2026-20817 PoC

The SvcElevatedLaunch function in Windows Error Reporting Service (WerSvc.dll) fails to validate the privileges of ALPC callers to \WindowsErrorReportingServicePort, letting a low-privilege local user control the command line of WerFault.exe when the service launches it with a SYSTEM-level token via CreateProcessAsUserW. A public proof-of-concept (itm4n, poc.cpp) connects to the port, sends a message with MessageFlags 0x50000000 referencing a File Mapping object holding attacker-chosen WerFault.exe arguments, and observes WerFault.exe spawn under SYSTEM with the caller's PID spoofed as its parent. Microsoft's January 2026 patch permanently disables SvcElevatedLaunch (the function now immediately returns 0x80004005/E_FAIL) rather than adding permission checks.

How CVE-2026-20817 works

CVE-2026-20817 is a local elevation-of-privilege vulnerability (CWE-280, Improper Handling of Insufficient Permissions or Privileges) in the Windows Error Reporting service (wersvc.dll / WerSvc), rated CVSS 3.1 7.8 HIGH (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H). WerSvc runs as NT AUTHORITY\SYSTEM and exposes an ALPC server at \WindowsErrorReportingServicePort. An ALPC thread dispatches client requests through a generic _ProcessRequest handler into DispatchPortRequestWorkItem, which can route to the SvcElevatedLaunch method. SvcElevatedLaunch opens the calling client's process and invokes an internal ElevatedProcessStart routine, passing a reference to a File Mapping object supplied by the (unprivileged) caller. The vulnerable ALPC message format requires MessageFlags (offset 0x28) equal to 0x50000000, an unknown field (offset 0x30) set to 1, a FileMapping handle (offset 0x38), an optional SourceHandles array of up to 16 client handles (offset 0x40), a CopySourceHandles flag (offset 0xc0), and a NewProcessHandle output field (offset 0xc8), for a total structure size of 0x578 bytes. Because the service never verifies that the caller is authorized to request an elevated launch, and reads the command line to pass to WerFault.exe directly out of the attacker-controlled shared-memory File Mapping, a standard user can dictate the command-line arguments WerFault.exe (C:\Windows\System32\WerFault.exe) receives when it is created under a SYSTEM-derived token via CreateProcessAsUserW. The resulting token retains powerful privileges (per secondary reporting: SeDebugPrivilege, SeImpersonatePrivilege, SeBackupPrivilege) while lacking SeTcbPrivilege. WerSvc also sets the calling process's PID as the parent of the newly created WerFault.exe instance (parent-PID spoofing), which Microsoft Defender flags as suspicious behavior when observed. The public PoC (github.com/itm4n/CVEs/tree/master/CVE-2026-20817, authored by itm4n/Clément Labro, published 2026-03-22 and updated 2026-03-28) demonstrates controlled WerFault.exe argument injection as SYSTEM but explicitly states that converting this into arbitrary code execution requires additional work; the WER service must be running and the exploit assumes the default ALPC port name. An earlier, independently authored PoC by GitHub user oxfemale (@bytecodevm) was covered by cyberpress.org on 2026-03-02, roughly three weeks before itm4n's detailed write-up, and was validated against Windows 11 23H2. The vulnerability was originally discovered and reported to Microsoft by Denis Faiustov and Ruslan Sayfiev of GMO Cybersecurity, and fixed in Microsoft's January 2026 Patch Tuesday release (NVD published 2026-01-13) across Windows 10 21H2/22H2, Windows 11 23H2/24H2/25H2, and Windows Server 2022/2022 23H2/2025. Microsoft's remediation does not add a permission/ACL check to the ALPC handler; instead it introduces a __private_IsEnabled() feature-flag test at the top of SvcElevatedLaunch that unconditionally fails the call with 0x80004005, effectively dead-coding the elevated-launch feature rather than repairing it. CVE-2026-20817 is not listed in the CISA Known Exploited Vulnerabilities catalog and carries a low EPSS score (0.055, 92.3rd percentile) as of research time, indicating no confirmed in-the-wild exploitation despite the public PoC code. itm4n's function-level reverse engineering traces the call chain as _ProcessRequest -> DispatchPortRequestWorkItem -> SvcElevatedLaunch -> OpenSenderProcessThread -> ElevatedProcessStart -> CreateElevatedProcessAsUser -> CreateProcessAsUserW, with the low-privilege client connecting via the undocumented native APIs NtAlpcConnectPort and NtAlpcSendWaitReceivePort and the service using DuplicateHandle and MapViewOfFile to pull the attacker's arguments out of the caller-supplied File Mapping (shared-memory, never written to disk) before minting the SYSTEM token. The default port name can be overridden via the ErrorPort value under HKLM\SOFTWARE\Microsoft\Windows\Windows Error Reporting, which the PoC assumes is unset. Within WerSvc's ALPC dispatch table, SvcElevatedLaunch is invoked as method index 0x0D; the shared-memory command-line buffer supplied via the File Mapping object is capped at roughly 520 bytes. WerFault.exe's own executable path is hardened against tampering (resolved via GetSystemDirectoryW rather than taken from attacker input), so only its command-line arguments are attacker-controlled, not the binary invoked. Per secondary technical reporting, the SYSTEM token minted for the child process is produced by an internal UserTokenUtility::GetProcessToken routine and passed through CreateRestrictedToken, which strips only SeTcbPrivilege while leaving SeDebugPrivilege and SeImpersonatePrivilege intact - consistent with itm4n's own observation that the resulting token lacks SeTcbPrivilege but retains powerful impersonation/debug rights. itm4n's write-up points to related Windows internals research - James Forshaw's work on GetProcessHandleFromHwnd, used to obtain a process handle from a window handle to bypass Protected Process Light restrictions on WerFaultSecure.exe - as a plausible avenue for turning the controlled WerFault.exe launch into full code execution, though no such follow-on exploit chain has been publicly demonstrated for CVE-2026-20817 specifically. Following disclosure, gbhackers.com reported that fake and potentially malicious PoC repositories mimicking itm4n's legitimate exploit began circulating on GitHub, and cautioned administrators to verify PoC provenance before downloading or executing any CVE-2026-20817 exploit code.

MITRE ATT&CK techniques used in TL-2026-2479

Discovery

T1007 System Service Discovery; T1012 Query Registry

Defense Evasion

T1027.011 Obfuscated Files or Information: Fileless Storage; T1134.004 Access Token Manipulation: Parent PID Spoofing

Initial Access

T1078.003 Valid Accounts: Local Accounts

Execution

T1106 Native API; T1559 Inter-Process Communication

Privilege Escalation

T1134.002 Access Token Manipulation: Create Process with Token

Resource Development

T1588.005 Exploits

Affected products and versions in CVE-2026-20817

  • Microsoft — Windows 10 Version 21H2
    Vulnerable versions: before 10.0.19044.6809
    Fixed in: 10.0.19044.6809
  • Microsoft — Windows 10 Version 22H2
    Vulnerable versions: before 10.0.19045.6809
    Fixed in: 10.0.19045.6809
  • Microsoft — Windows 11 Version 23H2
    Vulnerable versions: before 10.0.22631.6491
    Fixed in: 10.0.22631.6491
  • Microsoft — Windows 11 Version 24H2
    Vulnerable versions: before 10.0.26100.7623; 10.0.26100.7309 (tested by itm4n)
    Fixed in: 10.0.26100.7623
  • Microsoft — Windows 11 Version 25H2
    Vulnerable versions: before 10.0.26200.7623
    Fixed in: 10.0.26200.7623
  • Microsoft — Windows Server 2022
    Vulnerable versions: before 10.0.20348.4648
    Fixed in: 10.0.20348.4648
  • Microsoft — Windows Server 2022 23H2
    Vulnerable versions: before 10.0.25398.2092
    Fixed in: 10.0.25398.2092
  • Microsoft — Windows Server 2025
    Vulnerable versions: before 10.0.26100.32230
    Fixed in: 10.0.26100.32230

Remediation for CVE-2026-20817

Patches

  • Windows 10 Version 21H2: update to 10.0.19044.6809 or later
  • Windows 10 Version 22H2: update to 10.0.19045.6809 or later
  • Windows 11 Version 23H2: update to 10.0.22631.6491 or later
  • Windows 11 Version 24H2: update to 10.0.26100.7623 or later
  • Windows 11 Version 25H2: update to 10.0.26200.7623 or later
  • Windows Server 2022: update to 10.0.20348.4648 or later
  • Windows Server 2022 23H2: update to 10.0.25398.2092 or later
  • Windows Server 2025: update to 10.0.26100.32230 or later

Immediate actions

  • Apply Microsoft's January 2026 security updates, which add a feature-flag check that permanently disables the vulnerable SvcElevatedLaunch code path (returns 0x80004005/E_FAIL)
  • Where patching is delayed, monitor for WerFault.exe process creation events with anomalous/attacker-supplied command-line arguments and SYSTEM tokens lacking SeTcbPrivilege
  • Use Vicarius vSociety's published detection script to identify hosts still running vulnerable wersvc.dll builds

Workarounds

  • Stop and disable the Windows Error Reporting service (wersvc) on systems where automated crash reporting is not required, removing the \WindowsErrorReportingServicePort ALPC attack surface — e.g. `sc config WerSvc start=disabled`
  • Apply Vicarius vSociety's published mitigation script as an interim compensating control on hosts that cannot yet be patched

Longer-term hardening

  • Deploy EDR detections for WerFault.exe instances whose logged parent PID does not match the actual spawning process (parent-PID spoofing), a behavior Microsoft Defender already flags as suspicious
  • Apply least-privilege and application control policies to reduce the value of local SYSTEM escalation to an attacker who already has unprivileged code execution
  • Track Microsoft Patch Tuesday release notes for Windows Error Reporting CVEs and include WerSvc patch-level checks in routine compliance audits

CVEs associated with CVE-2026-20817

CVE-2026-20817

Weaknesses (CWE) in CVE-2026-20817

CWE-280

Timeline of CVE-2026-20817

  • Microsoft ships the fix in January 2026 Patch Tuesday that permanently disables SvcElevatedLaunch (returns 0x80004005/E_FAIL); CVE-2026-20817 is published in NVD and the MSRC Security Update Guide.
  • cybersecuritynews.com publishes initial coverage of the patched Windows Error Reporting EoP flaw.
  • GitHub user oxfemale (@bytecodevm) publishes an independent PoC exploit for CVE-2026-20817, validated against Windows 11 23H2; covered by cyberpress.org the same day.
  • itm4n (Clément Labro) publishes a detailed technical analysis of SvcElevatedLaunch and the ALPC message structure, plus a second public PoC (poc.cpp) on github.com/itm4n/CVEs.
  • gbhackers.com and cyberpress.org publish follow-up coverage of itm4n's analysis, noting Windows Defender flags the exploit's parent-PID spoofing as suspicious.
  • itm4n updates the CVE-2026-20817 write-up with corrections/additions to the original analysis.
  • Vicarius vSociety publishes a community detection script and companion mitigation script for identifying and compensating for unpatched CVE-2026-20817 hosts.

Sources cited for CVE-2026-20817

More in vulnerability

Detection coverage for TL-2026-2479

As of 2026-09-13, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-2479 across Splunk SPL, Microsoft KQL and Sigma, covering 12 indicator(s) of compromise. The whole corpus is readable without an account; a free account unlocks full detection query text in Splunk SPL, Microsoft KQL and Sigma; paid tiers add raw indicator values, correlation and the MCP server. Threadlinqs MCP server · View plans.

Threadlinqs Intelligence — Real-Time Threat Detection Platform

[ 0 threats ] [ 0 det ] [ CRIT: 0 ] [ HIGH: 0 ]
// threat_feed
$ sort --newest
Showing all threats

Latest Threats