当前位置: 首页 > 知识库问答 >
问题:

XML外部实体引用限制不当(CWE ID 611)(6个缺陷)

晏阳飙
2023-03-14

该产品处理一个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();
        }
    }
}

共有1个答案

拓拔弘厚
2023-03-14

这是获得解决方案的良好参考: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外部实体注入: 在上面,它显示了以下行中的漏洞