Внедрение внешних сущностей XML (XXE)

Категория OWASP: MASVS-CODE: Качество кода

Обзор

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

Влияние

Когда приложение анализирует XML-документ, оно может обрабатывать любые DTD (определения типов документов, также известные как внешние сущности), содержащиеся в документе. Злоумышленник может использовать это в своих целях, внедряя вредоносный код в качестве DTD. Этот код затем может получить доступ к частям файловой системы устройства, доступным только приложению и потенциально содержащим конфиденциальные данные. Кроме того, этот вредоносный код может отправлять запросы с устройства, потенциально обходя меры безопасности периметра.

Наконец, если приложение расширяет DTD, это может привести к ситуации с многократными повторениями ссылочных сущностей, исчерпанию ресурсов устройства и отказу в обслуживании.

Меры по смягчению последствий

Отключить DTD

Самый безопасный способ предотвратить XXE — это всегда полностью отключать DTD (внешние сущности). В зависимости от используемого парсера, метод может быть аналогичен следующему примеру для библиотеки XML Pull Parser:

Java

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

Котлин

val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)

Отключение DTD также обеспечивает защиту парсера от атак типа «отказ в обслуживании». Если полностью отключить DTD невозможно, то внешние сущности и объявления внешних типов документов должны быть отключены способом, специфичным для каждого парсера.

Из-за большого количества существующих на рынке механизмов парсинга XML, способы предотвращения XXE-атак различаются в зависимости от конкретного механизма. Для получения дополнительной информации вам может потребоваться обратиться к документации вашего механизма.

Выполните очистку входных данных.

Приложение следует перенастроить таким образом, чтобы оно не позволяло пользователям внедрять произвольный код в преамбулу XML-документа. Это необходимо проверять на стороне сервера, поскольку контроль на стороне клиента может быть обойдён.

Используйте другую библиотеку.

Если используемую библиотеку или метод невозможно настроить безопасным образом, следует рассмотреть другой вариант. Как XML Pull Parser , так и SAX Parser можно настроить безопасным образом, запретив использование DTD и сущностей.

Ресурсы