Apache Dubbo 历史高危漏洞分析
系统性学习 Dubbo 框架的安全漏洞:协议分析、反序列化利用、Gadget Chain、配置中心投毒
配套代码环境:~/Desktop/AI/dubbo历史漏洞分析/
学习路径导航
按以下顺序学习,每篇笔记都有配套的代码和环境
第一阶段:打基础(必读)
| 序号 | 笔记 | 核心内容 | 预计时间 |
|---|---|---|---|
| 00 | 00-Java序列化机制 | Serializable、readObject 自动调用、aced0005 | 1h |
| 01 | 01-Gadget-Chain原理 | POP 编程、Source/Gadget/Sink、ysoserial 使用 | 1.5h |
| 02 | 02-经典Gadget-Chain详解 | CC1/CC6/CB/ROME/Spring AOP 链完整调用链 | 3h |
| 03 | 03-Hessian2-Gadget-Chain | Hessian2 特有链、hashCode 触发、与 Java 原生对比 | 2h |
| 04 | 04-Dubbo架构与协议分析 | 0xDABB 协议格式、攻击面地图、源码关键路径 | 2h |
第二阶段:CVE 实战(按难度排序)
入门级
| CVE | 笔记 | 难度 | 攻击方式 |
|---|---|---|---|
| CVE-2019-17564 | 05-CVE-2019-17564 | ★☆☆ | HTTP POST + ysoserial,curl 就能打 |
| CVE-2021-32824 | 12-CVE-2021-32824 | ★☆☆ | Telnet 纯文本命令,不需要构造二进制包 |
进阶级
| CVE | 笔记 | 难度 | 攻击方式 |
|---|---|---|---|
| CVE-2020-1948 | 06-CVE-2020-1948 | ★★☆ | 构造 Dubbo 协议二进制包 + Hessian2 payload |
| CVE-2020-11995 | 07-CVE-2020-11995 | ★★☆ | HashMap 嵌套绕过顶层检查 |
| CVE-2021-30180 | 10-CVE-2021-30180 | ★★☆ | ZooKeeper 投毒 + YAML !! 标签 |
| CVE-2021-30181 | 11-CVE-2021-30181 | ★★☆ | ZooKeeper 投毒 + Nashorn JS 执行 |
高级
| CVE | 笔记 | 难度 | 攻击方式 |
|---|---|---|---|
| CVE-2021-25641 | 08-CVE-2021-25641 | ★★★ | 协议层 SerID 篡改,理解二进制协议攻击 |
| CVE-2021-30179 | 09-CVE-2021-30179 | ★★★ | 泛化调用 + nativejava 反序列化 |
| CVE-2021-43297 | 13-CVE-2021-43297 | ★★★ | 异常路径 toString 触发,需要精确控制 Hessian2 格式 |
| CVE-2023-23638 | 14-CVE-2023-23638 | ★★★ | 多种绕过路径,补丁绕过思维 |
| CVE-2023-29234 | 15-CVE-2023-29234 | ★★★ | Dubbo 3.x 畸形包攻击 |
第三阶段:融会贯通
| 笔记 | 核心内容 |
|---|---|
| 17-漏洞演进与攻防对抗史 | 五条攻击主线、防御演进、安全审计方法论 |
| 16-安全防御与加固 | STRICT 模式、安全检查清单、生产加固 |
配套代码环境速查
漏洞复现三步走
1 | 1. 启动环境 |
目录结构
environments/ — 每个 CVE 独立的 Docker 环境
dubbo-vuln-lab/ — Maven 靶场项目(6 种 Dubbo 版本 profile)
exploits/ — Python PoC 脚本 + Dubbo 协议构造工具
tools/ — ysoserial / marshalsec / dubbo-exp 使用指南
CVE 全景总览
按攻击面分类
Dubbo 协议直接攻击(端口 20880)
CVE-2020-1948, CVE-2020-11995, CVE-2021-25641, CVE-2021-43297
泛化调用攻击
CVE-2021-30179, CVE-2023-23638
HTTP 协议攻击(端口 8080)
CVE-2019-17564
配置中心投毒(ZooKeeper:2181)
CVE-2021-30180, CVE-2021-30181
Telnet 运维接口(端口 20880)
CVE-2021-32824
异常路径攻击
CVE-2021-43297, CVE-2023-29234
按 Gadget Chain 分类
ROME 链(hashCode→toString→getter)
CVE-2020-1948, CVE-2020-11995, CVE-2021-43297
CC/CB 链(readObject 触发)
CVE-2019-17564, CVE-2021-25641, CVE-2021-30179
Spring AOP 链(hashCode→JNDI)
CVE-2020-1948(可选链), CVE-2023-23638
XBean JNDI 链(setter→lookup)
CVE-2021-32824
SnakeYAML / Nashorn
CVE-2021-30180, CVE-2021-30181
时间线 & 影响
| 年份 | CVE 数量 | CVSS 9.8 | 趋势 |
|---|---|---|---|
| 2019 | 1 | 1 | HTTP 协议 |
| 2020 | 2 | 2 | Hessian2 攻击开始 |
| 2021 | 6 | 6 | 爆发年,多维度攻击 |
| 2023 | 2 | 2 | 补丁绕过 + Dubbo 3.x |
必备工具
| 工具 | 用途 | 格式 |
|---|---|---|
| ysoserial | Java 原生反序列化 payload | ObjectInputStream |
| marshalsec | Hessian2 payload + JNDI 服务 | Hessian2 |
| dubbo-exp | Dubbo 一键利用 | 自动处理 |
详细使用指南 → tools/README.md |
| 下一章 | |
|---|---|
| 00-Java序列化机制 |