Mastodon Mastodon Mastodon Mastodon

XXE-инъекция [XXE]

Обновлено: · CyberSecureFox Editorial Team

XXE-инъекция (внедрение внешних сущностей XML) — уязвимость, при которой XML-парсер обрабатывает заданные атакующим сущности со ссылками на локальные файлы или URL, что ведёт к утечке данных или запросам от имени сервера.

Как работает XXE-инъекция

XML позволяет в определении типа документа (DTD) объявлять сущности — заполнители, которые парсер заменяет содержимым. Внешняя сущность берёт это содержимое по URI. Если парсер принимает DTD из недоверенных данных, атакующий может отправить, например:

<!DOCTYPE x [<!ENTITY xxe SYSTEM "file:///etc/passwd">]><x>&xxe;</x>

Сервер прочитает файл и может вернуть его в ответе. Слабость описана как CWE-611. В зависимости от парсера и настроек XXE может привести к:

  • чтению конфигурационных файлов, исходного кода и учётных данных — по аналогии с обходом каталога;
  • подделке запросов на стороне сервера к внутренним сервисам и облачным сервисам метаданных;
  • «слепой» эксфильтрации данных через внешние DNS- или HTTP-запросы (out-of-band);
  • отказу в обслуживании из-за рекурсивного раскрытия сущностей (атака «billion laughs»), а в редких случаях — к выполнению кода.

Почему это важно

XML скрывается во многих местах: веб-сервисах SOAP, сообщениях единого входа SAML, RSS-лентах, изображениях SVG и офисных документах DOCX и XLSX, которые представляют собой ZIP-архивы с XML-файлами. Старые парсеры в Java, .NET и PHP обрабатывали внешние сущности по умолчанию. В OWASP Top 10 2017 года у XXE была собственная категория (A4), сейчас она входит в Security Misconfiguration.

Как предотвратить

  • Отключить обработку DTD и разрешение внешних сущностей во всех XML-парсерах.
  • Использовать защищённые библиотеки, например defusedxml для Python, и своевременно обновлять парсеры.
  • Выбирать более простые форматы вроде JSON там, где XML не обязателен.
  • Проверять загружаемые файлы и ограничивать исходящие соединения серверов.
Синонимы:
внедрение внешних сущностей xml, xml external entity, xxe-атака, xxe injection