问题描述
由于在项目中间接引用poi依赖,此依赖版本过低导致漏洞。
原因分析:
Apache POI 版本<= 4.1.0 中,当使用 XSSFExportToXml 工具转换用户提供的 Excel 文档时,可以在 xmlMaps.xml 加入恶意代码制作成 excel 文档,
漏洞是在使用 XSSFExportToXml 类 xlsx 转 xml 时触发的
对比版本 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 触发XML External Entity处理在服务器读取文件资源或发送外部请求
解决方案:
- 如果不使用poi,由于间接依赖引入了poi,则在pom文件中使用exclude排除poi
- 如果使用poi,则在pom文件中使用指定poi版本超过4.1.0.