-
Java中常见解析Excel引入的XXE组件复现与分析
新建excel文件 修改后缀为.zip
在zip文件中,修改[Content_Types].xml,在其中加入XXE验证POC
重新修改后缀为 .xlsx -
结果发现
直接通过 SAXReader 来解析xml文档,导致xxe漏洞的产生 -
修复方案
是在此处增加了一个SAXHelper类来进行防御处理
Apache POI,受影响版本:poi-ooxml-3.10-FINAL 及其以下版本
由于Excel文件实际上是一个压缩包格式文件,其中的xml文档如果被恶意构造加载外部实体参数,就会导致XXE漏洞。
我们从excel文件中读取到的 xml 文件传入 document() 方法,导致触发漏洞跟进 document() 方法,发现是直接通过 dom 方式解析 xml 文件导致了xxe漏洞
而修复方式采用的直接禁用外部实体引用。
/**
* 增加防止部实体注入逻辑
* @param reader
* @throws SAXException
* @see [类、类#方法、类#成员]
*/
public static void setReaderFeature(SAXReader reader)
throws SAXException
{
reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
reader.setFeature("http://javax.xml.XMLConstants/feature/secure-proc