Как решить проблему «Неправильное ограничение ссылки на внешнюю сущность XML ('XXE')»

Я пытаюсь исправить все уязвимости, перечисленные Veracode в моем веб-приложении. Я застрял на этой конкретной уязвимости, о которой на самом деле понятия не имею. «Неправильное ограничение ссылки на внешнюю сущность XML». Позвоните, пожалуйста, помогите мне и объясните проблему с кодом и способ, которым мы можем это решить?

    Object objec = null;

    try {
        JAXBContext jContext = JAXBContext.newInstance(context);
        Unmarshaller unmarshaller = jContext.createUnmarshaller();
        InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
        objec = unmarshaller.unmarshal(inputStream);  //Vulnerability reported in this line

    } catch (JAXBException e) {
        e.printStackTrace();
    }

    return objec;
}

person Shaan Anshu    schedule 21.05.2019    source источник
comment
Возможный дубликат Предотвращение атаки XXE с помощью JAXB   -  person Urosh T.    schedule 25.09.2019


Ответы (1)


Это хороший справочник для поиска решения: 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 YourObject obj = (YourObject) unmarshaller.unmarshal(nsIgnoringXmlReader);

Это должно помочь при сканировании Veracode.

person Urosh T.    schedule 25.09.2019