CVE-2023-33246 Apache RocketMQ 5.1.0 漏洞深度剖析:从配置更新到命令注入的3层调用链

发布时间:2026/7/8 20:20:22
CVE-2023-33246 Apache RocketMQ 5.1.0 漏洞深度剖析:从配置更新到命令注入的3层调用链 CVE-2023-33246 Apache RocketMQ 漏洞深度剖析从配置更新到命令注入的3层调用链Apache RocketMQ作为阿里巴巴开源的分布式消息中间件在5.1.0及以下版本中存在一个高危远程命令执行漏洞CVE-2023-33246。本文将深入分析该漏洞的完整攻击链揭示从Netty请求处理到最终命令执行的3层关键调用栈。1. 漏洞概述与影响范围漏洞核心在于Broker组件的配置更新功能存在两个致命缺陷未授权访问配置更新接口缺乏身份验证机制命令注入FilterServerManager周期性任务中存在未过滤的参数拼接受影响版本包括Apache RocketMQ ≤ 5.1.0Apache RocketMQ ≤ 4.9.6典型攻击场景中攻击者只需满足以下条件即可实现RCE能够访问Broker的10911端口目标未配置访问控制白名单使用低于修复版本的RocketMQ2. 三层调用链深度解析2.1 第一层Netty请求处理入口漏洞触发始于Netty的请求处理流程关键调用栈如下NettyRemotingServer#processRequestCommand → NettyRemotingAbstract#buildProcessRequestHandler → AdminBrokerProcessor#processRequest当Broker接收到配置更新请求时NettyDecoder将字节流解码为RemotingCommand对象根据请求类型code25路由到AdminBrokerProcessor最终在Netty线程池中异步执行处理逻辑注意RocketMQ默认使用Netty作为通信框架这也是远程攻击能够触发的先决条件2.2 第二层配置更新逻辑AdminBrokerProcessor处理配置更新的核心代码如下public RemotingCommand updateBrokerConfig(ChannelHandlerContext ctx, RemotingCommand request) { Properties properties MixAll.properties2Object(request.getBody(), new Properties()); brokerController.getConfiguration().update(properties); // 关键更新点 // ...返回响应... }攻击者可以控制的参数包括参数名作用攻击利用价值rocketmqHomeRocketMQ安装路径命令注入关键参数filterServerNumsFilterServer数量触发命令执行的必要条件2.3 第三层FilterServerManager的周期性任务漏洞触发的最终环节在FilterServerManager的定时任务中public void createFilterServer() { int more brokerConfig.getFilterServerNums() - filterServerTable.size(); String cmd buildStartCommand(); // 拼接命令字符串 for (int i 0; i more; i) { FilterServerUtil.callShell(cmd, log); // 执行命令 } }命令拼接的关键逻辑当filterServerNums 0时进入执行流程buildStartCommand()会拼接rocketmqHome参数最终通过Runtime.getRuntime().exec()执行3. 漏洞利用关键技术点3.1 命令注入的巧妙构造攻击者需要精心构造rocketmqHome参数实现命令注入。典型Payload如下-c $|sh . echo [恶意命令];这种构造方式可以绕过简单的空格分割检查其原理是-c作为sh的参数$表示所有位置参数通过管道将后续命令传递给sh执行3.2 完整攻击流程时序攻击者连接Broker的10911端口发送配置更新请求设置filterServerNums1rocketmqHome[恶意命令]Broker接收请求并更新配置30秒内FilterServerManager定时任务触发系统执行拼接后的恶意命令4. 漏洞修复方案与防御建议官方修复方案主要包含两点增加配置更新的权限校验对rocketmqHome参数进行严格过滤企业级防御建议网络层面限制Broker端口的访问范围启用网络ACL策略配置层面升级到安全版本≥5.1.1或≥4.9.6启用TLS加密通信配置访问控制白名单运行时防护部署RASP进行命令执行拦截监控异常进程创建行为5. 漏洞挖掘的启示从安全研究角度这个漏洞给我们以下启示配置接口安全所有修改系统行为的接口都必须有权限控制命令执行风险任何动态拼接命令的地方都需要严格过滤定时任务检查周期性执行的任务是潜在的攻击入口点默认安全配置中间件应该遵循最小权限原则设计默认配置在实际项目中我曾遇到类似场景某系统通过HTTP接口接收配置更新但缺乏足够的输入验证最终导致配置文件覆盖漏洞。这再次验证了配置接口往往是安全薄弱环节。