Внешняя ссылка на 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).
Ниже в двух официальных справочниках представлена лучшая информация о том, как этого добиться.