dubbo安全漫谈
字数 2068 2025-08-29 08:30:18
Apache Dubbo 安全漏洞分析与防护指南
1. Dubbo 协议基础
Dubbo 是一个高性能的 Java RPC 框架,其协议格式如下:
- 协议头:16字节
- 前2字节:魔数 "da bb"
- 第3字节:序列化方式标识(后5位)
- 剩余部分:请求ID、数据长度等
默认序列化方式为 Hessian2,但支持多种序列化方式,通过协议头第3字节的后5位标识。
2. Dubbo 安全漏洞全解析
2.1 CVE-2019-17564
影响版本:
- 2.5.x 全系列
- 2.6.0 <= Dubbo <= 2.6.7
- 2.7.0 <= Dubbo <= 2.7.4.1
漏洞原理:
- HTTP 协议下,Dubbo 会反序列化传输的数据
- 攻击者可构造恶意序列化数据实现 RCE
关键代码:
DubboCodec.decodeBody:132处理反序列化逻辑
修复方案:
- 升级至安全版本
2.2 CVE-2020-1948
漏洞原理:
- 利用 Hessian 反序列化漏洞
- 使用 Rome 反序列化链(EqualsBean 和 ToStringBean)
- 通过 Dubbo 协议传输恶意 Hessian 序列化数据
攻击特征:
- 典型的三次握手和四次挥手
- 协议头包含 "dabb" 魔数
- 数据部分包含 Hessian 序列化的恶意对象
修复方案:
- 升级至 Dubbo 2.7.7+
- 补丁增加了反序列化安全检查
2.3 CVE-2020-11995
漏洞原理:
- 对 CVE-2020-1948 的绕过
- 通过修改攻击方法绕过之前的防护
修复方案:
- 增加了更严格的反序列化过滤
2.4 CVE-2021-25641
漏洞原理:
- 利用 Dubbo 支持多种序列化方式的特性
- 当 Hessian2 设置了黑名单时,可尝试其他序列化方式
- 通过修改协议头中的序列化方式标识(第3字节后5位)绕过防护
攻击方法:
- 使用
makeXStringToStringTrigger等技术 - 尝试不同的序列化方式绕过黑名单
2.5 CVE-2021-30179
关键攻击点:
DecodeableRpcInvocation.decode处理反序列化- 通过
map.put("generic", "raw.return")控制流程 GenericFilter.invoke:110读取 generic 值并分支处理PojoUtils.realize0:454处理 Pojo 对象
利用方式:
- 使用
LinkedHashMap保持 entry 顺序 - 可利用
JdbcRowSetImpl和JndiConverter - 通过 setter 方法实现 RCE
修复方案:
- 增加反序列化黑白名单
- 检查实例化的类是否合法
- 默认禁用 Java 原生序列化
2.6 CVE-2021-43279
影响版本:2.7.14
漏洞原理:
- Hessian2 反序列化问题
Hessian2Output.writeString处理异常时触发 toString 方法- 如果存在 toString2rce 的 gadget 链,可实现 RCE
修复方案:
- 修复 Hessian2 的字符串处理逻辑
- 增加安全校验
2.7 CVE-2023-23638
关联漏洞:CVE-2021-30179 的绕过
影响版本:
- 2.7.x <= 2.7.21
- 3.0.x <= 3.0.13
- 3.1.x <= 3.1.5
绕过方式:
- 修改
CLASS_DESERIALIZE_ALLOWED_SET添加恶意类 - 清空
CLASS_DESERIALIZE_BLOCKED_SET - 使用与 CVE-2021-30179 相同的攻击方式
修复方案:
- 在
PojoUtils.realize0中增加检查 - 要求类必须实现
Serializable接口
3. 防护建议
- 及时升级:保持 Dubbo 版本为最新安全版本
- 协议安全:
- 避免使用 HTTP 协议
- 考虑使用 TLS 加密通信
- 序列化防护:
- 启用严格的白名单机制
- 禁用不必要的序列化方式
- 网络防护:
- 限制 Dubbo 端口访问
- 使用防火墙规则控制访问源
- 监控审计:
- 监控异常反序列化行为
- 记录和审计 Dubbo 服务调用
4. 漏洞验证与测试
在测试环境中验证漏洞时:
- 搭建对应版本的 Dubbo 环境
- 使用以下工具生成 payload:
- YSO (ysoserial)
- 自定义 Hessian 序列化工具
- 通过 Wireshark 抓包分析 Dubbo 协议流量
- 重点关注:
- 协议头魔数 "da bb"
- 序列化方式标识
- 反序列化过程中的异常行为
5. 总结
Dubbo 的安全问题主要集中在反序列化漏洞上,攻击者可以通过多种方式绕过防护实现 RCE。管理员应当密切关注 Dubbo 的安全公告,及时应用安全补丁,并采取纵深防御策略保护 Dubbo 服务。