摘要
這份報告針對在 Microsoft Windows Admin Center (WAC) 中發現的本機權限提升 (LPE) 漏洞
CVE-2025-64669
提供詳細的技術分析。核心問題源於不安全的目錄權限,特別是
C:\ProgramData\WindowsAdminCenter
資料夾,低權限的一般使用者皆可寫入。此錯誤的 Configuration 讓攻擊者能利用兩種不同的向量進行攻擊:濫用擴充功能移除機制,以及透過 DLL hijacking 在更新程序中利用 Race Condition (TOCTOU) 漏洞。這兩種攻擊路徑都能將權限從低權限使用者提升至
SYSTEM
等級,代表繞過了關鍵的安全性邊界。分析重點在於底層的程式邏輯與執行攻擊所需的技術步驟,藉此全面了解該瑕疵及其對企業基礎架構管理系統的影響。
1. 簡介
Windows Admin Center (WAC) 是一款以瀏覽器為基礎的管理工具,旨在管理 Windows Server、叢集(clusters)、超融合(hyper-converged)基礎架構以及 Windows 10 電腦。由於其作為集中管理閘道的角色,通常需要以高權限執行操作,這使得其核心元件中的任何安全性瑕疵都成為重大隱憂。CVE-2025-64669 被歸類為不當存取控制漏洞,存在於 2411 之前的 WAC 版本中。該漏洞源於檔案系統權限的根本性錯誤設定(Configuration),這是 Windows 環境中常見的 LPE 瑕疵來源 [2] 。這份報告剖析了研究人員發現的兩種主要攻擊方法,重點探討技術機制以及達成權限提升的程式碼。
2. 根本原因分析:不安全的目錄權限
CVE-2025-64669 的基礎在於 WAC 安裝目錄不安全的權限設定,特別是
C:\ProgramData\WindowsAdminCenter
。
ProgramData
目錄通常用於存放非使用者特定的應用程式資料,但授予此子目錄的權限卻允許所有一般使用者寫入。這種不安全的設定違反了最小權限原則,並產生了關鍵的攻擊面,因為放置或修改於此目錄中的任何檔案都可能被高權限的 WAC 程序載入或執行
[1]
。
下圖說明了受影響的元件以及兩種主要的攻擊向量:
\WindowsAdminCenter); B --> C{Insecure Directory
Permissions}; C --> D[Exploitation Path 1:
Uninstall Abuse]; C --> E[Exploitation Path 2:
DLL Hijacking]; D --> F[SYSTEM Privilege]; E --> F; F --> G[Full System
Compromise]; style B fill:#f99,stroke:#333,stroke-width:2px style C fill:#f9f,stroke:#333,stroke-width:2px
圖 1: CVE-2025-64669 攻擊面與攻擊路徑概觀。
3. 攻擊路徑 1:擴充功能移除機制濫用
第一種攻擊向量鎖定 WAC 用於移除擴充功能的機制。WAC 程序通常以高權限執行(例如
NETWORK SERVICE
或
SYSTEM
),其設計是在移除過程中執行位於擴充功能
uninstall
資料夾中的 PowerShell 指令碼。關鍵漏洞在於系統過度信任這個使用者可寫入目錄中的內容
[1]
。
3.1. 移除邏輯的程式碼分析
反編譯 WAC 二進位檔案後,發現負責處理擴充功能移除的 C# 程式碼片段如下
[1]
。此程式碼會找出所有
uninstall
子目錄中所有的
.ps1
檔案,並使用
cmd.exe
啟動 PowerShell 且帶有
AllSigned
執行原則來執行這些檔案。
- // C# snippet from WAC binary (Decompiled)
- // uiDir is the path to the extension's directory, which is under the writable C:\ProgramData\WindowsAdminCenter
- string uninstallPath = Path.Join(uiDir, "uninstall");
- if (Directory.Exists(uninstallPath))
- {
- // Enumerate all PowerShell scripts in the uninstall folder
- foreach (string script in Directory.EnumerateFiles(uninstallPath, "*.ps1"))
- {
- ProcessStartInfo psi = new ProcessStartInfo
- {
- FileName = "cmd.exe",
- // Execute the script with PowerShell, enforcing AllSigned policy
- Arguments = "/c PowerShell -ExecutionPolicy AllSigned -File \"" + script + "\"",
- UseShellExecute = false,
- WindowStyle = ProcessWindowStyle.Hidden
- };
- // Launch the process with elevated privileges
- Process.Start(psi);
- }
- }
該漏洞包含兩個面向:首先,
uninstallPath
位於任何人皆可寫入的
C:\ProgramData\WindowsAdminCenter
內。其次,程式碼隱含地信任該處發現的任何指令碼,只要它經過簽署。攻擊者可以透過以下方式利用此漏洞:
-
建立一個自訂的擴充功能移除資料夾:
C:\ProgramData\WindowsAdminCenter\Extensions<ExtensionName>\uninstall。 - 在資料夾內放置一個惡意但經過合法簽署的 PowerShell 指令碼(或一個濫用已簽署二進位檔的指令碼)。
- 透過 WAC UI 或 API 觸發擴充功能移除,導致高權限的 WAC 程序執行該惡意指令碼。
雖然需要經過簽署的指令碼是一道障礙,但並非無法克服。攻擊者可以利用現有的、可被濫用的已簽署指令碼(例如透過引數),或為了示範目的使用自我簽署的指令碼 [1] 。
4. 攻擊路徑 2:透過 TOCTOU 進行更新程式 DLL Hijacking
第二種,也是更為複雜的向量,是利用 WAC 更新機制,這是另一個以高權限執行的有效(Active)程序。此路徑利用了權限提升攻擊中常見的 Race Condition (TOCTOU) 技術 [3] 。
4.1. DLL 載入與 TOCTOU Race Condition
WAC 更新程序
WindowsAdminCenterUpdater.exe
會從其工作目錄
C:\ProgramData\WindowsAdminCenter\Updater
載入動態連結庫 (DLL)。由於此目錄可由低權限使用者寫入,因此提供了明顯的 DLL hijacking 機會。然而,WAC 程序在啟動更新程序之前,會先對 DLL 執行簽章驗證檢查
[1]
。
攻擊者透過利用驗證(Check)與高權限程序實際載入(Use)DLL 之間的時間差來規避此檢查。程序流程如下:
-
WAC 程序(高權限)對
Updater資料夾中的 DLL 進行簽章檢查。 -
WAC 程序啟動
WindowsAdminCenterUpdater.exe(亦為高權限)。 -
低權限攻擊者使用監控指令碼偵測到
WindowsAdminCenterUpdater.exe的啟動。 -
攻擊者的指令碼立即將惡意的、未經簽署的 DLL(例如修改過的
user32.dll)複製到Updater資料夾中,替換掉原始檔案或預留位置檔案。 -
現在以
SYSTEM
權限執行的
WindowsAdminCenterUpdater.exe程序,從其工作目錄載入惡意 DLL,因為它對 Local Path 的信任程度高於系統 Path [1] 。
4.2. TOCTOU 攻擊的技術實作
攻擊者使用簡單的 PowerShell 指令碼來監控目標程序的建立,這是 Windows LPE 攻擊中常用的技術
[4]
。該指令碼利用 Windows Management Instrumentation (WMI) 註冊一個事件接聽程式,以監控
WindowsAdminCenterUpdater.exe
程序。一旦觸發事件,指令碼就會執行 Payload —— 複製惡意 DLL。
- # PowerShell script for TOCTOU race condition
- # This script is run by the low-privileged user
- Register-WmiEvent -Query "SELECT * FROM __InstanceCreationEvent WITHIN 0.1
- WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'WindowsAdminCenterUpdater.exe'" -Action {
- # Action block executes immediately upon detection of the process creation
- # Copies the malicious DLL from a user-writable location (e.g., C:\Users\Public)
- # to the WAC Updater directory, which is about to be used by the elevated process.
- Copy-Item "C:\Users\Public\user32.dll" "C:\ProgramData\WindowsAdminCenter\Updater\user32.dll" -Force
- }
註解:
Register-WmiEvent
指令程式會建立一個持續性的事件訂閱。
-Query
參數使用 WQL (WMI Query Language) 語句來監控名為
WindowsAdminCenterUpdater.exe
的新程序建立。
WITHIN 0.1
子句指定了 0.1 秒的輪詢間隔,這對於贏得 Race Condition 至關重要。
-Action
區塊包含執行 DLL 替換的程式碼,確保惡意程式碼在高權限程序載入其相依性之前就定位
[1]
。
此方法非常有效,因為監控指令碼本身不需要高權限,而惡意 DLL 的最終執行是發生在 SYSTEM 帳戶的 Context 中。
5. 緩解措施與結論
此漏洞凸顯了安全檔案系統權限的重要性,以及軟體設計中 TOCTOU Race Condition 的危險性。針對 CVE-2025-64669 的主要緩解措施是修正
C:\ProgramData\WindowsAdminCenter
目錄上不安全的權限,將寫入 Access 限制在僅限高權限帳戶。Microsoft 已發布更新以解決此問題
[1]
。
此漏洞的攻擊過程可歸納為一連串事件,如下方流程圖所示:
圖 2: CVE-2025-64669 詳細攻擊流程圖。
總結來說,CVE-2025-64669 是一個強而有力的提醒,即便是微小的 Configuration 錯誤(例如過度放寬的目錄存取),也可能與邏輯瑕疵(如對本機目錄的隱含信任或 TOCTOU Race Condition)串聯在一起,進而導致整個系統淪陷。持續的安全性驗證並遵守安全編碼實務,特別是涉及檔案系統存取與程序執行時,對於防止此類高影響力的 LPE 漏洞至關重要 [5] 。