Black Hat Europe 2025 | Pwning .NET Framework Applications Through HTTP Client Proxies And WSDL
三句話摘要
通過 WSDL 導入和 SOAP 代理無驗證的協議處理,實現 .NET 框架應用的任意文件寫入與遠程代碼執行。 .NET Framework 的 HTTP 代理設計缺陷與 WSDL 導入的無驗證機制形成系統性漏洞,影響所有依賴此功能的應用程序,Microsoft 拒絕從根本上修復,使防守責任完全落在開發者肩上。 無協議驗證的 .NET 設計缺陷:HttpWebClientProtocol 基類在獲取 Web 請求物件時,使用 as 運算符進行類型轉換。此運算符在轉換失敗時返回 null 而非拋出異常,使得當 SOAP 代理被強制使用 file:// 協議時,FileWebRequest 物件能夠無聲地被接受,進而執行文件寫入而非網路通信。
重點整理
重點- 1
無協議驗證的 .NET 設計缺陷:HttpWebClientProtocol 基類在獲取 Web 請求物件時,使用 as 運算符進行類型轉換。此運算符在轉換失敗時返回 null 而非拋出異常,使得當 SOAP 代理被強制使用 file:// 協議時,FileWebRequest 物件能夠無聲地被接受,進而執行文件寫入而非網路通信。
- 2
WSDL 導入的攻擊表面擴展:Service Description Importer 類不對 WSDL 內的服務地址 URL 進行協議驗證,允許攻擊者透過惡意 WSDL 檔案直接控制生成的代理代碼所使用的協議。應用編譯並加載此代碼後,會自動將 SOAP 請求寫入本地檔案系統而非發送到網路。
- 3
分層漏洞利用鏈與變通方案:完整 RCE 需四個條件(應用使用 WSDL 導入、方法名可控、參數可控、參數反序列化)。即使某些條件缺失,也可透過 XML 命名空間注入(namespace smuggling)在 WSDL 命名空間 URL 查詢字符串中嵌入 Payload,繞過限制實現代碼執行。
- 4
跨產品影響與修復拒絕:漏洞影響範圍包括 Barracuda Service Center、Avanti Endpoint Manager、PowerShell、SQL Server Integration Services 等。Microsoft 拒絕從根本上修復 .NET Framework,僅建議用戶驗證輸入,導致此風險成為系統性威脅。
實用技巧與重點
乾貨- 漏洞涉及的核心類與方法
- WebRequest.Create() — 根據 URL 協議返回不同物件(HttpWebRequest、FtpWebRequest、FileWebRequest)
- HttpWebClientProtocol — SOAP HTTP 客戶端代理基類,調用 GetWebRequest()
- Service Description Importer — 從 WSDL 生成並編譯 C# 代理代碼
- XMLSerializer — 用於反序列化 SOAP 參數
- 漏洞利用的四層檢查清單
- 應用是否使用 Service Description Importer 導入 WSDL 且不驗證協議
- 攻擊者是否可控制 SOAP 方法名稱
- 攻擊者是否可控制 SOAP 方法的輸入參數值
- 應用是否對參數進行反序列化(使用無參構造函數與 public setters)
- 受影響的產品與 CVE
- Barracuda Service Center(無認證 RCE,CVSS 8.8,已修補)
- Avanti Endpoint Manager(需認證,CVSS 8.8,已修補)
- Umbraco HCMS
- Microsoft PowerShell(拒絕修復)
- Microsoft SQL Server Integration Services(拒絕修復)
- Microsoft SharePoint
- Payload 技術
- ASPX Web Shell:`<%@ Page Language="C#" %><% Process.Start("cmd","/c calc"); %>`
- CSHTML 注入:使用 `@{}` 語法嵌入 C# 代碼(需應用支援 Razor 引擎)
- 命名空間注入:在 WSDL 命名空間中透過查詢字符串注入(如 `http://namespace?@{Process.Start("calc")}`,不可用雙引號)
- PowerShell Profile:寫入 `$PROFILE` 路徑,在 PowerShell 啟動時執行
- NTLM 中繼:使用 `file://\\attacker-server/share` 格式觸發認證
- 檔案寫入的內容限制
- SOAP 消息體中的 `< > & "` 等字符被 XML 編碼
- 命名空間方法中無法使用雙引號(單引號可用)
- 無法直接寫入 ASP/ASPX 標籤括號,需透過字符串函數重建
- 檔案寫入的優勢與限制
- 優勢:完全控制寫入路徑、無副檔名檢驗、覆蓋現有檔案
- 限制:寫入內容受 SOAP 格式制約、部分字符被編碼、無法直接控制完整檔案結構
結論
結論“.NET Framework 的 HTTP 代理設計缺陷與 WSDL 導入的無驗證機制形成系統性漏洞,影響所有依賴此功能的應用程序,Microsoft 拒絕從根本上修復,使防守責任完全落在開發者肩上。”
完整解析
詳細.NET Framework 在 HTTP 請求處理上存在一個基層的設計缺陷。WebRequest.Create() 方法會根據 URL 的協議頭(http、ftp、file)返回不同型別的物件,分別負責不同協議的通信。原本這是合理的設計,但當代理類使用不安全的 as 運算符進行類型轉換時,問題出現了。與直接的 cast 強制轉換不同,as 運算符在轉換失敗時並不拋出異常,而是返回 null 值。這意味著如果攻擊者能控制傳入代理的 URL,就可以強制應用使用 FileWebRequest 物件執行文件寫入,而非預期的 HTTP 通信。
演講者在 2024 年審計 Microsoft SharePoint 時首次發現了這個漏洞的跡象。但真正的突破點發生在 2025 年 7 月,當他審計 Barracuda Service Center 時,發現該產品暴露了一個名為 "Invoke Remote Method" 的無認證 SOAP API 端點。這個端點接受三個關鍵參數:URL(指向 WSDL 檔案的位置)、WSDL 檔案本身、以及要調用的方法名稱。應用程序的處理流程是:首先從提供的 URL 下載 WSDL;然後使用 .NET 的 Service Description Importer 類將 WSDL 導入;根據 WSDL 自動生成對應的 C# 代理代碼;將代碼編譯成 DLL;最後透過反射機制調用指定的 SOAP 方法。關鍵漏洞在於 Service Description Importer 對 WSDL 中指定的服務地址 URL 完全沒有驗證,這使得攻擊者可以在 WSDL 的服務定義區段中指定 file:// 協議而不是標準的 http://。
最終生成的代理代碼會原封不動地包含該協議。當應用程式嘗試執行原本應是 HTTP POST 請求的 SOAP 方法時,實際上變成了向指定路徑寫入檔案的操作。SOAP 消息的內容(包括方法名稱、參數值等)會被序列化為 XML 格式,直接寫入目標檔案。演講者在 Barracuda 的演示中,透過 WSDL 定義一個名為 POC 的方法,接受一個名為 script 的字符串參數,其預設值為一個完整的 ASPX Web Shell 代碼。由於 Barracuda 允許攻擊者完全控制方法名、參數名與參數值,這些內容都會被寫入檔案,形成一個可執行的 Web Shell。
對於無法完全控制參數的應用程序(如 Avanti Endpoint Manager,其中方法名與參數是硬編碼的),演講者發現了一個巧妙的變通方案。WSDL 中的命名空間屬性必須是有效的 URL 格式,但 .NET 允許在 URL 中包含查詢字符串與特殊字符。攻擊者可以透過在命名空間 URL 的查詢字符串中嵌入 C# 或 PowerShell 代碼(使用單引號避開 XML 的雙引號編碼),這些內容會被反射到生成的 SOAP 消息體中。即使方法與參數無法控制,命名空間的內容仍會被寫入檔案,同樣能實現代碼執行。
PowerShell 的風險尤其值得注意。其 New-WebServiceProxy 命令會根據提供的 WSDL 生成代理物件。當使用 file:// 協議的惡意 WSDL 時,PowerShell 會將 SOAP 消息寫入本地檔案。攻擊者可以利用這一點寫入 PowerShell Profile 檔案(位於 `$PROFILE` 變數指向的路徑),該檔案在每次 PowerShell 啟動時自動執行。這對運行提升權限 PowerShell 的用戶特別危險。
當演講者向 Microsoft 報告此漏洞時,Microsoft 的回應令人失望。公司拒絕修復 .NET Framework 層面的根本問題,聲稱這是「預期設計行為」,並建議用戶不要從不受信任的來源消費 WSDL 檔案。即便演講者提供了 PowerShell、SQL Server Integration Services 等微軟自有產品中的具體漏洞案例,Microsoft 仍未採取行動修復。最終,Microsoft 僅在文檔中添加了一行警告,指出 Service Description Importer 不應與不受信任的輸入一起使用。這實質上將安全責任轉移給了開發者,而不是從根本上消除威脅。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

