该产品处理一个XML文档,该文档可以包含URL解析为预期控制范围之外的文档的XML实体,从而导致该产品在其输出中嵌入不正确的文档<默认情况下,XML实体解析器将尝试解析和检索外部引用。如果攻击者控制的XML可以提交给这些函数之一,则攻击者可以访问有关内部网络、本地文件系统或其他敏感数据的信息。这称为XML外部实体(XXE)攻击。
什么都没有
package com.integratingstuff.jaxb;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import com.integratingstuff.pojo.Item;
public class DoUnmarshall {
public static void main(String[] args) {
try
{
JAXBContext jaxbContext= JAXBContext.newInstance(Item.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
String xml = "<?xml version="1.0" encoding="UTF-8"?><item
price="" description="Test description" catalog-number="10"/>";
InputStream inputStream = new
ByteArrayInputStream(xml.getBytes());
Item item = (Item) unmarshaller.unmarshal(inputStream);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
这是获得解决方案的良好参考:https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#java
例如,在您的示例中,您只需将这两个属性添加到XMLInputFactory和流读取器中:
final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
// These 2 properties are the key
xmlInputFactory.setProperty(XMLInputFactory.SUPPORT_DTD, false);
xmlInputFactory.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
// Your stream reader for the xml string
final XMLStreamReader xmlStreamReader = xmlInputFactory
.createXMLStreamReader(new StringReader(yourXMLStringGoesHere));
final NsIgnoringXmlReader nsIgnoringXmlReader = new NsIgnoringXmlReader(xmlStreamReader);
// Done with unmarshalling the XML safely
final Item item = (Item) unmarshaller.unmarshal(nsIgnoringXmlReader);
这也应该通过Veracode扫描,没有任何XXE问题。
希望那有帮助
为了防止XXE攻击,我禁用了Java DocumentBuilderFactory推荐的以下功能-https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention\u Cheat\u Sheet。 如果我没有将外部常规实体和外部参数实体设置为false,是否存在任何漏洞?因为当我们将disallow doctype decl设
我每次都会再次遇到这个错误,尽管我将代码更改为我在网上找到的代码,如下所示:
我在fortify报告中收到了第4行的XML外部实体注入安全警告。不知道如何修复它。我对SOAP、JAXB和Marshaller很陌生。 第4行(XML外部实体注入)高问题详细信息王国:输入验证和表示扫描引擎:SCA(语义) 接收器详细信息接收器:解组() 提前感谢!
我们对我们的代码进行了安全审计,他们提到我们的代码容易受到外部实体(XXE)攻击。 解释-XML外部实体攻击得益于XML功能,可以在处理时动态构建文档。XML实体允许动态包含来自给定资源的数据。外部实体允许XML文档包含来自外部URI的数据。除非配置为其他方式,否则外部实体会强制XML解析器访问URI指定的资源,例如本地计算机或远程系统上的文件。此行为会使应用程序遭受XML外部实体(XXE)攻击,
问题内容: 我在veracode报告中得到了下一个发现:XML外部实体引用(’XXE’)(CWE ID 611)的不当限制引用了下面的代码 … … 我一直在研究,但是我还没有找到这个发现的原因或使它消失的方法。你能告诉我怎么做吗? 问题答案: 您是否看到过有关XXE的OWASP指南? 您没有禁用应禁用的3个功能。最重要的是第一个:
Hp fortify向我展示了以下代码中的XML外部实体注入: 在上面,它显示了以下行中的漏洞