Неправильное ограничение ссылки на внешнюю сущность XML (CWE ID 611) (6 недостатков) - PullRequest
0 голосов
/ 19 сентября 2019

Продукт обрабатывает XML-документ, который может содержать XML-сущности с URL-адресами, которые разрешаются в документы за пределами предполагаемой сферы контроля, в результате чего продукт встраивает неправильные документы в свои выходные данные.
По умолчанию распознаватель 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 Ответ

0 голосов
/ 25 сентября 2019

Это хороший справочник для получения решения: https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html#java

Например, в вашем случае вы просто добавили бы эти 2 свойства к 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.

Надеюсь, что поможет

...