AI 黑客 - 黑客如何在網路攻擊中使用人工智慧

立即閱讀
我們利用人工智慧進行網站翻譯,雖然我們力求準確性,但它們可能並不總是 100% 精確。感謝您的理解。

SVG 揭秘:瞭解 XXE 漏洞並保護您的代碼庫

by Luan Pham,助理滲透測試員
分享此文章

圖像檔通常被認為是安全檔案,並且通常在處理時沒有意識到潛在的安全問題。這些圖像檔,尤其是SVG檔,是發起危險攻擊的常見攻擊媒介,例如跨站腳本 (XSS) 或 XML 外部實體 (XXE) 注入。與 XSS 攻擊相比,XXE 注入攻擊不會影響用戶端,但可能會顯著影響伺服器端,從而導致一些嚴重影響。 在這篇博文中,我們將專門透過 可縮放向量圖形 (SVG) 攻擊媒介來探討 XXE 攻擊的本質,討論一個真實世界的示例,並提供緩解策略 OPSWAT 產品。 

背景資訊

在深入研究漏洞之前,我們將首先檢查 XML、SVG 檔格式以及 XXE 注入技術背後的根本原因。 

XML 檔案格式

XML(可擴充標記語言)是一種獨立於平臺的檔案格式,用於儲存和交換結構化資料。XML 支援分層結構,使其成為表示複雜資料關係的理想選擇。XML 格式的資料以與 HTML 相同的方式組織為標記、屬性和內容。但是,XML 是高度可客製化和可擴展的,允許使用者定義其標記和屬性以滿足其要求。下圖顯示了 IT XML 格式的部門。 

XML 代碼片段顯示員工詳細資訊 IT 部門結構

XML 實體

在 XML 中,實體是資料的佔位元,允許您將文字或整個檔案嵌入到當前檔案中。在語法上,XML 中的實體由與號 (&) 和分號 (;) 括起來。在下面的範例中,在檔案類型定義中定義了兩個實體,並引用了 XML 檔的內容。這兩個實體之間的區別在於,內部實體是在當前檔案中定義和引用的,而外部實體的內容來自外部檔案。解析和解析實體後,實體將替換為相應的資料。 

具有內部和外部實體(包括問候語)的 XML 檔案的代碼範例
亮點顯示實體和內容的結構和用法的簡化 XML 代碼範例

SVG 檔案格式

SVG(可縮放向量圖形)是一種通用的檔案格式,廣泛用於 Web 開發、圖形設計和資料可視化。與 JPEG 或 PNG 等傳統圖像格式不同,SVG 使用 XML 格式來描述二維向量圖形。具體來說,SVG 圖像由直線、曲線和多邊形等幾何形狀組成,由數學方程式而不是單個像素定義。因此,SVG 圖形可以無限縮放而不會損失品質,使其成為回應式網頁設計和高解析度顯示的理想選擇。由於 SVG 格式的 XML 性質,它還為 XML 相關漏洞提供了潛在的攻擊媒介。 

顯示具有文字內容的基本 SVG 檔案結構的範例圖像

XXE注射技術及影響

XXE注入技術濫用了外部實體解析機制。具體來說,當解析器遇到外部實體時,它將根據資源檔案的類型獲取相應的內容。  

如果資源檔是本地的,則解析器將檢索檔案的內容,並將實體替換為相應的資料。這將允許攻擊者顯示敏感資料,例如伺服器配置、憑據等。為了成功利用此漏洞,攻擊者聲明了一個外部實體,該實體引用了敏感檔案的內容,例如 /etc./password。 

但是,如果資源是遠端資源或內部服務,則分析器將嘗試透過請求定義的URL來獲取資料。此漏洞可用於執行伺服器端請求偽造 (SSRF)。在這種情況下,攻擊者不會引用本地檔,而是將有效負載更改為易受攻擊服務的 URL,以代表伺服器請求。 

透過 SVG 檔案處理不當的 XXE 攻擊:案例研究 

我們將研究一個真實案例的 XXE,即 SVGLIB 庫,最高版本為 0.9.3。該漏洞於 2020 年發現並分配了 CVE-2020-10799。我們將首先檢查庫的流程,分析易受攻擊的代碼片段,最後透過SVG到PNG轉換服務證明利用。目標是使用易受攻擊的SVGLIB版本進行轉換的自行實現的Web應用程式。 

svglib 軟體包

svglib 是一個純 Python 庫,旨在使用 Report Lab 開源工具包將 SVG 格式轉換為其他格式,例如 PNG、JPG、PDF 等。由於 SVG 檔使用 XML 格式,因此解析和處理 XML 也是庫主流程的相關部分。庫中的 3 個主要步驟如下: 

流程圖說明瞭從解析 SVG 檔到將其轉換為另一種格式的步驟

開發 

該漏洞存在於SVG檔解析過程中,如果配置錯誤,將泄露伺服器上的敏感資料,並可能導致SSRF漏洞。進一步檢查 svglib 包的原始程式碼,XXE 漏洞是由於在載入 SVG 檔時使用預設配置來解析和處理 XML 格式所致。該包使用 lxml 包,其中 XMLParser的resolve_實體屬性的預設值為 True。  

代碼差異顯示 Python 函數中用於載入具有實體解析選項的 SVG 檔的更改
在安全上下文中使用SVG檔的XXE攻擊過程流程圖

修復

問題的根本原因是不安全的 XML 解析,它在 svglib 庫和 lxml 依賴項的一部分中未正確實現。因此,使用此庫的易受攻擊版本可能會導致敏感資訊洩露、伺服器端請求偽造,甚至潛在的遠端代碼執行,具體取決於部署的環境和應用程式的功能。從第三方庫引入的漏洞對於大型應用程式的安全性來說是一個嚴重的問題,因為它們的依賴項可能很複雜且不透明。  

MetaDefender Software Supply Chain

OPSWAT MetaDefender 軟體 Supply Chain 透過多種技術的組合,提供擴展的可見性和針對供應鏈風險的強大防禦。 OPSWAT 軟體物料清單 (SBOM) 有助於瞭解開源第三方軟體包,並識別容器映像每一層下存在的軟體依賴項、漏洞或其他潛在風險。整合了30多個防病毒引擎, Multiscanning技術 的惡意軟體檢測率達到99.99%以上。此外, 主動式 DLP(資料外洩防護)技術可 識別密碼、機密、令牌、 API 金鑰或原始程式碼中保留的其他敏感資訊。借助我們的零信任威脅檢測和防禦技術,您的軟體開發生命週期 (SDLC) 可以免受惡意軟體和漏洞的侵害,從而增強應用程式的安全性和合規性。  

OPSWAT MetaDefender 軟體 Supply Chain 顯示漏洞和威脅的儲存庫掃描結果的儀錶板
OPSWAT MetaDefender 軟體供應鏈安全報告的 requirements.txt 檔案顯示未偵測到任何威脅或秘密

MDSSC 檢測在 svglib 中找到的 CVE。它還會在SBOM報告中標記 CVE 嚴重級別,並識別易受攻擊的軟體版本。

MetaDefender Core - Deep CDR

使漏洞利用成為可能的另一個原因是應用程式處理注入了惡意有效負載的 SVG 檔。因此,如果在輸入轉換服務之前對圖像檔進行清理,則有效負載將被消除,從而防止攻擊發生。檔案無毒化 (CDR) 技術MetaDefender Core 透過清理和重建檔來防止已知和未知的檔案傳播威脅。支援160多種常見檔案類型和數百種檔重建選項, OPSWAT的Deep CDR(檔案無毒化) 消除了任何潛在的嵌入式威脅,確保經過清理的檔保持完全可用且內容安全。 

SVG 格式的可編輯 XML 代碼,DOCTYPE 元素中概述了 XXE 漏洞
惡意 SVG 檔
SVG 格式的 XML 代碼的乾淨版本,無 XXE 漏洞
清理後的 SVG 檔 MetaDefender Core – 深度CDR 
安全報告顯示SVG檔案標記為允許並在漏洞評估後進行清理
MetaDefender Core – Deep CDR(檔案無毒化) 消毒結果

作者簡介

Luan Pham 參加了 OPSWAT的關鍵基礎設施網路安全研究生獎學金計劃,他目前是 OPSWAT.他熱衷於保護 OPSWAT的產品對抗潛在威脅並分享他的知識。 

欒范
助理滲透測試員

隨時瞭解OPSWAT 的最新資訊!

立即註冊,即可收到公司的最新消息、 故事、活動資訊等。