Dubbo漏洞 - 15 CVE-2023-29234

CVE-2023-29234 — 恶意包解码反序列化

漏洞概述

CVE 编号:CVE-2023-29234

CVSS 评分:9.8(Critical)

影响版本:Dubbo 3.1.0 ~ 3.1.10, 3.2.0 ~ 3.2.4

修复版本:3.1.11, 3.2.5

攻击协议:Dubbo 协议

特点:影响 Dubbo 3.x 版本

漏洞原理

根因

在 Dubbo 3.x 的协议解码过程中

对畸形 RPC 包的处理存在缺陷

攻击者可以构造特殊的畸形数据包

导致解码器在错误的代码路径中反序列化不受信任的数据

与早期漏洞的区别

早期漏洞(CVE-2020-1948 等)利用的是正常解码路径

此漏洞利用的是异常/错误处理路径

类似 CVE-2021-43297 的思路,但在不同的代码位置

攻击方式

发送精心构造的畸形 Dubbo 协议包

包的格式故意不符合规范

解码器在尝试恢复/处理时触发反序列化

绕过正常路径上的安全检查

技术细节深入

Dubbo 3.x 解码架构变化

Dubbo 3.x 引入了 Triple 协议(基于 gRPC / HTTP/2)

但仍兼容 Dubbo 2.x 的 dubbo:// 协议

解码器需要同时处理新旧两种协议格式

兼容性代码 = 额外的攻击面

漏洞触发路径

1
2
3
4
5
6
7
8
9
攻击者发送畸形 Dubbo 协议包
→ DubboCodec.decode()
→ 读取 Header:magic 正确 (0xDABB)
→ 读取 Body:故意构造不完整/格式错误的数据
→ 解码器尝试解析,遇到异常
→ 进入 fallback/recovery 代码路径
→ 这条路径中缺少序列化安全检查
→ 对残留在 buffer 中的数据进行反序列化
→ 触发 gadget chain → RCE

与 CVE-2021-43297 的对比

对比项 CVE-2021-43297 CVE-2023-29234
Dubbo 版本 2.x 3.x
触发方式 异常时 toString() 异常时 fallback 解码
安全检查绕过 绕过正常路径检查 绕过 STRICT 模式检查
修复思路 不在异常中调用 toString 异常路径也加检查

共同点:都利用了异常/错误处理路径中的安全盲区

构造畸形包的思路

修改 Header 中 Data Length 字段(声明比实际 body 更长/更短)

在 Body 中插入非法的 Hessian2 类型标记

在合法字段之间插入额外的序列化数据

利用解码器的”容错”机制触发非预期的反序列化

复现说明

此 CVE 影响 Dubbo 3.x,环境搭建与 2.x 不同

环境要求

Dubbo 3.1.0 ~ 3.1.10 或 3.2.0 ~ 3.2.4

JDK 8 或 JDK 11

需要修改 Maven 项目使用 Dubbo 3.x 依赖

快速搭建

1
2
3
4
5
6
<!-- pom.xml 中替换 Dubbo 依赖 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.1.8</version> <!-- 受影响版本 -->
</dependency>

注意

Dubbo 3.x 的 API 有变化,Provider 配置方式可能不同

environments/cve-2023-29234/ 目录提供了基础框架

补丁分析

Dubbo 3.1.11 / 3.2.5 修复

加强了解码器的错误处理逻辑

在异常路径中也加入了反序列化安全检查

确保任何代码路径都不会绕过安全过滤

具体修复

1
2
3
4
5
6
7
8
9
10
11
12
// 修复前:异常路径中直接读取数据
catch (Exception e) {
// 尝试跳过当前包,读取下一个
skipBytes(remainingLength); // 可能触发反序列化
}

// 修复后:异常路径中安全丢弃数据
catch (Exception e) {
// 直接丢弃整个 buffer,不尝试解析
channel.close();
throw new DecodingException("Malformed packet", e);
}

思考与延伸

Dubbo 3.x 也不能幸免

虽然 3.x 引入了更多安全机制(STRICT 模式等)

但新的代码、新的特性也带来了新的攻击面

异常处理路径是安全审计的重要关注点(CVE-2021-43297 同理)

持续关注:Dubbo 的安全公告页面会持续发布新的 CVE


上一章 目录 下一章
14-CVE-2023-23638 Dubbo漏洞 16-安全防御与加固