XXE: внешние сущности XML
Коротко: XXE («XML External Entity») использует то, что некоторые XML-парсеры позволяют ссылаться в документе на внешние файлы или адреса. Так манипулированный документ может прочитать файлы сервера.
Подробнее: XML допускает в объявлении DOCTYPE так называемые сущности (entity), указывающие на файлы (file://) или URL. Парсер с настройками по умолчанию загружает их и подставляет содержимое в документ.
Подробности
- Последствия: Чтение локальных файлов, запросы к внутренним службам (SSRF), отказ в обслуживании из-за огромных вложенных сущностей («Billion Laughs»).
- Где встречается: Везде, где принимают XML: интерфейсы SOAP, загрузки SVG, файлы Office (DOCX, XLSX — это ZIP с XML), RSS, SAML.
- Защита: Отключить в парсере DTD и внешние сущности (в большинстве библиотек это настройка, например
disallow-doctype-decl), использовать актуальные библиотеки, по возможности JSON вместо XML. - Проверка: Тестовые документы с сущностями при разработке и в тестах, проверки зависимостей.
- Положение: Входит в список самых частых веб-рисков (OWASP).
См. также: SQL-инъекция