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

关键攻击点

  1. DecodeableRpcInvocation.decode 处理反序列化
  2. 通过 map.put("generic", "raw.return") 控制流程
  3. GenericFilter.invoke:110 读取 generic 值并分支处理
  4. PojoUtils.realize0:454 处理 Pojo 对象

利用方式

  • 使用 LinkedHashMap 保持 entry 顺序
  • 可利用 JdbcRowSetImplJndiConverter
  • 通过 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

绕过方式

  1. 修改 CLASS_DESERIALIZE_ALLOWED_SET 添加恶意类
  2. 清空 CLASS_DESERIALIZE_BLOCKED_SET
  3. 使用与 CVE-2021-30179 相同的攻击方式

修复方案

  • PojoUtils.realize0 中增加检查
  • 要求类必须实现 Serializable 接口

3. 防护建议

  1. 及时升级:保持 Dubbo 版本为最新安全版本
  2. 协议安全
    • 避免使用 HTTP 协议
    • 考虑使用 TLS 加密通信
  3. 序列化防护
    • 启用严格的白名单机制
    • 禁用不必要的序列化方式
  4. 网络防护
    • 限制 Dubbo 端口访问
    • 使用防火墙规则控制访问源
  5. 监控审计
    • 监控异常反序列化行为
    • 记录和审计 Dubbo 服务调用

4. 漏洞验证与测试

在测试环境中验证漏洞时:

  1. 搭建对应版本的 Dubbo 环境
  2. 使用以下工具生成 payload:
    • YSO (ysoserial)
    • 自定义 Hessian 序列化工具
  3. 通过 Wireshark 抓包分析 Dubbo 协议流量
  4. 重点关注:
    • 协议头魔数 "da bb"
    • 序列化方式标识
    • 反序列化过程中的异常行为

5. 总结

Dubbo 的安全问题主要集中在反序列化漏洞上,攻击者可以通过多种方式绕过防护实现 RCE。管理员应当密切关注 Dubbo 的安全公告,及时应用安全补丁,并采取纵深防御策略保护 Dubbo 服务。

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 服务。