Important CVSS 7.8 EPSS 0.00338 🔬 Patch diffed 2026-07 archive

Executive Summary

Heap-based buffer overflow in Windows Resilient File System (ReFS) allows an unauthorized attacker to execute code locally.

Overview

7.8
CVSS HIGH
Important
MS Severity
Not Exploited
MS Exploit Status
Exploitation Unlikely
MS Exploit Likelihood
Category Remote Code Execution
Released Jul 14 2026
Last Updated Jul 14 2026
Publicly Disclosed No
CISA KEV Not Listed
Known Exploits None Known
EPSS Score 0.00338 — 0.26643 percentile
NVD CVSS 7.8 HIGH — matches MSRC

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
ATTACK VECTOR
Local
ATTACK COMPLEXITY
Low
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.8

EPSS Score

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

Affected Products

23 affected products
Product KB Article Severity Impact Restart Required
Windows 10 Version 1607 for 32-bit Systems 5099535 (Security Update) Important Remote Code Execution Yes
Windows 10 Version 1607 for x64-based Systems 5099535 (Security Update) Important Remote Code Execution Yes
Windows 10 Version 1809 for 32-bit Systems 5099538 (Security Update) Important Remote Code Execution Yes
Windows 10 Version 1809 for x64-based Systems 5099538 (Security Update) Important Remote Code Execution Yes
Windows 10 Version 21H2 for 32-bit Systems 5099539 (Security Update) Important Remote Code Execution Yes
Windows 10 Version 21H2 for ARM64-based Systems 5099539 (Security Update) Important Remote Code Execution Yes
Windows 10 Version 21H2 for x64-based Systems 5099539 (Security Update) Important Remote Code Execution Yes
Windows 10 Version 22H2 for 32-bit Systems 5099539 (Security Update) Important Remote Code Execution Yes
Windows 10 Version 22H2 for ARM64-based Systems 5099539 (Security Update) Important Remote Code Execution Yes
Windows 10 Version 22H2 for x64-based Systems 5099539 (Security Update) Important Remote Code Execution Yes
Windows 11 Version 24H2 for ARM64-based Systems 5101650 (Security Update) Important Remote Code Execution Yes
Windows 11 Version 24H2 for x64-based Systems 5101650 (Security Update) Important Remote Code Execution Yes
Windows 11 Version 25H2 for ARM64-based Systems 5101650 (Security Update) Important Remote Code Execution Yes
Windows 11 Version 25H2 for x64-based Systems 5101650 (Security Update) Important Remote Code Execution Yes
Windows 11 Version 26H1 for ARM64-based Systems 5101649 (Security Update) Important Remote Code Execution Yes
Windows 11 version 26H1 for x64-based Systems 5101649 (Security Update) Important Remote Code Execution Yes
Windows Server 2016 5099535 (Security Update) Important Remote Code Execution Yes
Windows Server 2016 (Server Core installation) 5099535 (Security Update) Important Remote Code Execution Yes
Windows Server 2019 5099538 (Security Update) Important Remote Code Execution Yes
Windows Server 2019 (Server Core installation) 5099538 (Security Update) Important Remote Code Execution Yes
Windows Server 2022 5099540 (Security Update) Important Remote Code Execution Yes
Windows Server 2025 5099536 (Security Update) Important Remote Code Execution Yes
Windows Server 2025 (Server Core installation) 5099536 (Security Update) Important Remote Code Execution Yes

Patches

7 patches
Article Type Restart
5099535 Security Update Yes
5099538 Security Update Yes
5099539 Security Update Yes
5101650 Security Update Yes
5101649 Security Update Yes
5099540 Security Update Yes
5099536 Security Update Yes

Patch Diff

ghidriff · refs.sys (KB5099540)

Kernel heap-based buffer overflow (CWE-122) in the Windows ReFS driver refs.sys checkpoint serialization, mount-time arbitrary code execution (Important, RCE, AV:L, UI:R, CVSS 7.8). A producer/consumer bug separated in time: a crafted ReFS checkpoint carries an excessive globalTableCount (DWORD at record + 0x90). PRE: CmsVolume::ValidateCheckpointRecord accepts the count as long as it is internally consistent with the INPUT record - the key check count <= size >> 2 && count > 4 bounds it only against the input checkpoint's own size (a larger crafted record raises the permitted count), plus offset-table-inside-record checks; nothing bounds it against the destination buffer. During mount, ReadLatestCheckpoint promotes it to persistent kernel state as volume + 478 = count - 13, losing its untrusted origin. Later CmsVolume::FormatCheckpointRecord restores count = volume[478] + 13 and writes that many offset-table entries and serialized roots into the fixed checkpoint record buffer with NO comparison of the final cursor against the buffer size - a kernel OOB write. Mounting a crafted ReFS image (AV:L, UI:R) reaches the path, yielding kernel code execution. Diff of refs.sys 10.0.20348.4893 -> .5386 (Jul 14 2026, KB5099540, Server 2022) confirms the fix: the formatter is logically unchanged (only relocated); the CVE-relevant delta is an ABSOLUTE count cap added to ValidateCheckpointRecord (ratio 0.37), gated behind CFR flags Feature_1337977145 / Feature_3102454072, rejecting the oversized globalTableCount before it is promoted to persistent state. Cross-checked against an independent writeup; functions (ValidateCheckpointRecord / FormatCheckpointRecord / ReadLatestCheckpoint) and offsets (+0x90 count, volume+478) match the ghidriff.

Pre-patch version 10.0.20348.4893 Download
Post-patch version 10.0.20348.5386 Download
Function Address Change Note
CmsVolume::ValidateCheckpointRecord code change code (absolute globalTableCount cap added, CFR-gated) Pre (ratio 0.37): globalTableCount at record+0x90 checked only as count <= size>>2 && count > 4 (input-record-relative) plus offset-table-inside-record checks - not bounded to the destination buffer. Post (Feature_1337977145 / Feature_3102454072): adds an absolute cap that rejects an oversized count before it is promoted to volume+478 and later consumed by the formatter.
CmsVolume::FormatCheckpointRecord sink (unchanged / relocated) note (the OOB-write sink; logically unchanged) Restores count = volume[478] + 13 and serializes that many offset-table entries and roots into the fixed checkpoint buffer with no destination-size check. The formatter body is logically equivalent between builds (relocated); the fix is entirely in the validator.
CmsVolume::ReadLatestCheckpoint code change code (promotes the validated count to persistent state) Stores volume + 478 = globalTableCount - 13 (extended-root count) during mount; the untrusted value's origin is lost here, then restored later by FormatCheckpointRecord.
Feature_1337977145 / Feature_3102454072 gate added (CFR gates) CFR flags gating the count cap in ValidateCheckpointRecord; the original record-local-only validation ships when disabled.
View full diff report View RCA report

Attack Path

A crafted ReFS checkpoint globalTableCount passes record-local validation, then overflows the destination checkpoint buffer during formatting

Attack path for CVE-2026-58530 A crafted ReFS checkpoint globalTableCount passes record-local validation, then overflows the destination checkpoint buffer during formatting 01 — ENTRY Victim mounts a crafted ReFS image / VHD refs.sys reads and validates the on-disk checkpoint (ReadLatestCheckpoint / ValidateCheckpointRecord). AV:L / PR:N / UI:R (requires the user to mount the image). 02 — CONTROLLED INPUT Checkpoint carries an oversized globalTableCount (record + 0x90) A count such as 0x160 passes the record-local checks (count <= size>>2, offset table inside the record) with a recomputed self-checksum, but exceeds what the destination buffer holds. 03 — MISSING CHECK Count promoted then consumed without a destination bound (CWE-122) ReadLatestCheckpoint stores count-13 into volume+478; FormatCheckpointRecord restores count and serializes that many entries/roots into the fixed checkpoint buffer with no cursor-vs-size check - a kernel OOB write. 04 — IMPACT Kernel heap overflow -> code execution The out-of-bounds write corrupts adjacent kernel pool state during checkpoint formatting, exploitable for arbitrary code execution (Important, 7.8).

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

Donghyeon Oh
Jonghoi Kim
R4nger with Kunlun Lab & Zhiniang Peng with HUST