Взлом: обход отключенной регистрации пользователей в TEAMCITY

Вся информация предоставлена исключительно в ознакомительных целях.
Лица, использующие данную информацию в противозаконных целях, могут быть привлечены к ответственности.

Прогуливаясь по периметру в поисках новых точек входа, нередко натыкаешься на так называемые билд-серверы. Такие штуки нужны для обеспечения непрерывной интеграции - это довольно удобная практика при разработке больших проектов, когда над разными частями работают разные команды.

Если в двух словах, то эти билд-серверы автоматизируют целый ряд рутинных задач (сборка, тестирование кода перед коммитами, инспекция кода и так далее). Попасть в такую систему для пентестера равносильно нехилому такому джекпоту: внутри чаще всего поджидают исходники проектов компании плюс все коммиты, доступы к репозиториям, параметры сборки проектов, списки разработчиков и много чего еще полезного.

Ну все, довольно скучать, переходим к делу. Я хочу рассказать об уязвимости в популярном билд-сервере TeamCity от компании JetBrains. Баг довольно банален, однако очень опасен последствиями, потому что позволяет получить доступ в систему. Дело вот в чем. С сервером можно работать через браузер. Авторизация осуществляется с помощью обычной пары логин:пароль. Также присутствует возможность регистрации пользователей. Однако, когда администратор в настройках отключает свободную регистрацию в системе, недоступной становится только сама форма регистрации. А экшен, который непосредственно создает пользователя, эту настройку не проверяет.

Для регистрации пользователя нам нужно отправить POST-запрос на скрипт registerUserSubmit.html, который содержит email, имя пользователя, публичный ключ и два раза пароль в зашифрованном виде. Ключ уникален для каждого посещения, и им же шифруется пароль перед отправкой. Его можно найти, посмотрев исходный код страницы авторизации например.

Надо поискать скрытый input с именем publicKey.

Чтобы не заморачиваться со всей этой мишурой, можно воспользоваться небольшим
JS-скриптом от автора allyshka, который все сделает за тебя. Взять скрипт можно на Гитхабе https://gist.github.com/allyshka/8d478e170fe5a14270cc . Остаётся только скопировать код, открыть страницу авторизации TeamCity, открыть консоль разработчика (для Хрома и Файрфокса — хоткей F12), вставить код и нажать Enter. Если
баг присутствует, то тебя зарегистрирует, авторизует и переадресует на домашнюю страницу системы. Дальше можно начинать шерстить ее на предмет нужной инфы. Например, я советую сразу же заглянуть в раздел Projects.
С большой долей вероятности там можно найти список актуальных проектов.
А щелкнув на Artifacts, скорее всего, и их исходники.

Эксплоит отработал успешно. Мы в системе
Этот баг актуален для всех версий TeamCity вплоть до 9.0.2. На данный момент самая последняя версия 9.1.6, но, как уже замечено, никто не спешит обновляться. И во время тестов мне попадались такие динозавры, как 7.1. В любом случае, проверить на наличие уязвимости - дело одной минуты.

Также хочу упомянуть о том, что часто сервер TeamCity доступен с внешки. Попробуй побрутить поддомены и виртуальные хосты. Чаще всего это tc, ci, teamcity, tcity, ci-tc.
На этом все, удачных аудитов.

стырено с журнала Хакер, номер, за апрель 2016.