Veracode XML 外部实体引用 (XXE)
Veracode XML External Entity Reference (XXE)
我的 Veracode 报告中有下一个发现:
XML 外部实体引用 ('XXE') 的不当限制 (CWE ID 611)
参考下面的下一个代码
...
DocumentBuilderFactory dbf=null;
DocumentBuilder db = null;
try {
dbf=DocumentBuilderFactory.newInstance();
dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
dbf.setExpandEntityReferences(false);
dbf.setXIncludeAware(false);
dbf.setValidating(false);
dbf.newDocumentBuilder();
InputStream stream = new ByteArrayInputStream(datosXml.getBytes());
Document doc = db.parse(stream, "");
...
我一直在研究,但我还没有找到这个发现的原因或让它消失的方法。
你能告诉我怎么做吗?
你见过the OWASP guide about XXE吗?
您没有禁用应禁用的 3 个功能。最重要的是第一个:
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
背景:
XXE 攻击是围绕 XML 语言功能构建的,使用外部数据类型定义 (DTD) 定义任意实体以及读取或执行文件的能力。
下面是包含 DTD 声明的 XML 文件的示例,处理时可能 return 本地“/etc/passwd”文件的输出:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE test [
<!ELEMENT test ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
缓解措施:
要避免利用 XEE 漏洞,最好的方法是禁用从外部源加载实体的能力。
现在禁用 DTD 的方式将根据所使用的语言(Java、C++、.NET)和正在使用的 XML 解析器(DocumentBuilderFactory、SAXParserFactory、TransformerFactory 命名一个很少有人考虑 java 语言)。
下面两个官方参考资料提供了有关如何实现相同目标的最佳信息。
我的 Veracode 报告中有下一个发现: XML 外部实体引用 ('XXE') 的不当限制 (CWE ID 611) 参考下面的下一个代码
...
DocumentBuilderFactory dbf=null;
DocumentBuilder db = null;
try {
dbf=DocumentBuilderFactory.newInstance();
dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
dbf.setExpandEntityReferences(false);
dbf.setXIncludeAware(false);
dbf.setValidating(false);
dbf.newDocumentBuilder();
InputStream stream = new ByteArrayInputStream(datosXml.getBytes());
Document doc = db.parse(stream, "");
...
我一直在研究,但我还没有找到这个发现的原因或让它消失的方法。 你能告诉我怎么做吗?
你见过the OWASP guide about XXE吗?
您没有禁用应禁用的 3 个功能。最重要的是第一个:
dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
dbf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
背景:
XXE 攻击是围绕 XML 语言功能构建的,使用外部数据类型定义 (DTD) 定义任意实体以及读取或执行文件的能力。
下面是包含 DTD 声明的 XML 文件的示例,处理时可能 return 本地“/etc/passwd”文件的输出:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE test [
<!ELEMENT test ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
缓解措施:
要避免利用 XEE 漏洞,最好的方法是禁用从外部源加载实体的能力。
现在禁用 DTD 的方式将根据所使用的语言(Java、C++、.NET)和正在使用的 XML 解析器(DocumentBuilderFactory、SAXParserFactory、TransformerFactory 命名一个很少有人考虑 java 语言)。
下面两个官方参考资料提供了有关如何实现相同目标的最佳信息。