CVE-2026-50378 — Windows Key Guard Elevation of Privilege Vulnerability
Executive Summary
Concurrent execution using shared resource with improper synchronization ('race condition') in Windows Key Guard allows an authorized attacker to elevate privileges locally.
Overview
CVSS Vector
CVSS:3.1/AV:L/AC:H/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 1809 for 32-bit Systems | 5099538 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 1809 for x64-based Systems | 5099538 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for 32-bit Systems | 5099539 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for ARM64-based Systems | 5099539 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for x64-based Systems | 5099539 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for 32-bit Systems | 5099539 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for ARM64-based Systems | 5099539 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for x64-based Systems | 5099539 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 24H2 for ARM64-based Systems | 5101650 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 24H2 for x64-based Systems | 5101650 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 25H2 for ARM64-based Systems | 5101650 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 25H2 for x64-based Systems | 5101650 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 26H1 for ARM64-based Systems | 5101649 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 version 26H1 for x64-based Systems | 5095051 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2019 | 5099538 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2019 (Server Core installation) | 5099538 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2022 | 5099540 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2025 | 5099536 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2025 (Server Core installation) | 5099536 (Security Update) |
Important | Elevation of Privilege | Yes |
Patches
| Article | Type | Restart |
|---|---|---|
5099538 |
Security Update | Yes |
5099539 |
Security Update | Yes |
5101650 |
Security Update | Yes |
5101649 |
Security Update | Yes |
5095051 |
Security Update | Yes |
5099540 |
Security Update | Yes |
5099536 |
Security Update | Yes |
Patch Diff
Race condition (CWE-362) in the Windows Key Guard isolated trustlet lsaiso.exe BCryptIum crypto-RPC objects, local EoP to SYSTEM. lsaiso.exe is the Isolated LSA / Key Guard trustlet (runs in VBS/IUM VTL1) and exposes a BCryptIum* RPC interface for isolated crypto operations; each key/context is a _BCRYPT_ISO_OBJECT tracked by the trustlet. PRE: access to a shared _BCRYPT_ISO_OBJECT across the BCryptIum operations was not synchronized, so concurrent RPC calls operating on the same object could race (use/modify it while another call used/freed it) - a race condition on the shared trustlet crypto object exploitable for local EoP to SYSTEM. Diff of lsaiso.exe 10.0.26100.8737 -> .8875 (Jul 14 2026, KB5101650) confirms the fix: the _BCRYPT_ISO_OBJECT gains a per-object SRW lock (a lock field at object+0x28); AllocateBCryptIsoObject initializes it and the BCryptIum operations (Encrypt/Decrypt/DeriveKey/CreateClaim/DuplicateKey/DestroyKey/... via LookupBCryptIsoObject) now AcquireSRWLockExclusive/ReleaseSRWLockExclusive around access to the shared object, serializing concurrent operations and closing the race. Note: this July update reworks the whole BCryptIum trustlet interface; the CWE-362 race fix is the per-object SRW-lock serialization isolated here. The paired Key Guard CVE-2026-50303 (CWE-1240, risky crypto primitive) is in the same binary but its distinct crypto change was not cleanly isolable in this diff and is not claimed here.
| Function | Address | Change | Note |
|---|---|---|---|
AllocateBCryptIsoObject |
code change |
code (per-object SRW lock added) | The allocated _BCRYPT_ISO_OBJECT now carries an SRW lock (field at +0x28) initialized here; AcquireSRWLockExclusive/ReleaseSRWLockExclusive imported and used. |
BCryptIum* operations (Encrypt/Decrypt/DeriveKey/SecretAgreement/CreateClaim/DuplicateKey/DestroyKey/ImportKey/ExportKey/...) |
code change |
code (serialized access to the shared ISO object) | These RPC handlers now look up the _BCRYPT_ISO_OBJECT and take the per-object SRW lock around access, serializing concurrent operations on the same trustlet crypto object. |
race-fix |
n/a |
note | Direct fix (not CFR-gated). ~36 BCryptIum functions changed as part of the interface rework; the CWE-362 fix is the added per-object SRW-lock serialization. |
Attack Path
Concurrent BCryptIum RPC calls race on a shared Key Guard trustlet crypto object with no lock
Derived from the patch delta: the checks added by the vendor identify which fields crossed a trust boundary unvalidated. Reachability and privilege are taken from the call chain in the RCA report.
Exploits & PoC
Detection Rules
Acknowledgments
Leshi Yang