V5336. OWASP. Potential XEE vulnerability. Insecure XML parser is used to process potentially tainted data.
Анализатор обнаружил использование небезопасно сконфигурированного XML-парсера, который обрабатывает данные без ограничения на использование XML-сущностей. Это может сделать приложение уязвимым к XEE-атаке (альтернативные названия: billion laughs-атака или атака с помощью XML-бомб). Подробнее суть данной атаки описана здесь.
Уязвимости такого типа относятся к следующим категориям рисков OWASP Top 10:
В некоторых случаях отсутствие контроля над количеством рекурсивных определений сущностей может приводить к возможности эксплуатации атаки XEE. Если злоумышленник получит возможность отправить XML-файл приложению, то запустится сложная обработка, которая может привести к перегрузке парсера. Эта сложная обработка отключена по умолчанию в современных парсерах, но для гарантированной безопасности рекомендуется явно отключать вложенные и внешние сущности.
Рассмотрим простой пример с небезопасной настройкой в DocumentBuilderFactory:
Document readXML(String xml) throws .... {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, false);
return factory.newDocumentBuilder().parse(xml);
}
В данном примере разработчик, явно выставив false, отключил безопасный режим обработки XML. Исходя из этого, будут отключены следующие ограничения:
- на глубину рекурсии при обработке DTD;
- на количество сущностей.
Для того чтобы обезопасить приложение от XEE-атаки, можно запретить обработку внешних сущностей и явно включить безопасный режим парсинга XML:
Document readXML(String xml) throws .... {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
String feature = "http://xml.org/sax/features/external-general-entities";
factory.setFeature(feature, false);
return factory.newDocumentBuilder().parse(xml);
}
Обратите внимание, что существуют самые разнообразные парсеры, предназначенные для обработки XML-документов, которые могут быть уязвимы для XEE или нет, в зависимости от их настроек и версий. Для некоторых базовых типов способы защиты от XEE описаны здесь.
Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.). |
Данная диагностика классифицируется как: