Jenkins漏洞利用实战:CVE-2019-1003000远程代码执行
在Orange Tsai发布Jenkins漏洞利用后,我进行了一些深入研究。针对Jenkins的预认证远程代码执行(PreAuth RCE)是许多人追求的目标。
虽然与博客文章和推文不完全相关,但搜索过程中发现了以下漏洞利用方法。我意识到插件版本对于最新一轮Jenkins漏洞利用至关重要。坦白说,过去我从未过多关注插件,因为问题通常出现在Jenkins核心(如第一篇博客所述),但您可以通过访问jenkins-server/pluginManager/installed
查看插件。
Jenkins插件管理器
需要管理员权限,否则会看到:
如果有权限,还可以使用jenkins-cli客户端获取信息:
|
|
输出示例(部分插件列表):
|
|
据我所知,无法像WordPress那样在没有(提升的)身份验证的情况下枚举已安装的插件及其版本。如果您知道方法,请告诉我。目前只能尝试各种方法看看哪些有效。
CVE-2019-1003000漏洞分析
最新的特定漏洞与已安装的Jenkins插件有关。查看CVE-2019-1003000(https://nvd.nist.gov/vuln/detail/CVE-2019-1003000),它影响脚本安全插件(nist.gov显示2.49,但应为1.49),如Jenkins咨询中所述:https://jenkins.io/security/advisory/2019-01-08/#SECURITY-1266
该漏洞的利用代码在此处可用:https://github.com/adamyordan/cve-2019-1003000-jenkins-rce-poc,甚至附带Docker配置以启动易受攻击的版本进行测试。此特定漏洞利用的重要之处在于它是后认证的,但不需要脚本权限,只需要Overall/Read权限和Job/Configure权限。
我看到越来越多的服务器/管理员(理所当然地)阻止访问脚本和scriptText控制台,因为众所周知这会立即导致RCE。
在Pipeline: Declarative Plugin版本1.3.4.1之前、Pipeline: Groovy Plugin版本2.61.1之前和Script Security Plugin版本1.50之前发现了一个缺陷。
此PoC使用具有Overall/Read和Job/Configure权限的用户在沙盒模式下执行恶意修改的构建脚本,并尝试绕过沙盒模式限制以运行任意脚本(在本例中,我们将执行系统命令)。
作为背景,Jenkins的流水线构建脚本是用Groovy编写的。此构建脚本将在Jenkins主节点或节点上编译和执行,包含流水线的定义,例如在从节点中执行的操作。Jenkins还提供在沙盒模式下执行的脚本。在沙盒模式下,所有危险功能都被列入黑名单,因此普通用户无法对Jenkins服务器进行任何恶意操作。
运行漏洞利用
|
|
输出示例:
|
|
您当然也可以从中获取反向shell:
|
|
在监听端:
|
|
获得shell:
|
|
总结
如果安装了旧版本的脚本安全插件,并且您具有Overall/Read权限和Job/Configure权限(普通Jenkins用户更可能拥有这些权限),则可以使用此漏洞利用获取shell,且此漏洞利用不需要使用脚本控制台。