Important CVSS 7.8 EPSS 0.00374 🔬 Patch diffed 2025-07 archive

Executive Summary

Double free in Microsoft Brokering File System allows an authorized attacker to elevate privileges locally.

Overview

7.8
CVSS HIGH
Important
MS Severity
Not Exploited
MS Exploit Status
Less Likely
MS Exploit Likelihood
Category Elevation of Privilege
Released Jul 8 2025
Last Updated Jul 8 2025
Publicly Disclosed No
CISA KEV Not Listed
Known Exploits None Known
EPSS Score 0.00374 — 0.30408 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.00374
probability of exploitation in the next 30 days
0.30408 percentile - updated 2026-08-14
View on FIRST.org

Affected Products

9 affected products
Product KB Article Severity Impact Restart Required
Windows 11 Version 22H2 for ARM64-based Systems 5062552 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 22H2 for x64-based Systems 5062552 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 23H2 for ARM64-based Systems 5062552 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 23H2 for x64-based Systems 5062552 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 24H2 for ARM64-based Systems 5062553 (Security Update) Important Elevation of Privilege Yes
Windows 11 Version 24H2 for x64-based Systems 5062553 (Security Update) Important Elevation of Privilege Yes
Windows Server 2022, 23H2 Edition (Server Core installation) 5062570 (Security Update) Important Elevation of Privilege Yes
Windows Server 2025 5062553 (Security Update) Important Elevation of Privilege Yes
Windows Server 2025 (Server Core installation) 5062553 (Security Update) Important Elevation of Privilege Yes

Patches

3 patches
Article Type Restart
5062552 Security Update Yes
5062553 Security Update Yes
5062570 Security Update Yes

Patch Diff

ghidriff · bfs.sys (KB5062553)

Double free (CWE-415) in the Microsoft Brokering File System driver bfs.sys BfsInsertPolicyEntry failure path, local EoP to SYSTEM (race, AC:H). Reached via \Device\Bfs IOCTL 0x228004 (BfsDeviceIoControl -> BfsProcessSetPolicyRequest). Handling a SetPolicy insert, BfsInsertPolicyEntry ExAllocatePool2's a policy entry (tag EsfB) plus pUserId and pContainerId (tag SsfB), assigns pUserId/pContainerId to NewPolicyEntry (ownership transfer), ref-counts (RefNo=2 after two InterlockedIncrements), inserts into the policy hash table, then provisions storage (BfsOpenPolicyDirectory/BfsCreateStorage). On failure it calls BfsDereferencePolicyEntryEx twice; the second drops RefNo to 0 and frees PolicyEntry->pUserId, ->pContainerId and the entry. The failure path THEN also ExFreePoolWithTag(pUserId)/ExFreePoolWithTag(pContainerId) on the same freed buffers -> double free / pool corruption. Diff of bfs.sys 10.0.26100.4484 -> .4652 (Jul 8 2025, KB5062553) confirms the fix: gated behind CFR flag Feature_3148938554, BfsInsertPolicyEntry nulls the local pUserId/pContainerId pointers immediately after ownership is transferred to the policy entry, so the failure-path ExFreePoolWithTag(pUserId/pContainerId) sees NULL and skips the second free. The BFS interface requires an AppSilo token (BfsIsApplicableToken / SeAppSiloSid), reached via AppContainer/AppSilo. Note: our diff shows Feature_3148938554 (build/arch); paired UAF is CVE-2025-49677.

Pre-patch version 10.0.26100.4484 Download
Post-patch version 10.0.26100.4652 Download
Function Address Change Note
BfsInsertPolicyEntry code change code (null local pUserId/pContainerId after ownership transfer, CFR-gated) Pre: on BfsOpenPolicyDirectory/BfsCreateStorage failure, BfsDereferencePolicyEntryEx (RefNo->0) frees PolicyEntry->pUserId/->pContainerId, then the path also ExFreePoolWithTag(pUserId)/ExFreePoolWithTag(pContainerId) -> double free. Post (Feature_3148938554): sets local pUserId=0/pContainerId=0 right after NewPolicyEntry->pUserId/->pContainerId assignment, so the later frees are skipped.
Feature_3148938554 gate added (CFR gate) CFR flag gating the null-after-transfer double-free fix (and the paired policy-entry lifecycle rework); original path still ships when disabled.
View full diff report View RCA report

Attack Path

A failed BfsCreateStorage frees pUserId/pContainerId via the policy entry, then the failure path frees them again

Attack path for CVE-2025-49693 A failed BfsCreateStorage frees pUserId/pContainerId via the policy entry, then the failure path frees them again 01 — ENTRY AppSilo/AppContainer process sends a BFS SetPolicy request (\Device\Bfs IOCTL 0x228004) bfs.sys BfsDeviceIoControl -> BfsProcessSetPolicyRequest -> BfsInsertPolicyEntry. AV:L/PR:L (AppSilo token required). 02 — CONTROLLED INPUT New policy entry allocated with pUserId/pContainerId (tag SsfB), ownership transferred to the entry NewPolicyEntry->pUserId=pUserId; NewPolicyEntry->pContainerId=pContainerId; RefNo=2. 03 — PATH BfsCreateStorage/BfsOpenPolicyDirectory fails (e.g. induced pool-allocation failure) The failure path calls BfsDereferencePolicyEntryEx twice; the second (RefNo->0) frees pUserId, pContainerId and the entry. 04 — MISSING CHECK Failure path also ExFreePoolWithTag(pUserId)/ExFreePoolWithTag(pContainerId) (CWE-415) The same buffers freed by the entry dereference are freed again from the local copies -> double free. 05 — PRIMITIVE Double free -> kernel pool corruption -> EoP to SYSTEM The Jul 2025 fix (Feature_3148938554) nulls the local pUserId/pContainerId after ownership transfer so the second free is skipped.

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