Категория 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);
Kotlin
val factory = XmlPullParserFactory.newInstance()
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
Отключение DTD также защищает синтаксический анализатор от DoS-атак. Если полностью отключить DTD невозможно, то внешние объекты и внешние объявления типов документов должны быть отключены способом, характерным для каждого синтаксического анализатора.
Поскольку на рынке представлено множество синтаксических анализаторов XML, способы защиты от XXE-атак могут различаться. Дополнительную информацию можно найти в документации к поисковой системе.
Очистка входных данных
Приложение необходимо перенастроить так, чтобы пользователи не могли внедрять произвольный код в преамбулу XML-документа. Это необходимо проверять на стороне сервера, поскольку элементы управления на стороне клиента можно обойти.
Использовать другую библиотеку
Если библиотеку или метод нельзя настроить безопасным образом, используйте другие. XML Pull Parser и SAX Parser можно настроить так, чтобы они запрещали DTD и сущности.
Ресурсы
- OWASP XXE
- Памятка OWASP по предотвращению XXE-атак
- XML Constants: FEATURE_SECURE_PROCESSING
- XML Pull Parser
- SAX Parser