CVE-2025-54105 — Microsoft Brokering File System Elevation of Privilege Vulnerability
Executive Summary
Concurrent execution using shared resource with improper synchronization ('race condition') in Microsoft Brokering File System 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 11 Version 24H2 for ARM64-based Systems 5065426 (Security Update) 5065474 (SecurityHotpatchUpdate) Important Elevation of Privilege 5063878 5064010 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.6584 10.0.26100.6508 Yes None Windows 11 Version 24H2 for x64-based Systems 5065426 (Security Update) 5065474 (SecurityHotpatchUpdate) Important Elevation of Privilege 5063878 5064010 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.6584 10.0.26100.6508 Yes None Windows Server 2022, 23H2 Edition (Server Core installation) | 5065425 (Security Update) |
Important | Elevation of Privilege | Yes |
Patches
| Article | Type | Restart |
|---|---|---|
5065425 |
Security Update | Yes |
Patch Diff
Race condition (CWE-362) in the Microsoft Brokering File System (bfs.sys), reachable from low-privileged/AppContainer callers -> local EoP. BfsCheckAndReleaseIdlePolicy walks the policy set and releases idle reference-counted policy entries (BfsDereferencePolicyEntryEx) while holding only a SHARED push-lock (ExAcquirePushLockSharedEx). Because a shared lock allows concurrent holders, two threads can observe the same entry as idle and both drop its reference (or mutate the policy list simultaneously) - a race that double-releases/frees a policy entry still in use, i.e. a race-based use-after-free. IN-HOUSE ghidriff of bfs.sys 10.0.26100.4946 -> .6584 (Sep 9 2025) confirms the fix: gated behind CFR flag Feature_3434922298, the lock is upgraded from shared to EXCLUSIVE (ExAcquirePushLockExclusiveEx) so only one thread performs the check-and-release at a time, closing the race window. With the flag disabled the patched binary still takes the shared lock. This is the race sibling of CVE-2025-53142 (bfs.sys policy-entry UAF, Aug 2025, Feature_1122292024, same reporter). Credit: ChenJian (Sea Security Orca Team).
| Function | Address | Change | Note |
|---|---|---|---|
BfsCheckAndReleaseIdlePolicy |
code change (only changed function) |
code (shared->exclusive push-lock upgrade, CFR-gated) | Pre: KeEnterCriticalRegion(); ExAcquirePushLockSharedEx(param_1,0) around the walk that calls BfsDereferencePolicyEntryEx on idle entries. Post (Feature_3434922298 enabled): ExAcquirePushLockExclusiveEx(param_1,0) instead of shared, with the release/iteration restructured under the exclusive lock. Serializes the idle-policy check-and-release so concurrent threads can no longer race the same entry's release. |
Feature_3434922298 |
new flag |
added (CFR gate) | New Controlled Feature Rollout flag introduced by this patch; selects the exclusive-lock (fixed) path in BfsCheckAndReleaseIdlePolicy. Both shared and exclusive branches ship in .6584. |
Attack Path
Idle Brokering File System policy entries are released under a shared lock, so two threads can race the same release
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