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 и устранили возможность обхода блокировок.
- Создайте резервную копию текущей конфигурации и данных Jenkins (директория
JENKINS_HOME). - Обновите Jenkins до безопасной версии:
- Для пользователей основной ветки (Weekly): обновитесь до версии 2.57 или выше.
- Для пользователей ветки долгосрочной поддержки (LTS): обновитесь до версии 2.46.2 или выше.
- Если вы используете дистрибутивы на базе Debian/Ubuntu, выполните обновление пакетов:
apt-get update
apt-get install --only-upgrade jenkins
- Перезапустите службу Jenkins для применения изменений:
systemctl restart jenkins
- Убедитесь, что служба успешно запущена и работает на обновленной версии.
Временные меры
Если немедленное обновление системы невозможно, необходимо применить компенсирующие меры для защиты инфраструктуры. Основная цель — отключить уязвимый компонент Jenkins CLI (протокол Remoting).
- Отключите порт CLI через веб-интерфейс Jenkins:
- Перейдите в раздел Manage Jenkins (Настроить Jenkins).
- Выберите Configure Global Security (Настроить глобальную безопасность).
- В разделе CLI найдите настройку порта и выберите Disable (Отключить).
-
Сохраните изменения.
-
Отключите CLI на уровне параметров запуска Java (если веб-интерфейс недоступен). Добавьте специальный флаг в конфигурационный файл (например,
/etc/default/jenkinsили/etc/sysconfig/jenkins):
echo 'JAVA_ARGS="$JAVA_ARGS -Djenkins.CLI.disabled=true"' >> /etc/default/jenkins
- Перезапустите службу для применения параметра:
systemctl restart jenkins
- Ограничьте сетевой доступ к порту Jenkins CLI (если он был задан статически) с помощью межсетевого экрана, разрешив подключения только с доверенных IP-адресов администраторов:
iptables -A INPUT -p tcp --dport <ВАШ_ПОРТ_CLI> -s <ДОВЕРЕННЫЙ_IP> -j ACCEPT
iptables -A INPUT -p tcp --dport <ВАШ_ПОРТ_CLI> -j DROP