Содержание статьи
Jenkins — популярная бесплатная платформа CI/CD, инструмент непрерывной интеграции и развертывания. Команды разработчиков используют ее для выкатывания новых версий продуктов в продакшен. DevOps-инженер выстраивает пайплайн, включающий юнит‑тесты и дополнительные этапы, которые должны выполняться при каждой публикации. Система автоматически прогоняет новый код по этой цепочке.
Jenkins стал отраслевым стандартом, его используют тысячи компаний и небольших команд разработчиков. Его разворачивают на собственных серверах, поэтому уязвимость CVE-2026-53435 крайне опасна: фактически она может стать открытыми воротами в корпоративную сеть.
CVE-2026-53435 — это уязвимость десериализации данных с оценкой опасности 8,8 по CVSS v3.1. Более высокую оценку она не получила, поскольку для эксплуатации нужна минимальная авторизация. Пользователь с низкими правами может отправить специально сформированный файл config.. Это не глобальный конфиг: атака проводится на уровне доступных пользователю объектов, таких как View или Job.
Из‑за недостаточной фильтрации Jenkins пропустит произвольные классы Java. За сериализацию и десериализацию отвечает XStream, в котором есть класс для чтения свойств DescribableList — специальный объект для взаимодействия с плагинами. В DescribableList нет фильтрации: все свойства автоматически считаются безопасными и обрабатываются как ViewProperty.
В результате атакующий получает возможность перехватывать и подменять HTTP-запросы. Последствия — полный захват контроллера Jenkins, чтение конфиденциальных файлов, включая конфиги, и удаленное выполнение кода.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Тестовый стенд
Для практики поднимем контейнер Docker. Создадим файл docker-compose.:
version: "3.8"services:
jenkins:
build: .
container_name: jenkins-vuln-lab
ports:
- "8080:8080" - "50000:50000" volumes:
- jenkins_home:/var/jenkins_home
environment:
- JAVA_OPTS=-Djenkins.install.runSetupWizard=falsenetworks:
default:
name: jenkins-lab-net
volumes:
jenkins_home:
Просто запустить Jenkins недостаточно — нужна минимальная настройка. В той же папке создаем Dockerfile:
FROM jenkins/jenkins:2.567-jdk21
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN jenkins-plugin-cli -f /usr/share/jenkins/ref/plugins.txt
COPY init.groovy.d/ /usr/share/jenkins/ref/init.groovy.d/
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
