Категория OWASP: MASVS-CODE: Качество кода
Обзор
Внедрение внешних сущностей XML (XXE) — это атака на приложения, анализирующие ввод XML. Атака XXE происходит, когда ненадежный ввод XML со ссылкой на внешний объект обрабатывается слабо настроенным анализатором XML. Эту атаку можно использовать для инсценировки нескольких инцидентов, включая отказ в обслуживании, доступ к файловой системе или кражу данных.
Влияние
Когда приложение анализирует XML-документ, оно может обрабатывать любые DTD (определения типов документов, также известные как внешние объекты), содержащиеся в документе. Злоумышленник может воспользоваться этим поведением, внедрив вредоносный код в виде DTD. Затем этот код может получить доступ к частям файловой системы устройства, доступным только приложению и потенциально содержащим конфиденциальные данные. Кроме того, этот вредоносный код может отправлять запросы с устройства, потенциально обходя меры безопасности периметра.
Наконец, если приложение расширяет DTD, это может создать ситуацию с множественными итерациями ссылочных сущностей, истощающую ресурсы устройства и приводящую к отказу в обслуживании.
Смягчения
Отключить DTD
Самый безопасный способ предотвратить XXE — всегда полностью отключать DTD (внешние объекты). В зависимости от используемого синтаксического анализатора метод может быть аналогичен следующему примеру для библиотеки XML Pull Parser:
Ява
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 и сущности.
Ресурсы
- ОВАСП XXE
- Памятка по предотвращению OWASP XXE
- XML-константы: FEATURE_SECURE_PROCESSING
- XML-анализатор по запросу
- SAX-парсер