Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Средства разработки и организации работы — это целый пласт программ, уязвимости и неправильные настройки которых могут обернуться бедой для компании. Для пентестера знание таких багов — это путь к успешной эксплуатации, а для админа — возможность выстроить более надежную защиту. В этой статье я рассмотрю уязвимости в Jira, Confluence, Asana, Docker, GitLab и подобных продуктах.
info
Редакция благодарит команду «Хакердом» за помощь в подготовке статьи.
Стандартный современный цикл разработки состоит из множества этапов: планирование, анализ, дизайн, разработка, тестирование, интеграция, поддержка… На каждом этапе разработчики, админы, DevSecOps и другие специалисты используют разные инструменты. От грамотности настроек этих инструментов может зависеть безопасность продукта. Часть из них вполне можно раскрутить до уязвимостей.
Я возьму несколько популярных сервисов, которые используются на разных этапах, и покажу на их примере, как такое случается. Большую часть перечисленного я обнаружил в 2019 году, так что не жди, что проделанное мной можно будет повторить на актуальных версиях перечисленных программ. Большинство уязвимостей уже закрыты, но моя цель в данном случае — продемонстрировать, как нужно думать, чтобы их обнаруживать.
warning
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция, ни автор не несут ответственности за любой возможный вред, причиненный с использованием информации из данной статьи.
Jira — это мощный таск‑трекер, разработанный компанией Atlassian. Его можно использовать в качестве баг‑трекера, системы распределения задач между сотрудниками и еще много чего, но сейчас не об этом. Jira используется в миллионах организаций — внушительное поле для атак! Само собой, не все админы задумываются о безопасности, а многие вообще считают, что их организации никому не нужны и никто их атаковать не будет. Это обманчивое ощущение!
Находок у меня много, и начнем мы с самого простого, но не такого уж и безобидного.
Допустим, ты нашел сервис Jira по адресу jira.company.hack
. Тогда обращение по урлу https://jira.company.hack/rest/api/2/[]/
вызовет выпадение стектрейса, как на скриншоте ниже.
Jira stack trace
Чем оно нам может быть интересно? Как минимум тем, что мы можем посмотреть, какие плагины установлены в Jira. А плагины, как ты знаешь, зачастую куда более уязвимы, чем само приложение. Кстати, в Jira тоже частенько попадаются разной степени серьезности баги, так что из логов можно достать версию и проверить, нет ли удобной RCE.
info
Не менее ценны и сами порты Jira (с 8000-го по 8100-й): через них можно непосредственно управлять установленной системой — перезагружать, останавливать, тыкать админку и так далее. В интернете Jira много где торчит наружу.
Как и любая промышленная система, Jira умеет масштабироваться. Делается это за счет плагинов, которые пишут как официальные разработчики — Atlassian, так и сторонние.
Один из достаточно часто используемых таких компонентов — Agile Board.
Jira Agile Board
Agile — это один из подходов к разработке, а Jira Agile Board позволяет выстраивать дашборды для Agile и работать с ними командой или несколькими командами над разными проектами. Идея простая: есть доска, на ней есть тикеты, мы можем смотреть, когда и кем они выполняются, какие на них сроки, какие спринты и тому подобное.
Звучит не особо интересно, но, когда я начал исследовать Jira в нашей компании, заметил, что все это доступно безо всякой авторизации. То есть плагин официального разработчика живет своей жизнью и ни с кем договариваться не обязан, а в нем содержится чувствительная информация. Мы можем просто пройти по URL вида https://jira.company.hack/secure/ManageRapidViews.jspa
и посмотреть любую доску любого проекта.
Просмотр досок без авторизации
Здесь даже нашлась уязвимость типа IDOR — небезопасные ссылки на объекты. Она позволяет зайти вообще в любой проект, посмотреть задачи и прогресс их выполнения, и при этом не важно, приватный это проект или публичный.
Само собой, перебирая параметр в URL, можно получить вообще все доски, которые заведены в Jira.
Еще один довольно интересный баг — слепой JQL. Эксплуатировать его тоже можно без авторизации и читать любые тикеты.
В ядре Jira, очевидно, есть API. Нас интересуют следующие адреса:
https://jira.company.hack/jira/rest/api/2/mypermissions
https://jira.company.hack/jira/rest/api/2/issue/1
https://jira.company.hack/jira/rest/api/2/search?jql=status%3Dopen and description="12345"
Как ты заметил, на эндпойнте поиска в параметре jql
передается запрос, но интересно не это, а то, что на существующие и несуществующие запросы выдаются разные ответы. Таким образом можно полностью восстанавливать содержимое тикетов, используя те же способы, что и при слепых SQL-инъекциях.
Ответ не существует
Ответ существует
Для успешного поиска стоит подобрать поле id
в тексте запроса. Это целое число, которое обозначает номер тикета в Jira. Теперь мы можем полностью восстанавливать содержимое тикета брутфорсом поля description
.
Одна из проблем с ID заключается в том, что идут они не по порядку. Для подбора ID можно использовать такой вот простой скрипт:
for $i in $(seq 10000 11000); do curl https://jira.company.hack/rest/api/2/issue/$i; done;
Результаты
На скрине ты видишь, что тикеты 10000 и 10001 существуют, но к ним нет доступа, а 10002 не существует, значит, работать с помощью blind JQL мы можем только на 10000-м и на 10001-м тикете.
В некоторых случаях это может не сработать. У Atlassian есть два режима раздачи доступов: персональный и групповой. Групповой применятся сразу к целой группе разработчиков, а персональный — к одному конкретному. Так вот, атаку нельзя воспроизвести при установленном персональном режиме доступа.
Всегда отдается одинаковое сообщение об ошибке
Confluence — это пространство для командной работы, особенно удобное при удаленке. Здесь можно совместно накапливать знания.
Главное для нас — то, что здесь примерно та же история, что с Jira: первые две проблемы (stack trace и управляющие порты) одинаковые, а об еще одной я сейчас расскажу.
Источник: xakep.ru