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 | 攻击者发送畸形 Dubbo 协议包 |
与 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 | <!-- pom.xml 中替换 Dubbo 依赖 --> |
注意
Dubbo 3.x 的 API 有变化,Provider 配置方式可能不同
environments/cve-2023-29234/ 目录提供了基础框架
补丁分析
Dubbo 3.1.11 / 3.2.5 修复
加强了解码器的错误处理逻辑
在异常路径中也加入了反序列化安全检查
确保任何代码路径都不会绕过安全过滤
具体修复
1 | // 修复前:异常路径中直接读取数据 |
思考与延伸
Dubbo 3.x 也不能幸免
虽然 3.x 引入了更多安全机制(STRICT 模式等)
但新的代码、新的特性也带来了新的攻击面
异常处理路径是安全审计的重要关注点(CVE-2021-43297 同理)
持续关注:Dubbo 的安全公告页面会持续发布新的 CVE
| 上一章 | 目录 | 下一章 |
|---|---|---|
| 14-CVE-2023-23638 | Dubbo漏洞 | 16-安全防御与加固 |