CVE-2025-59511 — Windows WLAN Service Elevation of Privilege Vulnerability
Executive Summary
External control of file name or path in Windows WLAN Service allows an authorized attacker to elevate privileges locally.
Overview
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
EPSS Score
Affected Products
| Product | KB Article | Severity | Impact | Restart Required |
|---|---|---|---|---|
| Windows 10 Version 1809 for 32-bit Systems | 5068791 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 1809 for x64-based Systems | 5068791 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for 32-bit Systems | 5068781 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for ARM64-based Systems | 5068781 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 21H2 for x64-based Systems | 5068781 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for 32-bit Systems | 5068781 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for ARM64-based Systems | 5068781 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 10 Version 22H2 for x64-based Systems | 5068781 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 23H2 for ARM64-based Systems | 5068865 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 23H2 for x64-based Systems | 5068865 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows 11 Version 24H2 for ARM64-based Systems 5068861 (Security Update) 5068966 (Security Hotpatch Update) Important Elevation of Privilege 5066835 Base: 7.8 Temporal: 6.8 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 10.0.26100.7171 10.0.26100.7092 Yes None Windows 11 Version 24H2 for x64-based Systems 5068861 (Security Update) 5068966 (Security Hotpatch Update) Important Elevation of Privilege 5066835 Base: 7.8 Temporal: 6.8 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 10.0.26100.7171 10.0.26100.7092 Yes None Windows 11 Version 25H2 for ARM64-based Systems 5068861 (Security Update) 5068966 (Security Hotpatch Update) Important Elevation of Privilege 5066835 Base: 7.8 Temporal: 6.8 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 10.0.26200.7171 10.0.26200.7092 Yes None Windows 11 Version 25H2 for x64-based Systems 5068861 (Security Update) 5068966 (Security Hotpatch Update) Important Elevation of Privilege 5066835 Base: 7.8 Temporal: 6.8 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 10.0.26200.7171 10.0.26200.7092 Yes None Windows Server 2019 | 5068791 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2019 (Server Core installation) | 5068791 (Security Update) |
Important | Elevation of Privilege | Yes |
| Windows Server 2022 5068787 (Security Update) 5068840 (Security Hotpatch Update) Important Elevation of Privilege 5066782 Base: 7.8 Temporal: 6.8 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 10.0.20348.4405 10.0.20348.4346 Yes None Windows Server 2022 (Server Core installation) 5068787 (Security Update) 5068840 (Security Hotpatch Update) Important Elevation of Privilege 5066782 Base: 7.8 Temporal: 6.8 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 10.0.20348.4405 10.0.20348.4346 Yes None Windows Server 2022, 23H2 Edition (Server Core installation) | 5068779 (Security Update) |
Important | Elevation of Privilege | Yes |
Patches
| Article | Type | Restart |
|---|---|---|
5068791 |
Security Update | Yes |
5068781 |
Security Update | Yes |
5068865 |
Security Update | Yes |
5068779 |
Security Update | Yes |
Patch Diff
Registry-symlink local EoP (CWE-59 / external control of path) in the WLAN AutoConfig service wlansvc.dll (runs as SYSTEM). The profile-sync trigger functions CdsTriggerSyncIfNeededForLoggedInUsers, CdsTriggerSyncWithProfileDeletion and CdsTriggerSyncIfProfileEligible query the session user's token via UMgrQueryUserToken and then call Windows::Internal::WiFiCloudStore::IsSyncNeededForUser with that token WITHOUT impersonating it - so the registry work runs under SYSTEM. Inside IsSyncNeededForUser, keys are opened by name under HKLM\SOFTWARE\Microsoft\WlanSvc\ProfileSync\<SID> (OpenGenericSyncBaseKeyForUser 'Profiles'/'Cost', gated by WlanSvcTaskBootstrapped==1, creating an NLM/Irrelevant subkey). A standard user owns that subtree, so they replace the Profiles/Cost/NLM path components with registry symbolic links into protected system hives; SYSTEM then follows them, directing privileged registry operations at attacker-chosen targets -> EoP. IN-HOUSE Ghidra decompilation diff of wlansvc.dll 10.0.26100.7019 -> .7171 (Nov 11 2025; 3 MB analyzed via a persisted project) confirms the fix: all three CdsTriggerSync* functions now DuplicateToken the user token and wil::impersonate_token_nothrow it before the operation and RevertImpersonateToken after (PRE 0 -> POST 22 impersonation calls), so registry access is evaluated with the user's rights and symlinks into system paths fail with access-denied; token/impersonation failure halts the operation. Unconditional fix. Credit: t0zhang.
| Function | Address | Change | Note |
|---|---|---|---|
CdsTriggerSyncIfNeededForLoggedInUsers |
code change |
code (impersonation added before IsSyncNeededForUser) | Pre: UMgrQueryUserToken -> IsSyncNeededForUser(hObject) with no impersonation (SYSTEM). Post: DuplicateToken(hObject, SecurityImpersonation) + wil::impersonate_token_nothrow before IsSyncNeededForUser, RevertImpersonateToken after; halts if token/impersonation fails. Confirmed by our decompilation (impersonation calls PRE 0 -> POST 22 across the CdsTriggerSync* set). |
CdsTriggerSyncWithProfileDeletion |
code change |
code (same impersonation fix) | Shares the same logic; patched to impersonate the user token before the WiFiCloudStore sync operations. |
CdsTriggerSyncIfProfileEligible |
code change |
code (same impersonation fix) | Shares the same logic; patched to impersonate the user token before the WiFiCloudStore sync operations. |
Windows::Internal::WiFiCloudStore::IsSyncNeededForUser |
sink (unchanged) |
vulnerable sink | Opens per-user ProfileSync keys by name (OpenGenericSyncBaseKeyForUser 'Profiles'/'Cost'); pre-patch it ran under SYSTEM so attacker registry symlinks were followed. The fix is upstream (impersonate before calling it). |
Attack Path
WLAN AutoConfig handles the user's profile-sync registry keys under SYSTEM without impersonation, so user-planted symlinks are followed as SYSTEM
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.