CVE-2017-1000353

Jenkins Jenkins

ВЫСОКАЯ ВЕРОЯТНОСТЬ

Дата обнаружения

2025-10-02

Официальное описание

Jenkins contains a remote code execution vulnerability. This vulnerability that could allowed attackers to transfer a serialized Java SignedObject object to the remoting-based Jenkins CLI, that would be deserialized using a new ObjectInputStream, bypassing the existing blocklist-based protection mechanism.

🛡️
Технический анализ и план устранения

Суть уязвимости

Уязвимость CVE-2017-1000353 представляет собой критическую ошибку удаленного выполнения кода (RCE) в Jenkins. Проблема кроется в архитектуре встроенного интерфейса командной строки (Jenkins CLI), который использует протокол Remoting на базе Java-сериализации для обмена данными между клиентом и сервером.

Злоумышленник может отправить на сервер специально сформированный сериализованный объект SignedObject. При его обработке Jenkins использует ObjectInputStream для десериализации, что позволяет полностью обойти встроенный механизм защиты (чёрные списки опасных классов). В результате атакующий получает возможность выполнить произвольный код на сервере с привилегиями процесса Jenkins. Для успешной эксплуатации уязвимости злоумышленнику не требуется аутентификация.

Как исправить

Единственным надежным способом устранения данной уязвимости является обновление Jenkins до версии, в которой патч применен на уровне исходного кода. Разработчики полностью переработали механизм CLI и устранили возможность обхода блокировок.

  1. Создайте резервную копию текущей конфигурации и данных Jenkins (директория JENKINS_HOME).
  2. Обновите Jenkins до безопасной версии:
  3. Для пользователей основной ветки (Weekly): обновитесь до версии 2.57 или выше.
  4. Для пользователей ветки долгосрочной поддержки (LTS): обновитесь до версии 2.46.2 или выше.
  5. Если вы используете дистрибутивы на базе Debian/Ubuntu, выполните обновление пакетов:
apt-get update

apt-get install --only-upgrade jenkins

  1. Перезапустите службу Jenkins для применения изменений:
systemctl restart jenkins

  1. Убедитесь, что служба успешно запущена и работает на обновленной версии.

Временные меры

Если немедленное обновление системы невозможно, необходимо применить компенсирующие меры для защиты инфраструктуры. Основная цель — отключить уязвимый компонент Jenkins CLI (протокол Remoting).

  1. Отключите порт CLI через веб-интерфейс Jenkins:
  2. Перейдите в раздел Manage Jenkins (Настроить Jenkins).
  3. Выберите Configure Global Security (Настроить глобальную безопасность).
  4. В разделе CLI найдите настройку порта и выберите Disable (Отключить).
  5. Сохраните изменения.

  6. Отключите CLI на уровне параметров запуска Java (если веб-интерфейс недоступен). Добавьте специальный флаг в конфигурационный файл (например, /etc/default/jenkins или /etc/sysconfig/jenkins):

echo 'JAVA_ARGS="$JAVA_ARGS -Djenkins.CLI.disabled=true"' >> /etc/default/jenkins

  1. Перезапустите службу для применения параметра:
systemctl restart jenkins

  1. Ограничьте сетевой доступ к порту Jenkins CLI (если он был задан статически) с помощью межсетевого экрана, разрешив подключения только с доверенных IP-адресов администраторов:
iptables -A INPUT -p tcp --dport <ВАШ_ПОРТ_CLI> -s <ДОВЕРЕННЫЙ_IP> -j ACCEPT

iptables -A INPUT -p tcp --dport <ВАШ_ПОРТ_CLI> -j DROP