Dubbo 漏洞演进与攻防对抗史
为什么需要这篇笔记
单独看每个 CVE 只能看到一个点
把所有 CVE 串起来看,才能理解 Dubbo 安全攻防的完整脉络
这是安全研究的核心能力:看到漏洞之间的因果关系和演进趋势
时间线总览
1 | 2019 ─── CVE-2019-17564 (HTTP 反序列化) |
五条攻击主线
主线一:序列化方式的对抗
1 | 时间线: |
攻防本质:攻击者始终在寻找”让服务端使用不安全的反序列化方式”的途径
防御者始终在堵:每堵一个,攻击者就找新的路径
主线二:安全检查位置的对抗
1 | [2020] 顶层类型检查 → HashMap key 绕过(CVE-2020-11995) |
核心教训:安全检查必须覆盖所有代码路径,包括:
正常路径 + 异常路径
入口 + 中间处理 + 返回值处理
顶层对象 + 嵌套对象
主线三:配置中心作为跳板
1 | [2021] ZooKeeper 无认证 → 写入恶意 YAML → SnakeYAML RCE |
本质:从配置数据到代码执行的跨越
YAML 的 !! 标签 = 任意类实例化
Script 路由 = 直接执行代码
攻击面转移:不直接攻击 Dubbo Provider,而是攻击它信任的数据源
主线四:运维/调试接口的攻击
1 | [2021] Telnet invoke → PojoUtils.realize() → JNDI 注入 |
Telnet 本来是运维调试用的
但它与 Dubbo 协议共用端口(20880)
无认证 + 可实例化任意类 = 完美攻击入口
主线五:Gadget Chain 的演进
1 | Java 原生序列化 → CC/CB 全系列均可(CVE-2019-17564) |
防御演进
| 时期 | 防御手段 | 被绕过方式 |
|---|---|---|
| 2020 前 | 无防御 | — |
| 2020 | Hessian2 黑名单 | HashMap 嵌套 |
| 2021 Q1 | 深度类型检查 | SerID 篡改 |
| 2021 Q2 | 服务端决定 SerID | 泛化调用 nativejava |
| 2021 Q3 | 禁用 nativejava | Telnet PojoUtils |
| 2021 Q4 | PojoUtils 白名单 | 异常路径 toString |
| 2022 | 修复异常处理 | — |
| 2023 | GenericFilter 加强 | PojoUtils/SPI 变体 |
| 2023+ | STRICT 白名单模式 | 尚未发现公开绕过 |
趋势:从黑名单 → 白名单,从局部检查 → 全路径检查
STRICT 模式是目前最有效的防御,但需要正确配置
漏洞发现者的思维模式
安全研究者是如何找到这些绕过的?
思维一:检查遗漏
“修复加在了 Hessian2 上,那 Java/Kryo/FST 呢?” → CVE-2021-25641
“检查了正常路径,那异常路径呢?” → CVE-2021-43297
“检查了入口,那中间处理呢?” → CVE-2023-23638
思维二:控制流劫持
“客户端能控制哪些参数?”
SerID 字段 → CVE-2021-25641
generic attachment → CVE-2021-30179
serialization attachment → CVE-2023-23638
思维三:攻击面转移
“直接打 RPC 被拦了,那配置中心呢?” → CVE-2021-30180/30181
“RPC 被拦了,那 Telnet 呢?” → CVE-2021-32824
思维四:触发点多样性
readObject → hashCode → toString → equals → compareTo → setter
每种触发点对应不同的 gadget chain 和攻击场景
对安全学习者的启示
学习漏洞分析的方法论
不要只看单个 CVE:要理解它在整个攻防链中的位置
关注修复方式:修复方式决定了下一个漏洞可能出现在哪里
画攻击面地图:列出所有输入点、处理路径、序列化/反序列化位置
**思考”修了什么,没修什么”**:每次修复都可能留下新的攻击面
自动化 + 手工:用 GadgetInspector 发现链,手工分析业务逻辑绕过
Dubbo 安全审计检查思路
1 | 1. 找到所有反序列化入口 |
推荐阅读
GitHub Blog: “Apache Dubbo: All roads lead to RCE” — 最佳的 Dubbo 漏洞综合分析
GitHub Security Lab: GHSL-2021-034~043 — 2021 年多个 CVE 的原始发现报告
Checkmarx: “The 0xDABB of Doom” — CVE-2021-25641 的精彩分析
SonarSource: “Apache Dubbo Consumer Risks” — 从 Consumer 视角分析风险
| 上一章 | 目录 | 下一章 |
|---|---|---|
| 16-安全防御与加固 | Dubbo漏洞 |