一、漏洞简介¶
1.1 漏洞背景¶
RocketMQ 的设计理念强调高性能和易用性,默认配置下不启用身份认证机制。这导致在许多部署场景中,RocketMQ 的各个组件(NameServer、Broker、Controller、Dashboard)直接暴露且无需任何认证即可访问,形成严重的未授权访问风险。
1.2 漏洞概述(包含 CVE 编号、危害等级、漏洞类型、披露时间等)¶
| 项目 | 内容 |
|---|---|
| 漏洞编号 | 暂无统一编号 |
| 危害等级 | 暂未找到权威信息 |
| 漏洞类型 | 未授权访问漏洞 |
| 披露时间 | 暂未找到权威信息 |
| 影响组件 | Apache RocketMQ 安全 |
| 属性 | 详情 |
|---|---|
| CVE编号 | 无独立 CVE(设计缺陷/配置问题) |
| 漏洞类型 | 未授权访问 / 认证绕过 |
| 危害等级 | 高(High) |
| CVSS评分 | 根据暴露程度评估为 7.5-9.1 |
| 影响组件 | NameServer、Broker、Controller、RocketMQ Dashboard |
漏洞描述:RocketMQ 默认配置下不启用访问控制(ACL),攻击者可直接访问 NameServer、Broker 等组件的管理接口,执行敏感操作包括: - 查看集群配置和拓扑信息 - 修改配置参数 - 创建/删除 Topic - 发送/消费消息 - 执行管理命令
<hr />核验说明:该问题未见统一 CVE 编号,本文结合原文与公开资料进行整理。
二、影响范围¶
2.1 受影响的版本¶
所有版本:除非显式配置了 ACL,否则所有 RocketMQ 版本都存在此问题。
2.2 不受影响的版本¶
无独立版本修复,需通过配置启用 ACL。
2.3 触发条件(如特定模块、特定配置、特定运行环境等)¶
- 组件暴露:RocketMQ 组件端口可从外部访问
- ACL 未启用:
aclEnable=false(默认值) - 无网络隔离:未通过防火墙、VPN 等手段限制访问
风险端口: - 9876:NameServer - 10911:Broker VIP - 10909:Broker HA - 8080:Dashboard(如部署) - 10912:Broker Fast failure
<hr />三、漏洞详情与原理解析¶
3.1 漏洞触发机制¶
默认配置问题:
# broker.conf 默认配置
aclEnable=false # ACL 默认关闭
未授权访问的影响:
| 组件 | 可执行操作 |
|---|---|
| NameServer | 查看 Topic 路由、Broker 注册信息、更新配置 |
| Broker | 创建/删除 Topic、发送消息、消费消息、更新配置、查看运行状态 |
| Dashboard | 可视化管理集群、执行所有管理操作 |
3.2 源码层面的根因分析(结合源码与补丁对比)¶
ACL 检查逻辑(简化示意):
public class AccessValidator {
private boolean aclEnable = false; // 默认关闭
public void validate(ChannelHandlerContext ctx, RemotingCommand request) {
if (!aclEnable) {
return; // ACL 未启用,直接放行
}
// 执行 ACL 验证逻辑
// ...
}
}
问题根源: - 出于性能和易用性考虑,ACL 默认关闭 - 用户未意识到安全风险,未主动配置访问控制 - 组件直接绑定到 0.0.0.0,监听所有网络接口
<hr />四、漏洞复现(可选)¶
4.1 环境搭建¶
使用默认配置启动 RocketMQ:
# 启动 NameServer
nohup sh bin/mqnamesrv &
# 启动 Broker
nohup sh bin/mqbroker -n localhost:9876 &
4.2 PoC 演示与测试过程¶
1. 使用 RocketMQ 命令行工具测试未授权访问
# 查看 Topic 列表(无需认证)
sh bin/mqadmin topicList -n <target_ip>:9876
# 创建 Topic(无需认证)
sh bin/mqadmin updateTopic -n <target_ip>:9876 -b <target_ip>:10911 -t evil_topic
# 发送消息(无需认证)
sh bin/mqadmin sendMessage -n <target_ip>:9876 -t evil_topic -p "malicious payload"
# 查看集群信息
sh bin/mqadmin clusterList -n <target_ip>:9876
2. 使用 Nmap 探测
nmap -sV -p 9876,10911 <target_ip>
3. 直接 TCP 连接测试
import socket
def test_unauthorized_access(host, port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, port))
# 发送 RocketMQ 协议握手
# 如果收到正常响应,说明存在未授权访问
# ...
五、修复建议与缓解措施¶
5.1 官方版本升级建议¶
- 暂未找到权威信息,建议以厂商安全公告、修复提交记录或发布说明为准。
5.2 临时缓解方案(如修改配置文件、关闭相关模块、增加 WAF 规则等)¶
1. 网络隔离(最优先)
# 仅允许内网访问
iptables -A INPUT -p tcp --dport 9876 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 9876 -j DROP
iptables -A INPUT -p tcp --dport 10911 -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -p tcp --dport 10911 -j DROP
2. 绑定内网地址
修改配置文件,仅绑定内网 IP:
# broker.conf
brokerIP1=<内网IP>
# namesrv.conf
bindAddress=<内网IP>
3. 部署在私有网络
- 使用 VPC 隔离
- 通过 VPN 访问管理接口
- 使用跳板机/堡垒机进行运维
4. 监控与告警
配置日志监控,检测异常访问:
# 监控配置更新操作
tail -f ~/logs/rocketmqlogs/broker.log | grep -E "updateBrokerConfig|updateNamesrvConfig"
六、参考信息 / 参考链接¶
6.1 官方安全通告¶
- RocketMQ ACL 配置文档:https://rocketmq.apache.org/docs/acl/
- RocketMQ 安全最佳实践:https://rocketmq.apache.org/docs/bestPractice/
6.2 其他技术参考资料¶
- RocketMQ 官方文档
- Apache RocketMQ GitHub Wiki
附录:漏洞影响总结¶
| 漏洞 | CVE编号 | 影响组件 | CVSS | 修复版本 |
|---|---|---|---|---|
| RCE 漏洞 #1 | CVE-2023-33246 | NameServer/Broker/Controller | ~9.8 | 5.1.1+ / 4.9.6+ |
| RCE 漏洞 #2 | CVE-2023-37582 | NameServer | ~9.8 | 5.1.2+ / 4.9.7+ |
| 未授权访问 | N/A | 所有组件 | ~7.5-9.1 | 配置 ACL |
安全加固检查清单¶
- [ ] 升级到最新安全版本(5.1.2+ 或 4.9.7+)
- [ ] 启用 ACL 访问控制
- [ ] 配置强密码和密钥
- [ ] 网络隔离,禁止公网直接访问
- [ ] 定期审计访问日志
- [ ] 配置监控告警机制
- [ ] 制定应急响应预案
报告生成时间:2026-03-21 文档版本:v1.0