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. Исходя из этого, будут отключены следующие ограничения:

Для того чтобы обезопасить приложение от 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 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.).

Данная диагностика классифицируется как: