XXE: как защитить XML-парсер от внешних сущностей
Когда обработка XML позволяет обращаться к файлам и сетевым ресурсам сервера и как ограничить возможности парсера.
Коротко о главном
- Чем опасно
- Раскрытие доступных процессу файлов.
- С чего начать защиту
- Отключите DTD и внешние сущности, если формат не требует их поддержки.
- Как подтвердить
- Нужны ручной аудит и проверка реализации. Отсутствие находок во внешнем скане не подтверждает безопасность.
В этой статье
- Продукт
- Веб-приложения
- Оценка риска
- Уровень зависит от конфигурации
Как проверить и что учитывать
Нужна ручная проверка
Для подтверждения нужны анализ реализации и проверки на согласованном тестовом контуре. Публикация не означает автоматическое обнаружение этого сценария FindRisk. Не делайте вывод о наличии уязвимости только по одному внешнему признаку: подтвердите результат в настройках и версии компонента.
Что нужно для подтверждения
Сверьте настройки с документацией именно вашего парсера. В изолированной среде используйте безвредную локальную фикстуру и контролируемый тестовый ресурс: недоверенный XML не должен инициировать внешние обращения.
Ограничения вывода
- Внешний ответ не раскрывает все роли, обработчики и настройки внутренних компонентов.
- Используйте только свои системы или письменное разрешение владельца; нагрузочные проверки согласуйте отдельно.
Что это за уязвимость
XML-парсер может разрешать внешние сущности, загружая данные из файлов или сети. При обработке недоверенного документа эти возможности выходят за пределы обычного чтения данных.
Когда возникает риск
Риск зависит от библиотеки, версии и включённых функций DTD, внешних схем и XInclude. Проверять нужно также импорт офисных документов и интеграции, внутри которых используется XML.
Возможные последствия
Когда обработка XML позволяет обращаться к файлам и сетевым ресурсам сервера и как ограничить возможности парсера.
- Раскрытие доступных процессу файлов.
- Запросы к внутренним сервисам и расход ресурсов при разборе.
Как защитить приложение
Исправляйте причину в обработчике, а не только внешний симптом.
- Отключите DTD и внешние сущности, если формат не требует их поддержки.
- Запретите сетевое разрешение схем и используйте локальный доверенный каталог при необходимости.
- Обновите библиотеку и ограничьте размер, глубину и время обработки документа.
Как безопасно проверить исправление
Сверьте настройки с документацией именно вашего парсера. В изолированной среде используйте безвредную локальную фикстуру и контролируемый тестовый ресурс: недоверенный XML не должен инициировать внешние обращения.
Оценка риска и границы сканирования
Средний уровень — ориентировочная редакционная оценка, не CVSS подтверждённой находки. Для конкретной системы приоритет зависит от доступных данных, полномочий и компенсирующих мер; последствия могут быть значительно серьёзнее.
Отсутствие находки во внешнем скане не доказывает безопасность реализации. Проверяйте сценарии после входа, альтернативные маршруты и внутренние сервисы.
Как проходит проверка
Для подтверждения нужны анализ реализации и проверки на согласованном тестовом контуре. Публикация не означает автоматическое обнаружение этого сценария FindRisk. Автоматический результат показывает внешний признак риска и требует проверки специалистом с учётом конкретной конфигурации.
Проверить другие внешние рискиЧто делать после обнаружения
- Зафиксируйте затронутый сценарий и сохраните журналы без токенов и персональных данных.
- Ограничьте проблемный обработчик, оцените доступные данные и назначьте владельца исправления.
- Устраните первопричину и добавьте регрессионную проверку на тестовых данных.
Частые вопросы
Что означает риск «XXE»?
Когда обработка XML позволяет обращаться к файлам и сетевым ресурсам сервера и как ограничить возможности парсера.
Можно ли подтвердить проблему только внешней проверкой?
Для подтверждения нужны анализ реализации и проверки на согласованном тестовом контуре. Публикация не означает автоматическое обнаружение этого сценария FindRisk. Итог нужно сопоставить с конфигурацией, версиями и правами доступа на вашем сайте.
Что сделать в первую очередь?
Отключите DTD и внешние сущности, если формат не требует их поддержки.