Apache POI <= 4.1.0 XXE 漏洞 (CVE-2019-12415)

關於 CVE-2019-12415

這是最近 POI 官方公佈出來的一個 XXE 漏洞,可以影響到 4.1.0 版本,官方已在十天前更新了 4.1.1 版本,最新版本修復了這個 XXE漏洞。

In Apache POI up to 4.1.0, when using the tool XSSFExportToXml to convert user-provided Microsoft Excel documents, a specially crafted document can allow an attacker to read files from the local filesystem or from internal network resources via XML External Entity (XXE) Processing.

根據官方介紹,漏洞是在使用XSSFExportToXml類 xlsx 轉 xml 時觸發的。

diff 了一下 4.1.0 和 4.1.1 XSSFExportToXml 類的源碼,發現在 isValid 方法裡多設置了一個 feature,問題就出在 org.apache.poi.xssf.extractor.XSSFExportToXml#isValid 方法裡,如果org.apache.poi.xssf.extractor.XSSFExportToXml#exportToXML(java.io.OutputStream, java.lang.String, boolean)方法的第三個參數為 true 則會進入isValid觸發XXE。

Apache POI <= 4.1.0 XXE 漏洞 (CVE-2019-12415)

復現

我改了一下官網的測試用例,如果寫成這樣的,就會有漏洞。

<code>XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(new File("CustomXMLMappings.xlsx")));

for (XSSFMap map : wb.getCustomXMLMappings()) {
XSSFExportToXml exporter = new XSSFExportToXml(map); // 使用 XSSFExportToXml 將 xlsx 轉成 xml
exporter.exportToXML(System.out, true);//第一個參數是輸出流無所謂,第二個參數要為 true
}
複製/<code>

然後下載這個 xlsx 文件。

https://github.com/apache/poi/raw/f509d1deae86866ed531f10f2eba7db17e098473/test-data/spreadsheet/CustomXMLMappings.xlsx

把文件改為“CustomXMLMappings.zip”並解壓文件。

編輯 CustomXMLMappings/xl/xmlMaps.xml 文件。

在 <schema> 標籤裡面加上一行代碼。/<schema>

<code><redefine>
複製/<code>
Apache POI <= 4.1.0 XXE 漏洞 (CVE-2019-12415)

然後把 xlsx 釋放出來的所有文件再用 zip 打包回去,改成 CustomXMLMappings.xlsx。

最後一步監聽本地 8080 端口,運行這段代碼。

<code>XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(new File("CustomXMLMappings.xlsx")));

for (XSSFMap map : wb.getCustomXMLMappings()) {
XSSFExportToXml exporter = new XSSFExportToXml(map); // 使用 XSSFExportToXml 將 xlsx 轉成 xml
exporter.exportToXML(System.out, true);//第一個參數是輸出流無所謂,第二個參數要為 true
}
複製/<code>
Apache POI <= 4.1.0 XXE 漏洞 (CVE-2019-12415)

修復

  1. 更新到 4.1.1 及以上版本。
  2. 不要使用 XSSFExportToXml 類,或者不要讓 exportToXML 方法的第二個參數為 true


分享到:


相關文章: