CVE-2025-54103 — Windows Management Service Elevation of Privilege Vulnerability
Executive Summary
Use after free in Windows Management Services allows an unauthorized attacker to elevate privileges locally.
Overview
CVSS Vector
CVSS:3.1/AV:L/AC:H/PR:N/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 21H2 for 32-bit Systems | 5065429 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for ARM64-based Systems | 5065429 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for x64-based Systems | 5065429 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for 32-bit Systems | 5065429 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for ARM64-based Systems | 5065429 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for x64-based Systems | 5065429 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 22H2 for ARM64-based Systems | 5065431 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 22H2 for x64-based Systems | 5065431 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 23H2 for ARM64-based Systems | 5065431 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 23H2 for x64-based Systems | 5065431 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 24H2 for ARM64-based Systems 5065426 (Security Update) 5065474 (SecurityHotpatchUpdate) Important Elevation of Privilege 5063878 5064010 Base: 7.4 Temporal: 6.4 Vector: CVSS:3.1/AV:L/AC:H/PR:N/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.4 Temporal: 6.4 Vector: CVSS:3.1/AV:L/AC:H/PR:N/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 |
|---|---|---|
5065429 |
Security Update | Yes |
5065431 |
Security Update | Yes |
5065425 |
Security Update | Yes |
Patch Diff
Use-after-free (CWE-416, race-triggered) in the Windows Management Service windows.management.service.dll (Modern Deployment / Autopilot, runs as SYSTEM), local elevation of privilege to SYSTEM (Important, AV:L, AC:H race, CVSS 7.4). ModernDeployment::Autopilot::Core::AutopilotSurfaceHubHelper configures device properties via asynchronous operations ConfigurePropertiesAsync / ApplyPropertiesAsync that operate on a com_ptr_t<IDeviceManagementUtilities>. PRE (.5074): the async operation was built with MakeAsyncHelper / MakeOpLambda and the owning com_ptr to IDeviceManagementUtilities was released when the synchronous call returned - before the async continuation finished using it - so a concurrent teardown/completion could free the utilities object while the async operation still referenced it (race UAF). Because the service runs as SYSTEM and the operation is locally reachable, the freed-object reuse is a local EoP to SYSTEM. Diff of windows.management.service.dll 10.0.26100.5074 -> .6584 (Sep 9 2025, KB5065426) confirms the fix: gated behind CFR flag Feature_3628908857, both ConfigurePropertiesAsync and ApplyPropertiesAsync are reworked from MakeAsyncHelper+MakeOpLambda (non-owning; com_ptr destructed at scope exit) to MakeAsyncAction with an owning lambda (lambda_5875ca7f...) that has its own ctor/dtor and holds a strong com_ptr reference to the utilities object for the whole async action, keeping it alive until the operation completes.
| Function | Address | Change | Note |
|---|---|---|---|
AutopilotSurfaceHubHelper::ApplyPropertiesAsync |
code change |
code (async op now holds a strong com_ptr for its lifetime, CFR-gated) | Pre: MakeAsyncHelper + MakeOpLambda; com_ptr_t<IDeviceManagementUtilities> released at synchronous scope exit while the async continuation still used it. Post (Feature_3628908857): MakeAsyncAction<WRL::AsyncCausalityOptions<&ApplyPropertiesAsync...>> with an owning lambda (lambda_5875ca7f...) that keeps a strong reference for the whole action. |
AutopilotSurfaceHubHelper::ConfigurePropertiesAsync |
code change |
code (async op now holds a strong com_ptr for its lifetime, CFR-gated) | Same fix as ApplyPropertiesAsync: switched from non-owning MakeOpLambda to an owning MakeAsyncAction lambda holding the IDeviceManagementUtilities com_ptr alive across the async operation. |
MakeOpLambda / COperationLambdaVar / ~com_ptr_t<IDeviceManagementUtilities> |
code change |
code (async operation-lambda / object-lifetime machinery reworked) | The operation-lambda helpers and the IDeviceManagementUtilities com_ptr destructor path were reworked to move ownership into the async action lambda. |
Feature_3628908857 |
gate |
added (CFR gate) | CFR flag gating the owning-lambda async lifetime; the original non-owning MakeOpLambda path still ships when the flag is disabled. |
Attack Path
A race frees the device-management utilities object while an Autopilot async property operation still uses it
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
Taewoo (Tae_ω02)