Code Injection 第三部曲—XML Injection

XML外部處理器漏洞 ( XML External Entity, XXE ) ,你可能也聽過他更普遍的名字「XML Injection」。而這項注入式攻擊入選了新版2017年OWASP Top 10十大網站安全風險且位居第四,XXE與越來越多的微服務興起有著密切的關係。許多以XML為基礎的網站服務,忽略了管控權限的重要性,能直接透過XML語法進行請求或上傳,而造成處理器漏洞攻擊,甚至產生資料外洩、DoS等嚴重的風險。

在了解XXE之前,你需要先知道XML是什麼?XML是一種資料的格式,方便在不同的平台間互相傳遞、儲存、分享等。而XXE則是利用XML的便利性,透過外部實體注入的手法,讓惡意使用者能自訂一個實體名稱,並指定該實體針對伺服器執行特定的指令,進而造成資料外洩等資安問題。為了讓大家能更深刻的體悟XXE的攻擊手法,這邊小編會以攻擊流程來一一為大家介紹。

首先小編們準備了一個PHP撰寫的網站,透過GET XML格式來呈現資料,內容如下圖。

下一步透過「http://192.168.156.8/xml/example1.php?xml=<?xml version=”1.0″ encoding=”utf-8″?><root><name>Alice</name><year>20</year></root>,以$_GET[‘xml’]傳遞「正常的」XML資料格式。

接著開啟瀏覽器,可看到接收XML格式的網站,如下圖。

如此一來,可以簡易地利用XML所定義好的資料格式來呈現網頁內容。XML的優點在於可以讓網站直接讀取及引用,使用者可自行定義標籤<tags>的名稱及結構,以利伺服器進行辨識。但也因如此的便利性,若網站伺服器沒有針對這些自定義的外部實體進行限制的話,就會遭受惡意使用者的攻擊。

如下圖,當使用者額外宣告一個實體xxe,並指定此外部實體針對伺服器執行指令「file:///etc/passwd」,即可輕易獲得網站伺服器的使用者列表,造成遠端存取機敏資料的惡意攻擊。

進而透過$GET[‘xml’]輸入「http://192.168.156.8/xml/example1.php?xml=<?xml version=”1.0″ encoding=”utf-8″?><!DOCTYPE name  [<!ELEMENT name ANY><!ENTITY xxe SYSTEM “file:///etc/passwd” >]><root><name>%26xxe;</name></root>」後,可直接從網站獲得passwd檔案,如下圖。

XXE不僅可以造成上述的本地文件包含漏洞(Local File Inclusion, LFI)風險,透過修改payload甚至能執行遠端程式碼執行(Remote Code Execution, RCE)、伺服器請求偽造(Server-Side Request Forgery, SSRF)、阻斷服務攻擊(Denial of Service, DoS)等攻擊。接下來,小編為大家帶來XML Injection經典的遞迴實體擴充套件DoS攻擊(又稱Billion Laughs Attack Demo或XML Bomb)。

以下為Billion Laughs Attack / XML Bomb的XML示意圖。

接著將這段XML注入目標網站後,會導致目標伺服器網站遞迴處理外部實體的引用而造成DoS風險。

最後,雖然普遍網站已經越來越少使用XML格式而是利用JSON來進行資料格式傳遞。但仍有不少的網站還是使用XML也依然存在XML Injection的風險,為了避免網站存在RCE、SSRF、DoS等風險。建議系統開發人員仍要針對XML禁止使用外部實體,進而讓網站伺服器不會處理使用者自行定義的XML實體,預防XXE Injection的發生。

參考

[1] 來自外部的威脅-XXE漏洞攻擊成因 http://www.digicentre.com.tw/industry_detail.php?id=38

[2] XXE漏洞學習從入門到放棄 https://www.jianshu.com/p/77f2181587a4

[3] XML Based Attacks https://www.owasp.org/images/5/58/XML_Based_Attacks_-_OWASP.pdf

[4] XML external entity attack https://en.wikipedia.org/wiki/XML_external_entity_attack

[5] Billion laughs attack https://en.wikipedia.org/wiki/Billion_laughs_attack?fbclid=IwAR2UDCl585ARn-SGI7mHuU1Dq9f_RGXrHxt6XVP-aV6ySHk3Yj5fNwz2Z4Y

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。