Jenkins выпустил срочные обновления для закрытия семи уязвимостей, включая критическую десериализацию

Jenkins

Команда разработчиков Jenkins опубликовала бюллетень безопасности, в котором сообщила о семи уязвимостях, затрагивающих Jenkins core (ядро системы) и несколько связанных компонентов. Все проблемы исправлены в версиях Jenkins 2.568 (еженедельная ветка) и 2.555.3 (LTS). Организациям, использующим более ранние сборки, настоятельно рекомендуется как можно скорее установить обновления. Наиболее опасной признана уязвимость десериализации CVE-2026-53435 с высоким уровнем опасности (CVSS High).

Детали уязвимостей

Суть проблемы в том, как Jenkins обрабатывает десериализацию данных. В Jenkins применяется протокол Remoting для связи между контроллером и агентами, а также библиотека XStream для загрузки и сохранения конфигураций и данных сборок. Для защиты от типовых атак, связанных с десериализацией, Jenkins использует собственный фильтр, ограничивающий допустимые типы теми, что явно перечислены в ядре или плагинах (этот механизм известен как JEP-200). Однако в версиях Jenkins 2.567 и более ранних, а также LTS 2.555.2 и более ранних, злоумышленники могут обойти этот фильтр, отправив на сервер специально сформированный файл config.xml.

Атака требует наличия у нарушителя права Overall/Read. Кроме того, у него должна быть учётная запись (то есть атака не может быть проведена анонимно) либо разрешение на отправку POST-запросов, изменяющих конфигурацию через API config.xml (например, права Item/Configure, View/Configure, Agent/Configure). После успешной десериализации злоумышленник получает возможность манипулировать HTTP-запросами от имени любого пользователя Jenkins, вплоть до выполнения произвольного кода через Script Console. Также возможен несанкционированный доступ к чтению произвольных файлов на контроллере Jenkins. Специалисты предупреждают, что перечисленные векторы эксплуатации не исчерпывают всех возможностей - уязвимость может использоваться и другими способами.

В Jenkins 2.568 / LTS 2.555.3 разработчики ограничили типы, разрешённые для десериализации в затрагиваемом компоненте, только ожидаемыми. Данная уязвимость была обнаружена в рамках программы Bug Bounty, спонсируемой Европейской комиссией.

Помимо критической десериализации, исправлены ещё шесть уязвимостей среднего и высокого уровня опасности. В частности, обнаружены две проблемы, связанные с открытым перенаправлением (open redirect) в стандартном потоке аутентификации. Они получили идентификаторы CVE-2026-53436 и CVE-2026-53437. Причина в том, что Jenkins некорректно определяет, можно ли безопасно перенаправлять пользователя после входа в систему. Злоумышленник может задать URL с относительными путями (./ или ../). Jenkins проверяет такой адрес до того, как контейнер сервлетов сворачивает эти сегменты в протокол-относительный URL, начинающийся с //. Браузер интерпретирует двойную косую черту как признак схемы URL, что позволяет перенаправить пользователя на подконтрольный атакующему домен. Аналогичный эффект даёт включение в URL символа табуляции или перевода строки между двумя косыми чертами - эти символы игнорируются при проверке. В исправленной версии табуляция и перевод строки удаляются до проверки, а URL, содержащие // в любом месте, отвергаются.

Ещё одна уязвимость открытого перенаправления зафиксирована в подсистеме безопасности "Delegate to servlet container". CVE-2026-53440 позволяет атакующему с помощью параметра "from" перенаправить пользователя на вредоносный сайт после входа. Jenkins версий 2.567 и ниже не проверял, является ли этот параметр безопасным адресом. В патче добавлена соответствующая валидация.

Кроме того, обнаружены проблемы с недостаточной проверкой прав доступа. Уязвимость CVE-2026-53438 позволяет атакующему, имеющему разрешение Item/Cancel, отменять элементы очереди, к которым у него нет права Item/Read. Это следствие неполного исправления предыдущей уязвимости SECURITY-2278 от 30 июня 2021 года. Второй дефект - CVE-2026-53439 - позволяет пользователю с правом Overall/Read узнавать часовой пояс других пользователей и просматривать названия их личных представлений ("My Views") без дополнительной авторизации.

Особого внимания заслуживает хранимая межсайтовая уязвимость (stored XSS) CVE-2026-53441. Начиная с Jenkins 2.483 описание причины, по которой узел (агент) находится в офлайн-режиме (offline cause), могло содержать HTML и отображалось как разметка. В уязвимых версиях Jenkins 2.567 и более ранних не экранировалось пользовательское описание, которое может быть задано через API config.xml. Атакующий с правом Agent/Configure может внедрить в это поле вредоносный скрипт. В Jenkins 2.568 / LTS 2.555.3 все описания причин офлайн-состояния в стандартном интерфейсе теперь отображаются как обычный текст. Отмечается, что начиная с Jenkins 2.539 / LTS 2.541.1 включение политики безопасности контента (Content Security Policy) снижает риск, но не устраняет уязвимость полностью.

Наконец, уязвимость CVE-2026-53442 связана с тем, что POST-запросы config.xml записываются на диск в исходном виде, а GET-ответы возвращаются прямо с диска. Поэтому секреты, переданные в теле POST-запроса, сохраняются незашифрованными и затем отображаются при получении конфигурации. Это позволяет пользователям с правом Item/Extended Read прочитать открытые пароли или ключи. В исправлении Jenkins сначала убеждается, что данные могут быть корректно загружены, затем сериализует объект на диск уже с шифрованием секретов.

Организации, использующие Jenkins, должны немедленно обновить установки до версий 2.568 (еженедельная ветка) или 2.555.3 (LTS). Все более ранние версии считаются уязвимыми. Эксплуатация критической десериализации может привести к полному компромиссу контроллера Jenkins. Открытые перенаправления и XSS могут быть использованы для фишинга и кражи учётных данных. Утечка секретов через config.xml ставит под угрозу конфиденциальность доступа к внешним системам. Установка обновлений - единственная надёжная мера защиты.

Ссылки

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