CVE-2026-32069 — Windows Projected File System Elevation of Privilege Vulnerability
Executive Summary
Double free in Windows Projected File System 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 1809 for 32-bit Systems | 5082123 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 1809 for x64-based Systems | 5082123 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for 32-bit Systems | 5082200 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for ARM64-based Systems | 5082200 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for x64-based Systems | 5082200 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for 32-bit Systems | 5082200 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for ARM64-based Systems | 5082200 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for x64-based Systems | 5082200 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 23H2 for ARM64-based Systems | 5082052 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 23H2 for x64-based Systems | 5082052 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 24H2 for ARM64-based Systems | 5083769 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 24H2 for x64-based Systems | 5083769 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 25H2 for ARM64-based Systems | 5083769 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 25H2 for x64-based Systems | 5083769 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 26H1 for ARM64-based Systems | 5083768 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 version 26H1 for x64-based Systems | 5083768 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2019 | 5082123 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2019 (Server Core installation) | 5082123 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2022 | 5082142 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2022 (Server Core installation) | 5082142 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2022, 23H2 Edition (Server Core installation) | 5082060 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2025 | 5082063 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2025 (Server Core installation) | 5082063 (Security Update) |
Important | Elevation of Privilege | Yes |
Patches
| Article | Type | Restart |
|---|---|---|
5082123 |
Security Update | Yes |
5082200 |
Security Update | Yes |
5082052 |
Security Update | Yes |
5083769 |
Security Update | Yes |
5083768 |
Security Update | Yes |
5082142 |
Security Update | Yes |
5082060 |
Security Update | Yes |
5082063 |
Security Update | Yes |
Patch Diff
Double free (CWE-415) in the Windows Projected File System minifilter prjflt.sys notification-mapping path, local EoP. PrjfStoreNotificationMappingEntries iterates user-supplied _PRJ_NOTIFICATION_MAPPING_ENTRY records, calling PrjfCreateMappingEntry(&MappingEntry) to allocate MappingEntry.pDirEntry (ExAllocatePool2 tag 'mnJP'), inserting it, then freeing it with ExFreePoolWithTag(MappingEntry.pDirEntry, 'mnJP') at the loop tail. PRE: after that free the local MappingEntry.pDirEntry pointer is NOT set to NULL, and the same MappingEntry stack structure is reused on the next iteration; when PrjfCreateMappingEntry is entered again with NotificationBitMask == 0xFFFFFFFF (an error case), it frees pMappingEntry->pDirEntry - the stale, already-freed pointer - a second time, a double free that corrupts the paged pool. Diff of prjflt.sys 10.0.26100.8036 -> .8246 (Apr 14 2026, KB5083769) confirms the fix: gated behind CFR flag Feature_4243261755, PrjfStoreNotificationMappingEntries now clears the MappingEntry.pDirEntry pointer after ExFreePoolWithTag so the reused structure no longer holds a dangling pointer, and PrjfCreateMappingEntry's error-path free is guarded, eliminating the second free.
| Function | Address | Change | Note |
|---|---|---|---|
PrjfStoreNotificationMappingEntries |
code change |
code (pDirEntry nulled after free, CFR-gated) | Pre: ExFreePoolWithTag(MappingEntry.pDirEntry,'mnJP') at the loop tail without nulling the reused MappingEntry.pDirEntry. Post (Feature_4243261755): the pointer is cleared (local_40 = 0) after the free so the next iteration's PrjfCreateMappingEntry cannot re-free a stale pointer. |
PrjfCreateMappingEntry |
code change |
code (guarded error-path free) | On NotificationBitMask == 0xFFFFFFFF the pMappingEntry->pDirEntry free is now guarded (feature-state checked) and the field is zeroed, so it does not double-free a pointer already freed by the caller's previous iteration. |
Feature_4243261755 |
gate |
added (CFR gate) | CFR flag gating the null-after-free / guarded-free; the original double-free path still ships when disabled. |
Attack Path
A freed notification-mapping dir-entry pointer is left in a reused structure and freed again on the next iteration
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.
Known Exploits
Acknowledgments
ChenJian with Sea Security Orca Team