Внешняя ссылка на Veracode XML (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);       db =
> dbf.newDocumentBuilder();   
>       InputStream stream = new ByteArrayInputStream(datosXml.getBytes());
>       Document doc = null;            doc= db.parse(stream, "");  

...

Я исследовал, но я не нашел причину этого открытия или способ заставить его исчезнуть. Не могли бы вы сказать мне, как это сделать?

1 ответ

Решение

Вы видели руководство OWASP о 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) и способности читать или выполнять файлы.

Ниже приведен пример XML-файла, содержащего объявление DTD, которое при обработке может возвращать вывод локального файла "/ 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).

Ниже в двух официальных справочниках представлена ​​лучшая информация о том, как этого добиться.

https://rules.sonarsource.com/java/RSPEC-2755

https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.md

Другие вопросы по тегам