
CVE-2024-27198 и CVE-2024-27199 PoC - RCE, создание учетной записи администратора, перечисление пользователей, информация о сервере
Эксплуатация CVE-2024-27198 и CVE-2024-27199
RCity — это скрипт на Python, который взаимодействует с уязвимым сервером TeamCity. CVE позволяет несанкционированное создание учетной записи администратора, обходя ошибки 403 на домене. А также позволяет достичь RCE через маршрут Debug/Processes.
Чтобы использовать скрипт, необходимо указать URL целевого сервера TeamCity в качестве аргумента командной строки с помощью параметра -t или --target:
python3 RCity.py -t http://teamcity.com:8111
Вы можете увеличить подробность вывода с помощью опции -v или --verbose:
python3 RCity.py -t http://teamcity.com:8111 --verbose
Вы можете отправлять одноразовые команды напрямую с помощью опции -c или --command, если вам нужен интерактивный shell, НЕ используйте эту опцию. Она не дружественна к reverse shell, так как соединение закрывается после отправки команды:
python3 RCity.py -t http://teamcity.com:8111 -c id
Вы можете гарантировать, что никакие POST-запросы не будут отправлены на сервер TeamCity, используя опцию -s или --stealth:
python3 RCity.py -t http://teamcity.com:8111 -s
Отключает функцию RCE - всё остальное остается без изменений
python3 RCity.py -t http://teamcity.com:8111 --no-rce
Предотвращает сбор списка пользователей, что может быть затратным по времени на больших списках пользователей. Перейдите сразу к RCE с помощью этой опции!
python3 RCity.py -t http://teamcity.com:8111 --no-enum



Здесь я опишу функции, используемые в этом проекте, чтобы дать вам лучшее понимание этого эксплойта и связанных с ним уязвимостей.
Природа уязвимости связывает обе 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.
/haxjsp для запроса маршрутов API, например, путь users - ?jsp=/app/rest/users;.jspТаким образом, итоговая полезная нагрузка для выполнения неавторизованных запросов к конечной точке пользователей: /hax?jsp=/app/rest/users;.jsp
Теперь мы можем делать запросы к конечной точке пользователей и добавлять своих пользователей, даже администраторов!
Однако прежде чем перейти к RCE, нам нужен токен аутентификации, как носитель для наших запросов RCE к их REST API. Теперь, когда у нас есть обход, нет проблем — мы его сделаем!
Конечная точка токена следовала тому же дереву путей, что и предыдущий пример, её можно найти по адресу /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!
Удачного взлома!
https://nvd.nist.gov/vuln/detail/CVE-2024-27198
https://github.com/W01fh4cker/CVE-2024-27198-RCE
Этот скрипт предназначен только для образовательных целей. Используйте его ответственно и только в системах, к которым у вас есть разрешение на доступ.