Следующая новость
Предыдущая новость

Операция «Липосакция». Как использовать новую уязвимость в Jira

26.08.2019 12:33
Операция «Липосакция». Как использовать новую уязвимость в Jira

Содержание статьи

  • Стенд
  • Метод 1: Docker
  • Метод 2: ручная установка
  • Детали уязвимости
  • Демонстрация уязвимости (видео)
  • Заключение

Jira — мегапопулярная система для отслеживания ошибок, организации взаимодействия с пользователями и управления проектами. Уязвимость позволяет атакующему выполнить произвольный код на целевой системе при помощи обычного POST-запроса, не обладая при этом никакими привилегиями. Давай посмотрим на причины этого бага и методы его эксплуатации.

INFO

Баг обнаружил исследователь Даниил Дмитриев. Уязвимость получила статус критической и классифицируется как CVE-2019-11581 — «Инъекция в серверные шаблоны в Jira на страницах обратной связи с администратором и массовой рассылки». Уязвимы версии с 4.4.0 до 7.6.14, с 7.7.0 до 7.13.5, с 8.0.0 до 8.0.3, с 8.1.0 до 8.1.2, а также начиная с 8.2.0 и заканчивая 8.2.3.

Стенд

Воспроизвести необходимые для эксплуатации условия можно разными методами. Я покажу два из них.

Метод 1: Docker

Самый легкий способ — взять готовые контейнеры Docker из репозитория Vulhub. В файле ниже объявляются две машины: сама Jira и почтовый сервер.

CVE-2019-11581/docker-compose.yml
version: "2" services:   jira:     image: vulhub/jira:8.1.0     ports:       - "8080:8080"     links:       - smtpd   smtpd:     build:       context: .       dockerfile: smtpd.Dockerfile 

Машина с сервером имеет имя smtpd, где в качестве демона SMTP выступает стандартный модуль Python smtpd. Этой простейшей реализации достаточно, чтобы продемонстрировать уязвимость. На деле почтовый сервер может быть абсолютно любым.

CVE-2019-11581/smtpd.Dockerfile
FROM python:3.6-alpine3.9 COPY smtpd_server.py /smtpd_server.py CMD ["python", "/smtpd_server.py"] EXPOSE 1025 
CVE-2019-11581/smtpd_server.py
import smtpd  class CustomSMTPServer(smtpd.SMTPServer):   def process_message(self, peer, mailfrom, rcpttos, data, **kwargs):     r = data.decode("utf-8").split("n")     for l in r:       if l.startswith("Subject:"):         sys.stdout.write("[{0}] {1}n".format(time.time(),l))     sys.stdout.flush()     return  server = CustomSMTPServer(('0.0.0.0', 1025), None) sys.stdout.write("[+] Start SMTPServer on 0.0.0.0:1025n") 

В скрипте используется кастомный обработчик входящих сообщений для того, чтобы логировать в консоль заголовок Subject. В нем будет содержаться пейлоад.

Привести все это дело в рабочий вид можно одной командой:

docker-compose up -d 

После этого на порте 8080 будет запущен экземпляр системы Jira. Нужно пройти несложный процесс установки, на одном этапе которого придется получить триальный ключ. Когда установка будет завершена, понадобится еще несколько действий, чтобы можно было воспроизвести уязвимость.

Сначала настроим Jira для работы с сервером SMTP. Для этого от имени администратора переходим в раздел «Система → Исходящая почта» (System → Outgoing Mail) и нажимаем кнопку «Добавить SMTP почтовый сервер» (Add SMTP Mail Server). В появившейся форме указываем необходимые данные.

Операция «Липосакция». Как использовать новую уязвимость в Jira
Настройка подключения к серверу SMTP в Jira

Затем нужно включить форму обратной связи. Эта настройка находится в разделе «Основные настройки» (General configuration), кнопка «Редактировать настройки» (Edit Settings).

Операция «Липосакция». Как использовать новую уязвимость в Jira
Страница основных настроек Jira

Нужно включить опцию «Форма связи с администраторами» (Contact Administrators Form).

Операция «Липосакция». Как использовать новую уязвимость в Jira
Включаем опцию «Форма обратной связи» в настройках Jira

Окружение готово.

Метод 2: ручная установка

Для тестов готовых контейнеров будет достаточно, но если хочешь глубже погрузиться в происходящее, то дальше я расскажу про второй вариант стенда.

Его я буду использовать для отладки, чтобы показать эксплуатацию изнутри. Все манипуляции будут производиться на компьютере с Windows. Сначала нужно скачать Atlassian SDK и установить его.

Потом при помощи этого SDK генерируем шаблон плагина.

atlas-create-jira-plugin 
Операция «Липосакция». Как использовать новую уязвимость в Jira
Генерация шаблона плагина для Jira с помощью Atlassian SDK

После этого будет создана директория с именем, которое было указано в artifactId. Я буду выполнять отладку в IntelliJ IDEA, поэтому открою папку с плагином в этой IDE. Здесь в файле pom.xml можно указать используемую версию Jira. На момент написания статьи это была 7.13.0, и она уязвима, так что можешь оставить как есть или поменять на любую другую непропатченную версию.

pom.xml
<properties>     <jira.version>8.1.0</jira.version> 

Запускаем Jira в отладочном режиме и сбрасываем флаг atlassian.mail.senddisabled, чтобы разрешить отправку почтовых сообщений.

atlas-debug --product jira -Datlassian.mail.senddisabled=false 

После запуска сервера нужно настроить удаленную отладку в IDEA. Для этого переходим в окно редактирования конфигураций и создаем новый сетап типа Remote.

Операция «Липосакция». Как использовать новую уязвимость в Jira
Настройка удаленной отладки в IntelliJ IDEA

По умолчанию порт для отладки — 5005, а веб-интерфейс будет находиться по адресу http://jirarce.vh:2990/jira.

Теперь настраиваем Jira по аналогии с первым вариантом стенда и в качестве сервера SMTP используем все тот же скрипт на Python.

Тестовое окружение готово, и наконец-то можно переходить к разбору уязвимости.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

1 год

5380 р.

1 месяц

720 р.

Я уже участник «Xakep.ru»

Источник

Последние новости