×

Java的XXE漏洞浅析

96
小谷先生
2016.08.02 11:40* 字数 302

    如果系统能够接收并解析用户的XML,在系统未禁用DTD、Entity时,可能导致命令执行漏洞的发生。常见攻击脚本见[未知攻焉知防——XXE漏洞攻防]。由于大多数脚本解析器并不会默认禁用DTD、Entity,因此系统出现XXE漏洞的可能性还是不低。

    常见出现漏洞的场景如pdf在线解析、word在线解析、定制协议等。与业务逻辑设计有关而与语言无关,最好是不要让XML作为参数传输或整体结构可被用户篡改。如果一定要使用,至少要禁用DTD、Entity。


Java解析XML的常用三方库,如果不禁用DTD、Entity都会导致XXE漏洞:

javax.xml.stream.XMLStreamReader;

javax.xml.parsers.DocumentBuilderFactory;

org.dom4j.io.SAXReader;

org.xml.sax.helpers.XMLReaderFactory;

javax.xml.parsers.SAXParser;

javax.xml.parsers.DocumentBuilder;

org.jdom.input.SAXBuilder;

org.dom4j.DocumentHelper;

org.jdom.output.XMLOutputter;


一份漏洞代码样例:

private Document readFromRequest(HttpServletRequest request) {

    SAXReader reader = new SAXReader();

    return reader.read(request.getInputStream());

}


参考资料:

[未知攻焉知防——XXE漏洞攻防]https://security.tencent.com/index.php/blog/msg/69

公开文集
Web note ad 1