摘要

這份報告針對在 Microsoft Windows Admin Center (WAC) 中發現的本機權限提升 (LPE) 漏洞 CVE-2025-64669 提供詳細的技術分析。核心問題源於不安全的目錄權限,特別是 C:\ProgramData\WindowsAdminCenter 資料夾,低權限的一般使用者皆可寫入。此錯誤的 Configuration 讓攻擊者能利用兩種不同的向量進行攻擊:濫用擴充功能移除機制,以及透過 DLL hijacking 在更新程序中利用 Race Condition (TOCTOU) 漏洞。這兩種攻擊路徑都能將權限從低權限使用者提升至 SYSTEM 等級,代表繞過了關鍵的安全性邊界。分析重點在於底層的程式邏輯與執行攻擊所需的技術步驟,藉此全面了解該瑕疵及其對企業基礎架構管理系統的影響。

您的 Windows Admin Center 安全嗎?解密 CVE-2025-64669 LPE 漏洞與防禦策略 | 資訊安全新聞

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]

下圖說明了受影響的元件以及兩種主要的攻擊向量:

graph TD A[Low-Privileged User] -->|Writable Access| B(C:\ProgramData
\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 執行原則來執行這些檔案。

  1. // C# snippet from WAC binary (Decompiled)
  2. // uiDir is the path to the extension's directory, which is under the writable C:\ProgramData\WindowsAdminCenter
  3. string uninstallPath = Path.Join(uiDir, "uninstall");
  4. if (Directory.Exists(uninstallPath))
  5. {
  6. // Enumerate all PowerShell scripts in the uninstall folder
  7. foreach (string script in Directory.EnumerateFiles(uninstallPath, "*.ps1"))
  8. {
  9. ProcessStartInfo psi = new ProcessStartInfo
  10. {
  11. FileName = "cmd.exe",
  12. // Execute the script with PowerShell, enforcing AllSigned policy
  13. Arguments = "/c PowerShell -ExecutionPolicy AllSigned -File \"" + script + "\"",
  14. UseShellExecute = false,
  15. WindowStyle = ProcessWindowStyle.Hidden
  16. };
  17. // Launch the process with elevated privileges
  18. Process.Start(psi);
  19. }
  20. }

該漏洞包含兩個面向:首先, uninstallPath 位於任何人皆可寫入的 C:\ProgramData\WindowsAdminCenter 內。其次,程式碼隱含地信任該處發現的任何指令碼,只要它經過簽署。攻擊者可以透過以下方式利用此漏洞:

  1. 建立一個自訂的擴充功能移除資料夾: C:\ProgramData\WindowsAdminCenter\Extensions<ExtensionName>\uninstall
  2. 在資料夾內放置一個惡意但經過合法簽署的 PowerShell 指令碼(或一個濫用已簽署二進位檔的指令碼)。
  3. 透過 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 之間的時間差來規避此檢查。程序流程如下:

  1. WAC 程序(高權限)對 Updater 資料夾中的 DLL 進行簽章檢查。
  2. WAC 程序啟動 WindowsAdminCenterUpdater.exe (亦為高權限)。
  3. 低權限攻擊者使用監控指令碼偵測到 WindowsAdminCenterUpdater.exe 的啟動。
  4. 攻擊者的指令碼立即將惡意的、未經簽署的 DLL(例如修改過的 user32.dll )複製到 Updater 資料夾中,替換掉原始檔案或預留位置檔案。
  5. 現在以 SYSTEM 權限執行的 WindowsAdminCenterUpdater.exe 程序,從其工作目錄載入惡意 DLL,因為它對 Local Path 的信任程度高於系統 Path [1]

4.2. TOCTOU 攻擊的技術實作

攻擊者使用簡單的 PowerShell 指令碼來監控目標程序的建立,這是 Windows LPE 攻擊中常用的技術 [4] 。該指令碼利用 Windows Management Instrumentation (WMI) 註冊一個事件接聽程式,以監控 WindowsAdminCenterUpdater.exe 程序。一旦觸發事件,指令碼就會執行 Payload —— 複製惡意 DLL。

  1. # PowerShell script for TOCTOU race condition
  2. # This script is run by the low-privileged user
  3. Register-WmiEvent -Query "SELECT * FROM __InstanceCreationEvent WITHIN 0.1
  4. WHERE TargetInstance ISA 'Win32_Process' AND TargetInstance.Name = 'WindowsAdminCenterUpdater.exe'" -Action {
  5. # Action block executes immediately upon detection of the process creation
  6. # Copies the malicious DLL from a user-writable location (e.g., C:\Users\Public)
  7. # to the WAC Updater directory, which is about to be used by the elevated process.
  8. Copy-Item "C:\Users\Public\user32.dll" "C:\ProgramData\WindowsAdminCenter\Updater\user32.dll" -Force
  9. }

註解: 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]

此漏洞的攻擊過程可歸納為一連串事件,如下方流程圖所示:

flowchart TD A[Insecure Permissions on WAC Directory] --> B{Attacker Chooses Path}; B --> C[Path 1: Uninstall Abuse]; B --> D[Path 2: Updater DLL Hijacking]; C --> E[Place Signed PS Script in Uninstall Folder]; E --> F[Trigger Uninstall via WAC UI/API]; F --> G[WAC Process Executes PS Script as SYSTEM]; D --> H[Setup WMI Event Listener for Updater Process]; H --> I[Trigger Update via WAC API]; I --> J[WAC Launches WindowsAdminCenterUpdater.exe]; J --> K[WMI Action: Replace DLL with Malicious user32.dll]; K --> L[Updater Process Loads Malicious DLL as SYSTEM]; G & L --> M[Privilege Escalation to SYSTEM];

圖 2: CVE-2025-64669 詳細攻擊流程圖。

總結來說,CVE-2025-64669 是一個強而有力的提醒,即便是微小的 Configuration 錯誤(例如過度放寬的目錄存取),也可能與邏輯瑕疵(如對本機目錄的隱含信任或 TOCTOU Race Condition)串聯在一起,進而導致整個系統淪陷。持續的安全性驗證並遵守安全編碼實務,特別是涉及檔案系統存取與程序執行時,對於防止此類高影響力的 LPE 漏洞至關重要 [5]