Прогуливаясь по периметру в поисках новых точек входа, нередко натыкаешься на так называемые билд-серверы. Такие штуки нужны для обеспечения непрерывной интеграции — это довольно удобная практика при разработке больших проектов, когда над разными частями работают разные команды.
Если в двух словах, то эти билд-серверы автоматизируют целый ряд рутинных задач (сборка, тестирование кода перед коммитами, инспекция кода и так далее). Попасть в такую систему для пентестера равносильно нехилому такому джекпоту: внутри чаще всего поджидают исходники проектов компании плюс все коммиты, доступы к репозиториям, параметры сборки проектов, списки разработчиков и много чего еще полезного.
Ну все, довольно скучать, переходим к делу. Я хочу рассказать об уязвимости в популярном билд-сервере TeamCity от компании JetBrains. Баг довольно банален, однако очень опасен последствиями, потому что позволяет получить доступ в систему.
Дело вот в чем. С сервером можно работать через браузер. Авторизация осуществляется с помощью обычной пары логин:пароль. Также присутствует возможность регистрации пользователей. Однако, когда администратор в настройках отключает свободную регистрацию в системе, недоступной становится только сама форма регистрации. А экшен, который непосредственно создает пользователя, эту настройку не проверяет.
Для регистрации пользователя нам нужно отправить POST-запрос на скрипт registerUserSubmit.html
, который содержит email, имя пользователя, публичный ключ и два раза пароль в зашифрованном виде. Ключ уникален для каждого посещения, и им же шифруется пароль перед отправкой. Его можно найти, посмотрев исходный код страницы авторизации например. Ищи скрытый input с именем publicKey.
![Страница авторизации и publicKey для шифрования пароля](https://xakep.ru/wp-content/uploads/2016/04/1461067028_a3d2_login_page.jpg)
![](https://xakep.ru/wp-content/uploads/2016/04/Cover_207-210x280.jpg)
Xakep #207. Дистанционное банковское ограбление
Чтобы тебе не заморачиваться со всей этой мишурой, я написал небольшой JS-скрипт, который все сделает за тебя. Вот gist. Тебе нужно только скопировать код, открыть страницу авторизации TeamCity, открыть консоль разработчика (для Хрома и Файрфокса — хоткей F12), вставить код и нажать Enter. Если баг присутствует, то тебя зарегистрирует, авторизует и переадресует на домашнюю страницу системы. Дальше начинай шерстить ее на предмет нужной тебе информации. Например, я советую сразу же заглянуть в раздел Projects. С большой долей вероятности там ты найдешь список актуальных проектов. А щелкнув на Artifacts, скорее всего, и их исходники.
![Эксплоит отработал успешно. Мы в системе](https://xakep.ru/wp-content/uploads/2016/04/1461067047_5230_main_page.jpg)
Этот баг актуален для всех версий TeamCity вплоть до 9.0.2. На данный момент самая последняя версия 9.1.6, но, как я успел заметить, никто не спешит обновляться. И во время тестов мне попадались такие динозавры, как 7.1. В любом случае, проверить на наличие уязвимости — дело одной минуты.
Также хочу упомянуть о том, что часто сервер TeamCity доступен с внешки. Попробуй побрутить поддомены и виртуальные хосты. Чаще всего это tc, ci, teamcity, tcity, ci-tc.
На этом все, удачных аудитов.