Pre-authentication Remote Code Execution 漏洞利用 针对 TP-Link Omada ER605 路由器 通过 DDNS 客户端守护进程 (cmxddnsd)
针对 TP-Link Omada ER605 DDNS 客户端守护进程 (cmxddnsd) 的概念验证 (PoC) 漏洞利用链,当设备配置使用 Comexe DDNS 服务时触发。
⚠️ 法律/道德:本仓库仅用于授权安全研究和受控实验室复现。请勿用于您不拥有或未获明确测试许可的系统。
本 PoC 展示了一种组合利用方式,结合了:
该利用链对应以下已发布的问题:
| 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 的控制流劫持原语 |
注:本 README 将 CVE ↔ 问题描述 对齐到 ZDI/NVD 措辞。确切的利用编排可能因固件版本和本地复现细节而异;请参见本仓库中的
exploit.py和分析笔记。
< ER605(UN)_V2_2.2.42.2.2ER605(UN)_V2_2.2.4 Build 20240119(及更高版本)ZDI 将影响描述为当启用/配置 Comexe DDNS 时的网络邻近。实际复现通常需要能够充分观察和影响路由器的 DDNS/DNS 流量路径,以实现:
本仓库有意不提供在受控实验室之外实现该定位的逐步操作指南。
┌─────────────────┐ ┌─────────────────────────┐
│ TP-Link ER605 │ │ 攻击者 │
│ (cmxddnsd) │ │ (授权实验室设置) │
└───────┬─────────┘ └───────────┬─────────────┘
│ │
│ (1) DDNS 消息欺骗/冒充 │ CVE-2024-5244
│<-----------------------------------------│
│ │
│ (2) 解析时溢出影响 DNS 名称相关状态; │ CVE-2024-5243
│ 后续在 DNS 查询发送路径中发生泄露 │
│ (例如 sndDnsQuery) 以绕过 ASLR │
│<-----------------------------------------│
│ │
│ (3) 错误码溢出用于控制流劫持 → ROP → │ CVE-2024-5242
│ system(command) │
│<-----------------------------------------│
关键分离:
_chkPkt 相关的解析逻辑处理错误码/DNS 名称)。exploit.py — 用于实验室复现的 PoC 实现(需填充特定固件的常量/偏移量)。README.md — 本文档。本 PoC 需要固件特定的值(例如偏移量、gadget 地址、泄露解释),这些值取决于目标固件和 libc。这些值故意留为占位符,必须通过对测试固件的分析得出。
示例占位符(见 exploit.py):
system() 偏移解析逻辑中反复出现的反模式是:使用基于分隔符的长度复制攻击者控制的字段数据,而未适当限制在目标缓冲区大小内(概念上):
char *end = strchr(ptr, '\x01'); // 分隔符
int len = end - ptr; // 攻击者影响的长度
memcpy_or_strncpy(dest, ptr, len); // 缺少边界检查 -> 溢出
PoC 使用一种适合 MIPS 延迟槽的 gadget 形状:
move $t9, $s0
jalr $t9
move $a0, $s1 ; 延迟槽
通过寄存器保存覆盖控制 $s0 和 $s1,可实现紧凑的 system(command) 调用序列。
实际 payload 构造受以下因素约束:
\x01),具体约束见 exploit.py。
本代码和文档仅供教育目的和授权安全研究使用。未经明确许可的任何使用均被禁止,并可能违法。