XML外部實體注入漏洞的範例分析
一、XML外部實體注入
XML 外部實體注入漏洞也就是我們常說的 XXE 漏洞。 XML 作為一種使用較廣泛的資料傳輸格式,許多應用程式都包含有處理 xml 資料的程式碼,預設情況下,許多過時的或配置不當的 XML 處理器都會對外部實體進行引用。
如果攻擊者可以上傳 XML 文件或在 XML 文件中添加惡意內容,透過易受攻擊的程式碼、依賴項或集成,就能夠攻擊包含缺陷的XML處理器。 XXE 漏洞的出現和開發語言無關,只要是應用程式中對 xml 資料做了解析,而這些資料又受使用者控制,那麼應用程式都可能受到 XXE 攻擊。本篇文章以 java 程式為例為大家介紹 XXE 漏洞的成因及修復。 XXE 漏洞詳細請見 CWE-611: Improper Restriction of XML External Entity Reference ('XXE')(http://cwe.mitre.org/data/definitions/611.html)。
二、XML外部實體注入
XXE 漏洞可能會用於擷取資料、執行遠端伺服器請求、掃描內部系統、執行拒絕服務攻擊和其他攻擊。業務影響主要取決於受影響的引用程序和資料保護需求。
2018年至今,CVE 中共有發布了 92 個漏洞資訊與其相關。部分CVE如下:
#CVE-2018-8027 | Apache Camel 2.20.0 到2.20. 3 和2.21.0 Core 在XSD 驗證處理器中存在XXE 漏洞。 |
---|---|
CVE-2018-13439 | 微信支付 Java SDK 中的 WXPayUtil 類別中存在XXE漏洞。 |
CVE-2018-1000548 | 在版本號小於14.3 的Umlet 中,檔案解析中存在XML外部實體注入漏洞,可能導致機密資料外洩、拒絕服務、伺服器端請求偽造。此攻擊可以透過特製的 UXF 檔案進行攻擊。 |
CVE-2018-1364 |
IBM Content Bavigator 2.0 和 3.0 版本中處理XML資料時,易受XML外部實體(XXE)攻擊。遠端攻擊者可以利用此漏洞暴露敏感資訊或佔用記憶體資源。 |
三、範例程式碼
3.1 缺陷程式碼
本節使用範例程式碼來源為某開源支付Java SDK (https:/ /pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1),來源檔案名稱:WXPayUtil.java,檔案路徑為:java-sdk-v3\src\main\java\com\ github\wxpay\sdk。
在上述程式碼可以看到在25行處資料透過 xmlToMap 形參傳入,資料未做任何過濾,且XML 處理器也未做安全設定就在32行處對資料做了解析,而實際場景中,參數 strXML
也是受攻擊者控制的,這樣攻擊者可能透過建構惡意的 strXML
來進行XXE 攻擊。
使用360程式碼衛兵對上述範例程式碼進行偵測,可以在檔案第32行檢出「有風險的XML外部實體注入」缺陷。如圖1所示:
圖1 偵測出有風險的XML外部實體注入
3.2 修正程式碼
#在上述修復程式碼中的第28行使用的是一個xml工具類別WXPayXmlUtil,用於產生一個安全的xml處理器。而 WXPayXmlUtil 類別中最為關鍵的是第16行,透過 setFeature 讓產生的 xml 處理器完全停用 DTDS。透過圖2可以看出,360代碼衛士對修復後的程式碼並未檢出缺陷。
圖2 XXE漏洞修復範例
四、如何避免XXE漏洞
常見的避免方法:
1. 盡可能使用簡單的資料格式(如:JSON),避免對敏感資料進行序列化;
2. 及時修復或更新應用程式或底層作業系統使用的所有XML處理器和函式庫。同時,透過相依性偵測,將SOAP更新到1.2版本或更高版本;
3. 在應用程式的所有XML解析器中停用XML外部實體和DTD進程,具體實作可以參考《OWASP Cheat Sheet 'XXE Prevention'》(https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet)
以下程式碼是java應用程式中使用DocumentBuilderXXE漏洞的範例:
4. 輸入校驗:在伺服器端使用白名單進行輸入驗證和過濾,以防在XML文件、標題或節點中出現惡意資料。
5. 驗證XML和XSL檔案上傳功能是否使用XSD驗證或其他類似驗證的方法來驗證上傳的XML檔案
6. DAST工具需要額外的手動步驟來檢查和利用XXE漏洞,而使用ASAT工具可以透過偵測依賴項和安全性配置來發現XXE漏洞。
以上是XML外部實體注入漏洞的範例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

XML檔可以用PPT開啟嗎? XML,即可擴展標記語言(ExtensibleMarkupLanguage),是一種廣泛應用於資料交換和資料儲存的通用標記語言。與HTML相比,XML更加靈活,能夠定義自己的標籤和資料結構,使得資料的儲存和交換更加方便和統一。而PPT,即PowerPoint,是微軟公司開發的一種用於創建簡報的軟體。它提供了圖文並茂的方

使用Python實現XML資料的篩選和排序引言:XML是一種常用的資料交換格式,它以標籤和屬性的形式儲存資料。在處理XML資料時,我們經常需要對資料進行篩選和排序。 Python提供了許多有用的工具和函式庫來處理XML數據,本文將介紹如何使用Python實現XML資料的篩選和排序。讀取XML檔案在開始之前,我們需要先讀取XML檔案。 Python有許多XML處理函式庫,

使用Python實現XML資料的合併和去重XML(eXtensibleMarkupLanguage)是一種用於儲存和傳輸資料的標記語言。在處理XML資料時,有時候我們需要將多個XML檔案合併成一個,或移除重複的資料。本文將介紹如何使用Python實現XML資料的合併和去重的方法,並給出對應的程式碼範例。一、XML資料合併當我們有多個XML文件,需要將其合

Python中的XML資料轉換為CSV格式XML(ExtensibleMarkupLanguage)是一種可擴充標記語言,常用於資料的儲存與傳輸。而CSV(CommaSeparatedValues)則是一種以逗號分隔的文字檔案格式,常用於資料的匯入和匯出。在處理資料時,有時需要將XML資料轉換為CSV格式以便於分析和處理。 Python作為一種功能強大

Python實作XML與JSON之間的轉換導語:在日常的開發過程中,我們常常需要將資料在不同的格式之間轉換。 XML和JSON是常見的資料交換格式,在Python中,我們可以使用各種函式庫來實作XML和JSON之間的相互轉換。本文將介紹幾種常用的方法,並附帶程式碼範例。一、XML轉JSON在Python中,我們可以使用xml.etree.ElementTree模

使用PHP將XML資料匯入資料庫引言:在開發中,我們經常需要將外部資料匯入到資料庫中進行進一步的處理和分析。而XML作為一種常用的資料交換格式,也常被用來儲存和傳輸結構化資料。本文將介紹如何使用PHP將XML資料匯入資料庫。步驟一:解析XML文件首先,我們需要解析XML文件,擷取所需的資料。 PHP提供了幾種解析XML的方式,其中最常用的是使用Simple

使用Python處理XML中的錯誤和異常XML是一種常用的資料格式,用於儲存和表示結構化的資料。當我們使用Python處理XML時,有時可能會遇到一些錯誤和異常。在本篇文章中,我將介紹如何使用Python來處理XML中的錯誤和異常,並提供一些範例程式碼供參考。使用try-except語句捕捉XML解析錯誤當我們使用Python解析XML時,有時候可能會遇到一些

Python解析XML中的特殊字元和轉義序列XML(eXtensibleMarkupLanguage)是一種常用的資料交換格式,用於在不同系統之間傳輸和儲存資料。在處理XML檔案時,經常會遇到包含特殊字元和轉義序列的情況,這可能會導致解析錯誤或誤解資料。因此,在使用Python解析XML檔案時,我們需要了解如何處理這些特殊字元和轉義序列。一、特殊字元和
