Important CVSS 7 EPSS 0.00207 🔬 Patch diffed 2026-05 archive

Executive Summary

Use after free in Windows Projected File System allows an authorized attacker to elevate privileges locally.

Overview

7
CVSS HIGH
Important
MS Severity
Not Exploited
MS Exploit Status
Less Likely
MS Exploit Likelihood
Category Elevation of Privilege
Released May 12 2026
Last Updated May 12 2026
Publicly Disclosed No
CISA KEV Not Listed
Known Exploits None Known
EPSS Score 0.00207 — 0.10954 percentile
NVD CVSS 7 HIGH — matches MSRC

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
ATTACK VECTOR
Local
ATTACK COMPLEXITY
High
PRIVILEGES REQUIRED
Low
USER INTERACTION
None
SCOPE
Unchanged
CONFIDENTIALITY
High
INTEGRITY
High
AVAILABILITY
High
EXPLOIT CODE MATURITY
Unproven
REMEDIATION LEVEL
Official Fix
REPORT CONFIDENCE
Confirmed
Temporal Score: 6.1

EPSS Score

0.00207
probability of exploitation in the next 30 days
0.10954 percentile - updated 2026-08-14
View on FIRST.org

Affected Products

15 affected products
Product KB Article Severity Impact Restart Required
Windows 10 Version 1809 for 32-bit Systems 5087538 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 1809 for x64-based Systems 5087538 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 21H2 for 32-bit Systems 5087544 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 21H2 for ARM64-based Systems 5087544 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 21H2 for x64-based Systems 5087544 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 22H2 for 32-bit Systems 5094127 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 22H2 for ARM64-based Systems 5094127 (Security Update) Important Elevation of Privilege Yes
Windows 10 Version 22H2 for x64-based Systems 5094127 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 23H2 for ARM64-based Systems 5087420 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 23H2 for x64-based Systems 5093998 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 24H2 for ARM64-based Systems 5089549 (Security Update) 5089466 (Security Hotpatch Update) Important Elevation of Privilege 5082063 Base: 7.0 Temporal: 6.1 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 10.0.26100.8457 10.0.26100.8390 Yes None Windows 11 Version 24H2 for x64-based Systems 5089549 (Security Update) 5089466 (Security Hotpatch Update) Important Elevation of Privilege 5082063 Base: 7.0 Temporal: 6.1 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 10.0.26100.8457 10.0.26100.8390 Yes None Windows 11 Version 25H2 for ARM64-based Systems 5089549 (Security Update) 5089466 (Security Hotpatch Update) Important Elevation of Privilege 5083769 Base: 7.0 Temporal: 6.1 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 10.0.26200.8457 10.0.26200.8390 Yes None Windows 11 Version 25H2 for x64-based Systems 5089549 (Security Update) 5089466 (Security Hotpatch Update) Important Elevation of Privilege 5083769 Base: 7.0 Temporal: 6.1 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 10.0.26200.8457 10.0.26200.8390 Yes None Windows 11 Version 26H1 for ARM64-based Systems 5089548 (Security Update) Important Elevation of Privilege Yes
Windows 11 version 26H1 for x64-based Systems 5089548 (Security Update) Important Elevation of Privilege Yes
Windows Server 2019 5087538 (Security Update) Important Elevation of Privilege Yes
Windows Server 2019 (Server Core installation) 5087538 (Security Update) Important Elevation of Privilege Yes
Windows Server 2022 5087545 (Security Update) 5087424 (Security Hotpatch Update) Important Elevation of Privilege 5082142 Base: 7.0 Temporal: 6.1 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 10.0.20348.5139 10.0.20348.5074 Yes None Windows Server 2022 (Server Core installation) 5087545 (Security Update) 5087424 (Security Hotpatch Update) Important Elevation of Privilege 5082142 Base: 7.0 Temporal: 6.1 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 10.0.20348.5139 10.0.20348.5074 Yes None Windows Server 2022, 23H2 Edition (Server Core installation) 5087541 (Security Update) Important Elevation of Privilege Yes

Patches

7 patches
Article Type Restart
5087538 Security Update Yes
5087544 Security Update Yes
5094127 Security Update Yes
5087420 Security Update Yes
5093998 Security Update Yes
5089548 Security Update Yes
5087541 Security Update Yes

Patch Diff

ghidriff · prjflt.sys (KB5089549)

TOCTOU use-after-free (CWE-416) in the Windows Projected File System filter prjflt.sys, local EoP. PrjfRevertInMemoryTombstonesForDirectory (called from the IRP_MJ_CLEANUP post-callback PrjfPostCleanup) traverses the in-memory tombstone RTL_DYNAMIC_HASH_TABLE at context+240, guarded by an ERESOURCE at context+136. For each entry it selects the entry under the lock, then FltReleaseResource and KeWaitForSingleObject with NO timeout (indefinite). PRE: only after the wait does it read the tombstone attribute byte directly from the shared entry (*(char*)(entry+0x18), LOBYTE(v14[1].Linkage.Flink)) and pass it as arg3 to PrjfCreateTombstone. In the release->wait window another thread can take the ERESOURCE and modify the entry, so PrjfCreateTombstone gets a corrupted/attacker-influenced attribute flag -> wrong tombstone type / ProjFS state corruption; the no-timeout wait widens the window to seconds. IN-HOUSE ghidriff of prjflt.sys 10.0.26100.8328 -> .8457 (May 12 2026, KB5089549) confirms the fix: gated behind CFR flag Feature_1526925624, the function captures the attribute byte into stack local local_e7 while holding the lock (capture-before-release) and uses that snapshot after the wait instead of re-reading the shared entry. Note: our x64 24H2 diff shows Feature_1526925624, differing from the circulated screenshots' Feature_1795361080 (build/arch difference); the capture-before-release mechanism is identical. We ship what our diff shows.

Pre-patch version 10.0.26100.8328 Download
Post-patch version 10.0.26100.8457 Download
Function Address Change Note
PrjfRevertInMemoryTombstonesForDirectory code change code (capture-before-release snapshot of tombstone attribute, CFR-gated) Pre: after FltReleaseResource + KeWaitForSingleObject(no timeout), PrjfCreateTombstone(param_1,&name,*(char*)(entry+0x18)) re-reads the shared hash-table entry (TOCTOU). Post (Feature_1526925624 enabled): local_e7 = *(char*)(entry+0x18) captured under the lock; after release+wait cVar4 = local_e7 (snapshot) is passed to PrjfCreateTombstone. Feature-disabled path keeps the old re-read. ERESOURCE at ctx+0x88 (136), hash table at ctx+0xf0 (240).
PrjfCreateTombstone sink (unchanged) consumer of the attribute Receives the tombstone attribute byte as its 3rd argument; pre-patch that value was read from shared state after the lock was released, post-patch it is the lock-protected snapshot.
Feature_1526925624 new flag added (CFR gate) New CFR flag gating the capture-before-release snapshot; with it disabled the original post-wait re-read still ships in .8457.
View full diff report View RCA report

Attack Path

The cleanup callback reads a tombstone attribute after releasing the lock, so a racing thread can swap the value used to create the tombstone

Attack path for CVE-2026-34340 The cleanup callback reads a tombstone attribute after releasing the lock, so a racing thread can swap the value used to create the tombstone 01 — ENTRY IRP_MJ_CLEANUP on a ProjFS directory invokes PrjfRevertInMemoryTombstonesForDirectory prjflt.sys (kernel) walks the in-memory tombstone hash table (RTL_DYNAMIC_HASH_TABLE at context+240) under an ERESOURCE exclusive lock at context+136. 02 — CONTROLLED INPUT Per entry, the function releases the lock and waits with no timeout After selecting an entry under the lock it calls FltReleaseResource then KeWaitForSingleObject(...,0) - an indefinite wait that widens the window to seconds. 03 — PATH After the wait it reads the tombstone attribute byte from the shared entry Pre-patch it reads *(char*)(entry+0x18) (LOBYTE(v14[1].Linkage.Flink)) and passes it as arg3 to PrjfCreateTombstone - a time-of-use read with no lock held. 04 — MISSING CHECK Another thread modifies the entry during the unlocked window (CWE-416 / TOCTOU) A concurrent thread acquires the same ERESOURCE and rewrites the attribute byte between release and use, so validated value != used value. 05 — PRIMITIVE PrjfCreateTombstone gets a corrupted attribute -> wrong tombstone type / ProjFS state corruption -> EoP An incorrect/attacker-influenced tombstone is created, corrupting virtualization state. The May 2026 fix (Feature_1526925624) snapshots the byte under the lock (local_e7) and uses the snapshot after the wait.

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