redpack-kr/CVE-2024-5243-pwn2own-toronto-2023
GitHub: redpack-kr/CVE-2024-5243-pwn2own-toronto-2023
针对 TP-Link ER605 路由器 DDNS 守护进程的三漏洞链式预认证远程代码执行 PoC,来自 Pwn2Own Toronto 2023。
Stars: 0 | Forks: 1
# CVE-2024-5243-pwn2own-toronto-2023
## TP-Link ER605 Pre-Auth RCE (CVE-2024-5242 / CVE-2024-5243 / CVE-2024-5244)
针对 TP-Link Omada ER605 DDNS 客户端守护进程 (`cmxddnsd`) 的概念验证 (PoC) 漏洞利用链,适用于设备配置为使用 Comexe DDNS 服务的情况。
## 概述
此 PoC 展示了一种链式攻击方法,结合了:
1. 针对 DDNS 协议层的欺骗/冒充原语,
2. 用于绕过 ASLR 的信息泄露,以及
3. 导致基于 ROP 的代码执行的控制流劫持。
该利用链对应以下已发布的问题:
| CVE | ZDI 公告 | 类型(如 ZDI/NVD 所述) | 在链中的高层角色 |
|---|---|---|---|
| CVE-2024-5244 | ZDI-24-503 | 依赖隐蔽式安全(DDNS 消息可被访问/欺骗) | 允许构造/欺骗看起来有效的 DDNS 消息 |
| CVE-2024-5243 | ZDI-24-502 | 处理 DNS 名称时的缓冲区溢出 | 用于影响/污染与 DNS 名称相关的状态,并开启 ASLR 绕过泄露路径 |
| CVE-2024-5242 | ZDI-24-501 | 处理 DDNS 错误代码时的栈缓冲区溢出 | 用作基于 ROP 的 RCE 的控制流劫持原语 |
## 受影响版本
- **目标**: TP-Link Omada ER605 VPN 路由器
- **受影响**: `< ER605(UN)_V2_2.2.4`
- **测试版本**: `2.2.2`
- **修复版本**: `ER605(UN)_V2_2.2.4 Build 20240119` (及更高版本)
## 威胁模型 / 前置条件(高层)
ZDI 将其影响描述为 **网络相邻**,前提是启用/配置了 Comexe DDNS。实际上,要复现该漏洞,通常需要具备充分观察和影响路由器 DDNS/DNS 流量路径的能力,以便:
- 重定向/冒充 Comexe DDNS 服务器端,以及
- 向路由器发送精心构造的 DDNS 响应。
本仓库有意避免提供在受控实验室环境之外实现该定位的分步操作指南。
## 攻击流程(概念性)
```
┌─────────────────┐ ┌─────────────────────────┐
│ TP-Link ER605 │ │ Attacker │
│ (cmxddnsd) │ │ (authorized lab setup) │
└───────┬─────────┘ └───────────┬─────────────┘
│ │
│ (1) DDNS message spoofing/impersonation │ CVE-2024-5244
│<-----------------------------------------│
│ │
│ (2) Parsing-time overflow affects DNS- │ CVE-2024-5243
│ name-related state; later leak occurs│
│ in DNS query sending path (e.g., │
│ sndDnsQuery) to bypass ASLR │
│<-----------------------------------------│
│ │
│ (3) Error-code overflow for control-flow │ CVE-2024-5242
│ hijack → ROP → system(command) │
│<-----------------------------------------│
```
关键区分:
- **解析溢出** 在 DDNS 消息解析期间触发(特别是通过 `_chkPkt` 相关的解析逻辑处理错误代码 / DNS 名称时)。
- **ASLR 绕过泄露** 稍后通过 **DNS 查询发送路径** 实现,在污染了与 DNS 名称相关的状态之后。
## 仓库内容
- `exploit.py` — 用于实验室复现的 PoC 实现(需要填入特定构建的常量/偏移量)。
- `README.md` — 本文档。
## 配置说明(特定构建)
此 PoC 需要特定构建的值(例如,偏移量、gadget 地址、泄露值解释),这些值取决于目标固件和 libc。这些值有意留作占位符,必须通过分析测试构建来推导。
占位符示例(见 `exploit.py`):
- libc 基址推导(泄露偏移 → libc 基址)
- `system()` 偏移
- 合适的 MIPS gadget 序列和约束
- ROP 链使用的稳定命令字符串引用地址
## 技术说明(高层)
### 根本原因模式(概念性)
解析逻辑中一个反复出现的反模式是,使用源自分隔符的长度将攻击者控制的字段数据复制到目标缓冲区,而没有正确地将其限制在目标缓冲区大小内(概念上):
```
char *end = strchr(ptr, '\x01'); // delimiter
int len = end - ptr; // attacker-influenced length
memcpy_or_strncpy(dest, ptr, len); // missing bounds check -> overflow
```
### ROP Gadget(MIPS 延迟槽)
PoC 使用了一个对 MIPS 延迟槽友好的 gadget 形状:
```
move $t9, $s0
jalr $t9
move $a0, $s1 ; delay slot
```
通过保存的寄存器覆写来控制 `$s0` 和 `$s1`,这实现了紧凑的 `system(command)` 调用序列。
### Payload 约束(依赖于实现)
实际的 Payload 构造受以下因素约束:
- 协议字段分隔符(例如 `\x01`),以及
- 字符串/解析行为可能会截断或更改复制的数据。
有关此复现中使用的确切约束,请参见 `exploit.py`。
## 免责声明
本代码和文档仅用于教育目的和经授权的安全研究。任何未经明确许可的使用均被禁止,并可能构成违法行为。
## 参考
- ZDI-24-501 (CVE-2024-5242): https://www.zerodayinitiative.com/advisories/ZDI-24-501/
- ZDI-24-502 (CVE-2024-5243): https://www.zerodayinitiative.com/advisories/ZDI-24-502/
- ZDI-24-503 (CVE-2024-5244): https://www.zerodayinitiative.com/advisories/ZDI-24-503/
- NVD 条目:
- CVE-2024-5242: https://nvd.nist.gov/vuln/detail/CVE-2024-5242
- CVE-2024-5243: https://nvd.nist.gov/vuln/detail/CVE-2024-5243
- CVE-2024-5244: https://nvd.nist.gov/vuln/detail/CVE-2024-5244
标签:ASLR绕过, CISA项目, Comexe DDNS, CVE-2024-5242, CVE-2024-5243, CVE-2024-5244, DDNS漏洞, DNS欺骗, Go语言工具, PoC, Pwn2Own, RCE, ROP链, TP-Link ER605, VPN路由器, ZDI-24-501, ZDI-24-502, ZDI-24-503, 中间人攻击, 信息泄露, 固件漏洞, 控制流劫持, 暴力破解, 栈溢出, 物联网安全, 硬件黑客, 缓冲区溢出, 编程工具, 网络安全, 路由器安全, 远程代码执行, 逆向工具, 隐私保护, 预认证漏洞