一、漏洞简介

1.1 漏洞背景

CVE-2023-37582 是对 CVE-2023-33246 修复不完整的绕过漏洞。官方在 5.1.1/4.9.6 版本中修复了 CVE-2023-33246,但安全研究人员发现 NameServer 组件的修复并不完整,仍存在远程命令执行风险。

1.2 漏洞概述(包含 CVE 编号、危害等级、漏洞类型、披露时间等)

项目 内容
漏洞编号 CVE-2023-37582
危害等级 CRITICAL / 9.8
漏洞类型 远程代码执行漏洞
披露时间 2023-07-12
影响组件 Apache RocketMQ 安全
属性 详情
CVE编号 CVE-2023-37582
漏洞类型 远程代码执行(RCE)/ 代码注入
危害等级 严重(Critical)
CVSS评分 NVD暂未公布官方评分,评估为 9.8(严重)
CWE分类 CWE-94:代码生成控制不当(代码注入)
影响组件 NameServer

漏洞描述:RocketMQ NameServer 组件在 5.1.1 版本中对 CVE-2023-33246 的修复不完整。当 NameServer 地址泄露到外网且缺乏权限验证时,攻击者可以通过 NameServer 组件的配置更新功能执行任意命令。

<hr />

补充核验信息:公开时间:2023-07-12;NVD 评分:9.8(CRITICAL);CWE:CWE-94。

二、影响范围

2.1 受影响的版本

版本系列 受影响版本
RocketMQ 5.x 5.1.1 及以下版本
RocketMQ 4.x 4.9.6 及以下版本

注意:虽然 5.1.1/4.9.6 修复了 Broker 组件的漏洞,但 NameServer 组件仍受影响。

2.2 不受影响的版本

版本系列 安全版本
RocketMQ 5.x 5.1.2 及以上
RocketMQ 4.x 4.9.7 及以上

2.3 触发条件(如特定模块、特定配置、特定运行环境等)

  1. NameServer 暴露:NameServer 组件(端口9876)可从外网访问
  2. 缺乏权限验证:未启用 ACL 或认证机制
  3. 配置更新接口可用:攻击者可调用 UPDATE_NAMESRV_CONFIG 接口
<hr />

三、漏洞详情与原理解析

3.1 漏洞触发机制

CVE-2023-37582 的根本原因在于 CVE-2023-33246 的修复补丁未完全覆盖 NameServer 组件的配置更新处理逻辑。

漏洞根因: - 修复补丁主要针对 Broker 组件 - NameServer 的 DefaultRequestProcessor 中处理 UPDATE_NAMESRV_CONFIG 请求的代码路径未完全限制敏感配置项的更新 - 某些配置路径参数(如 configStorePathNamekvConfigPath)仍可被远程修改

3.2 源码层面的根因分析(结合源码与补丁对比)

修复补丁分析(Commit: c3ada731405c5990c36bf58d50b3e61965300703):

补丁增加了对以下配置项的保护: - configStorePathName - kvConfigPath

测试用例显示的修复逻辑

@Test
public void testProcessRequest_UpdateConfigPath() throws RemotingCommandException {
    final RemotingCommand updateConfigRequest = RemotingCommand.createRequestCommand(
        RequestCode.UPDATE_NAMESRV_CONFIG, null);
    Properties properties = new Properties();

    // 尝试更新禁止的配置项
    properties.setProperty("configStorePathName", "test/path");
    updateConfigRequest.setBody(MixAll.properties2String(properties).getBytes(StandardCharsets.UTF_8));

    RemotingCommand response = defaultRequestProcessor.processRequest(null, updateConfigRequest);

    // 验证返回权限拒绝
    assertThat(response.getCode()).isEqualTo(ResponseCode.NO_PERMISSION);
    assertThat(response.getRemark()).contains("Can not update config path");
}

完整修复: 在 5.1.2/4.9.7 版本中,官方对 NameServer 的配置更新处理进行了完整修复,确保所有涉及路径的敏感配置项都无法通过远程接口修改。

<hr />

四、漏洞复现(可选)

4.1 环境搭建

使用受影响的 5.1.1 或 4.9.6 版本:

# 拉取受影响版本
docker pull apache/rocketmq:4.9.6

# 启动 NameServer
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.6 sh mqnamesrv

4.2 PoC 演示与测试过程

针对 NameServer 的攻击

与 CVE-2023-33246 类似,但目标端口为 NameServer 端口(9876):

# 构造针对 NameServer 的配置更新请求
payload = "configStorePathName=/tmp/malicious\nkvConfigPath=/tmp/malicious"
# 发送到 NameServer 端口 9876
<hr />

五、修复建议与缓解措施

5.1 官方版本升级建议

必须升级到完整修复版本

当前版本 升级目标版本
RocketMQ 5.x ≤ 5.1.1 升级至 5.1.2 或更高版本
RocketMQ 4.x ≤ 4.9.6 升级至 4.9.7 或更高版本

5.2 临时缓解方案(如修改配置文件、关闭相关模块、增加 WAF 规则等)

1. 网络访问控制

# 严格限制 NameServer 端口访问
iptables -A INPUT -p tcp --dport 9876 -s <内网可信网段> -j ACCEPT
iptables -A INPUT -p tcp --dport 9876 -j DROP

2. 启用 ACL 在 NameServer 配置中启用访问控制,仅允许可信来源的配置更新请求。

3. 监控与审计 监控 NameServer 日志中的配置更新记录,及时发现异常行为。

<hr />

六、参考信息 / 参考链接

6.1 官方安全通告

  • Apache 官方公告:https://lists.apache.org/thread/m614czxtpvlztd7mfgcs2xcsg36rdbnc
  • oss-security 邮件列表:http://www.openwall.com/lists/oss-security/2023/07/12/1

6.2 其他技术参考资料

  • NVD 漏洞数据库:https://nvd.nist.gov/vuln/detail/CVE-2023-37582