如何禁用XXE处理?
来源:创实信息 作者:龙智 发布时间:2022-05-09
禁用DOCTYPE
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);禁用外部实体声明
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
$doc = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOENT); // !XXE enabled!$doc = simplexml_load_string($xml, "SimpleXMLElement"); // XXE disabled
启用安全处理
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);禁用实体引用扩展
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();factory.setExpandEntityReferences(false);
C/C++ Xerces库的等效功能是:
xercesc::XercesDOMParser *DOMparser = new xercesc::XercesDOMParser();DOMparser->setCreateEntityReferenceNodes(true);
创建实体引用节点意味着实体引用不会被扩展,因此不会导致外部内容泄露。但要实现正确设置可能存在很多困难,因为这些方法名称不属于那种清晰易懂的类型,因而很容易发生概念混淆。例如,我们最近为改进OWASP C++指南做出了很多努力。之前的情况曾错误地建议将此参数设置为“false”而非“true”。
因此,如果您仍然依赖之前的OWASP建议,将激活C++规则S2755。例如,msix-packaging微软开源项目就是一个用于打包和解压MSIX包的C++工具:
注:在假设XML处理器可以访问此API(https://internal.network/private/username/admin)的情况下,当攻击者欺骗服务器(在本例中为XML处理器)执行任意请求而无法检索响应内容时,就会发生盲目的SSRF。
继而攻击者可以对该API端点执行请求。在该案例的最差情况下,攻击者可能够窃取用户名信息,具体情况取决于XML处理器的错误处理程度。
结语
作者简介:


