繼續對Fortify的漏洞進行總結,本篇主要針對 XML External Entity Injection(XML實體注入) 的漏洞進行總結,如下:
1.1、產生原因:
XML External Entities 攻擊可利用能夠在處理時動態構建文檔的 XML 功能。XML 實體可動態包含來自給定資源的數據。外部實體允許 XML 文檔包含來自外部 URI 的數據。除非另行配置,否則外部實體會迫使 XML 解析器訪問由 URI 指定的資源,例如位於本地計算機或遠程系統上的某個文件。這一行為會將應用程序暴露給 XML External Entity (XXE) 攻擊,從而用於拒絕本地系統的服務,獲取對本地計算機上文件未經授權的訪問權限,掃描遠程計算機,並拒絕遠程系統的服務。
下面的 XML 文檔介紹了 XXE 攻擊的示例:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///dev/random" >]><foo>&xxe;</foo>
如果 XML 解析器嘗試使用 /dev/random 文件中的內容來替代實體,則此示例會使服務器(使用 UNIX 系統)崩潰。
例:
圖1.1.1:未對XML實體解析方法做安全配置的實例
1.2、修復方案:
應對 XML unmarshaller 進行安全配置,使它不允許將外部實體包含在傳入的 XML 文檔中。為了避免 XXE injection,請勿將直接處理 XML 源的 unmarshal 方法用作 java.io.File、java.io.Reader 或 java.io.InputStream。使用安全配置的解析器解析文檔並使用將安全解析器作為 XML 源的 unmarshal 方法,如下面的示例所示:
例:
圖1.2.1:對XML實體解析方法做安全配置的實例