CVE-2019-1003029
Jenkins Script Security Plugin
2022-04-25
Jenkins Script Security Plugin contains a protection mechanism failure, allowing an attacker to bypass the sandbox.
Технический анализ и план устранения
Суть уязвимости
Уязвимость (CVE-2019-1003029) в плагине Jenkins Script Security позволяет злоумышленнику, имеющему доступ к созданию/редактированию заданий (Job) или конвейеров (Pipeline), обойти механизм песочницы (Sandbox) Groovy. Это дает возможность выполнить произвольный код на стороне контроллера Jenkins с правами пользователя, под которым работает процесс Jenkins, что может привести к полному компрометированию системы.
Как исправить
Основной метод — обновление плагина Script Security до исправленной версии.
-
Определите текущую версию плагина:
- В веб-интерфейсе Jenkins перейдите в Управление Jenkins (Manage Jenkins) -> Управление плагинами (Manage Plugins) -> Установленные (Installed).
- Найдите плагин Script Security и проверьте его версию.
-
Обновите плагин до одной из исправленных версий:
- Минимальная исправленная версия:
1.53 - Рекомендуемая версия: Последняя стабильная версия из центра обновлений.
- Способ обновления:
- Через веб-интерфейс: Управление Jenkins -> Управление плагинами -> Доступные (Available). Найдите "Script Security", отметьте его и нажмите "Установить без перезагрузки" или "Загрузить сейчас и установить после перезагрузки".
- Через CLI (если установлен
jenkins-cli):bash java -jar jenkins-cli.jar -s http://your-jenkins-host/ install-plugin script-security -deploy - Через прямой URL (для автоматизации): Загрузите
.hpiфайл последней версии с официального сайта обновлений и установите его через интерфейс управления плагинами.
- Минимальная исправленная версия:
-
Перезагрузите Jenkins для применения обновления (если это не было сделано автоматически):
bash # Способ 1: Через веб-интерфейс (Безопасная перезагрузка) # Перейдите в Управление Jenkins -> Подготовка к выключению (Prepare for Shutdown) # Или отправьте POST-запрос (если аутентификация настроена): curl -X POST http://JENKINS_USER:API_TOKEN@your-jenkins-host/safeRestartbash # Способ 2: Через системный сервис (systemd) sudo systemctl restart jenkins
Временное решение
Если немедленное обновление невозможно, примените следующие ограничивающие меры:
-
Строго ограничьте права пользователей. В Управление Jenkins -> Настройка глобальной безопасности (Configure Global Security):
- Включите Matrix-based security или Project-based Matrix Authorization Strategy.
- Отзовите у всех пользователей, которым не требуется создавать или редактировать Pipeline-задания, разрешения:
Job/CREATEJob/CONFIGUREJob/READ(для чужих заданий, если возможно).
- Для доверенных разработчиков предоставляйте права по принципу минимальных привилегий.
-
Временно отключите возможность выполнения скриптов через песочницу (радикальная мера, может сломать существующие пайплайны):
- В Управление Jenkins -> Настройка глобальной безопасности найдите раздел "Процесс сборки (Pipeline)".
- Установите переключатель "Разрешить выполнение скриптов только тем, кому это явно разрешено (Only allow approved scripts to run)" в положение "Запретить выполнение скриптов (Deny all)".
- Это полностью отключит выполнение Groovy-скриптов из пайплайнов.
-
Изолируйте сеть. Обеспечьте, чтобы к веб-интерфейсу Jenkins (
TCP/8080или другой порт) был доступ только с доверенных IP-адресов (например, с CI/CD-агентов и рабочих станций разработчиков) через правила межсетевого экрана (firewall) или security groups.