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 до исправленной версии.

  1. Определите текущую версию плагина:

    • В веб-интерфейсе Jenkins перейдите в Управление Jenkins (Manage Jenkins) -> Управление плагинами (Manage Plugins) -> Установленные (Installed).
    • Найдите плагин Script Security и проверьте его версию.
  2. Обновите плагин до одной из исправленных версий:

    • Минимальная исправленная версия: 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 файл последней версии с официального сайта обновлений и установите его через интерфейс управления плагинами.
  3. Перезагрузите Jenkins для применения обновления (если это не было сделано автоматически): bash # Способ 1: Через веб-интерфейс (Безопасная перезагрузка) # Перейдите в Управление Jenkins -> Подготовка к выключению (Prepare for Shutdown) # Или отправьте POST-запрос (если аутентификация настроена): curl -X POST http://JENKINS_USER:API_TOKEN@your-jenkins-host/safeRestart bash # Способ 2: Через системный сервис (systemd) sudo systemctl restart jenkins

Временное решение

Если немедленное обновление невозможно, примените следующие ограничивающие меры:

  1. Строго ограничьте права пользователей. В Управление Jenkins -> Настройка глобальной безопасности (Configure Global Security):

    • Включите Matrix-based security или Project-based Matrix Authorization Strategy.
    • Отзовите у всех пользователей, которым не требуется создавать или редактировать Pipeline-задания, разрешения:
      • Job/CREATE
      • Job/CONFIGURE
      • Job/READ (для чужих заданий, если возможно).
    • Для доверенных разработчиков предоставляйте права по принципу минимальных привилегий.
  2. Временно отключите возможность выполнения скриптов через песочницу (радикальная мера, может сломать существующие пайплайны):

    • В Управление Jenkins -> Настройка глобальной безопасности найдите раздел "Процесс сборки (Pipeline)".
    • Установите переключатель "Разрешить выполнение скриптов только тем, кому это явно разрешено (Only allow approved scripts to run)" в положение "Запретить выполнение скриптов (Deny all)".
    • Это полностью отключит выполнение Groovy-скриптов из пайплайнов.
  3. Изолируйте сеть. Обеспечьте, чтобы к веб-интерфейсу Jenkins (TCP/8080 или другой порт) был доступ только с доверенных IP-адресов (например, с CI/CD-агентов и рабочих станций разработчиков) через правила межсетевого экрана (firewall) или security groups.