# V5336. OWASP. Potential XEE vulnerability. Insecure XML parser is used to process potentially tainted data.

Анализатор обнаружил использование небезопасно сконфигурированного XML-парсера, который обрабатывает данные без ограничения на использование XML-сущностей. Это может сделать приложение уязвимым к XEE-атаке (альтернативные названия: billion laughs-атака или атака с помощью XML-бомб). Подробнее суть данной атаки описана здесь.

Уязвимости такого типа относятся к следующим категориям рисков OWASP Top 10:

- A4:2017 — XML External Entities (XXE)
- A05:2021 — Security Misconfiguration

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

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

CWE-776