В Jenkins обнаружен набор уязвимостей, наиболее опасная из которых позволяет удалённо выполнить код на контроллере. Разработчики выпустили исправления в свежих версиях системы и ряда плагинов. Критическая проблема (CVE-2026-70426) затрагивает компонент Remoting, отвечающий за обмен данными между контроллером и агентами.
Детали уязвимостей
Из-за ошибки в фильтрации классов при десериализации объектов злоумышленник, имеющий доступ к агенту или обладающий разрешением Agent/Connect, может обойти защитный механизм и выполнить произвольный код на контроллере Jenkins. Уязвимость связана с тем, что фильтр JEP-200, ограничивающий набор классов Java, допустимых при десериализации, не применяется на одном из путей загрузки классов. В результате код, работающий на агенте, или атакующий с соответствующими правами может передать контроллеру специально сформированные данные, которые приведут к выполнению команд. Проблема затрагивает Jenkins weekly до 2.575 включительно и LTS до 2.568.1. Исправление включено в версии 2.576 и 2.568.2.
Помимо критической проблемы, в Jenkins core исправлены ещё четыре уязвимости. Одна из них (CVE-2026-70427, High) связана с некорректной обработкой символических ссылок с пустыми именами при распаковке архивов .tar и .tar.gz. Из-за этой ошибки атакующий, контролирующий процесс агента, мог передать на контроллер архив, который после распаковки записал бы файлы в произвольные места файловой системы. Это потенциально позволяло, например, разместить вредоносный скрипт в каталоге инициализации Jenkins и добиться выполнения кода при следующем запуске. Разработчики отмечают, что предыдущее исправление аналогичной проблемы было неполным.
Другая уязвимость (CVE-2026-70428, High) - обход проверки путей в именах файловых параметров. Пользователи с правами Item/Configure и Item/Build могли указать путь, выходящий за пределы рабочей директории, и записать файл в произвольное место на контроллере. Как и в предыдущем случае, это открывало путь к выполнению кода. В обновлении усилена проверка таких путей.
Отдельного внимания заслуживает уязвимость CVE-2026-70429 (High), связанная с неконсистентной обработкой регистра символов в именах пользователей и групп. Из-за особенностей сравнения строк в Java некоторые символы Unicode могут считаться эквивалентными, хотя их канонические формы различаются. Атакующий, имеющий возможность создавать пользователей или группы, мог подобрать имя, которое при сравнении без учёта регистра совпадает с именем другого пользователя, и таким образом получить его права. Проблема проявляется только при использовании систем аутентификации, допускающих подобные символы; встроенная база пользователей Jenkins такие имена не разрешает.
Ещё одна уязвимость ядра (CVE-2026-70430, Low) позволяет обладателям разрешения Overall/Manage создавать объекты произвольных типов в рамках конфигурации стратегии именования проектов. Это ограничивает возможности администраторов, но не представляет непосредственной угрозы для обычных пользователей.
Значительная часть уязвимостей связана с плагинами. В Multijob Plugin (CVE-2026-70431 и CVE-2026-70432, обе High) обнаружились проблемы, ведущие к выполнению произвольного кода на контроллере. Первая вызвана тем, что Groovy-скрипты в плагине не интегрированы с механизмом безопасности Script Security, вторая - отсутствием проверки метода POST при обращении к одной из форм валидации, что создаёт уязвимость межсайтовой подделки запросов (CSRF). Обе исправлены в версии 677.v7ffc23d6a_4c2.
В HCL AppScan Plugin (CVE-2026-70433, Medium) и ряде других плагинов - Parameterized Remote Trigger, Violation Comments to GitLab, Sauce OnDemand, CodeSonar, AWS CodeBuild - отсутствуют проверки разрешений в HTTP-эндпоинтах. Это позволяет пользователям с правом Overall/Read перечислять идентификаторы сохранённых в Jenkins учётных данных, что может стать первым шагом для их кражи. В HCL AppScan проблема исправлена в версии 1.8.4, для остальных перечисленных плагинов исправлений пока нет.
Уязвимости в SCM-Manager Plugin (CVE-2026-70434, CVE-2026-70435, Medium) сочетают отсутствие проверки разрешений и незащищённость от CSRF. Атакующий с правом Overall/Read мог заставить сервер подключиться к указанному им URL, используя учётные данные, полученные другим способом, и таким образом перехватить их. Обновление 1.12.1 закрывает обе проблемы.
External Workspace Manager Plugin (CVE-2026-70436, Medium) не проверял права доступа при просмотре внешних рабочих областей, что позволяло пользователям с Overall/Read читать файлы в чужих workspace. Исправление вышло в версии 1.4.2.
Webhook Secret Credentials Provider Plugin (CVE-2026-70437, Low) использовал непостоянное по времени сравнение вебхук-токенов, что теоретически позволяло подобрать валидный токен статистическими методами. В версии 32.v09c9b_522f0a_8 сравнение стало выполняться за постоянное время.
Ряд уязвимостей в плагинах остаются без исправлений на момент публикации бюллетеня. Среди них - хранимые межсайтовые скриптовые уязвимости (XSS) в Qualys Container Scanning Connector и Summary Display (обе High), проблемы с раскрытием системных учётных данных в Google Chat Notification и Horreum (Medium), отсутствие проверок разрешений в XML Job to Job DSL (Medium), а также XXE-уязвимость в Ivy Report (High). Для этих плагинов разработчики пока не выпустили обновления, хотя часть проблем уже описана в бюллетене.
Разработчики Jenkins рекомендуют обновить ядро до версии 2.576 (weekly) или 2.568.2 (LTS), а также установить исправленные версии доступных плагинов: External Workspace Manager 1.4.2, HCL AppScan 1.8.4, Multijob 677.v7ffc23d6a_4c2, SCM-Manager 1.12.1, Webhook Secret Credentials Provider 32.v09c9b_522f0a_8. Для уязвимостей, по которым нет патчей, рекомендуется ограничить доступ к Jenkins и его плагинам, а также следить за обновлениями. Некоторые проблемы имеют временные обходные меры, описанные в официальном репозитории.
Эта волна уязвимостей показывает, что даже зрелые CI/CD-системы остаются сложной поверхностью атаки: проблемы затрагивают не только ядро, но и экосистему плагинов, которая зачастую не получает своевременных исправлений. Регулярное обновление Jenkins и его компонентов остаётся основной мерой защиты от подобных угроз.
Ссылки