Totolink 路由器栈溢出 RCE:一个参数写穿栈(CVE-2026-42020)
红队安全圈
红队安全圈
红队安全圈
2026年10月22日 20:00
重庆
去阅读
Totolink X2000R 的 boa Web 服务把 PPPoE 参数原样拷进栈,无任何校验,认证后一个 POST 就能覆盖返回地址,CVSS 9.1,厂商至今没发补丁。
01 引言
Totolink X2000R 是一款主打性价比的千兆家用路由器,主要销售市场在东亚地区,支持 IPv6、WPA3 和 mesh 组网。这个洞出在该路由器 Web 服务 boa 的 formIpv6Setup 处理逻辑:PPPoE 相关的 HTTP POST 参数被原样拷贝到栈上,没有任何检查,一个精心构造的请求就能打出任意代码执行。
CVSS 3.1 评分 9.1(CRITICAL),向量 AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H。同一个 formIpv6Setup 里还有一组姊妹漏洞:pppoe\_dns1 对应 CVE-2026-42019,本文的主角 pppoe\_dns2 对应 CVE-2026-42020,成因完全一致,是一类复制粘贴式的溢出。
先说结论:利用前提是拿到 Web 管理界面的认证凭据,这一点降低了被大范围远程打穿的概率;但结合 Totolink 历史上多次爆出认证绕过和硬编码后门,认证这道墙并不可靠。家里或客户现场在用 Totolink 的,这篇建议看完就动手排查。
02 漏洞速览
漏洞编号CVE-2026-42020
姊妹漏洞CVE-2026-42019(pppoe\_dns1)
影响产品Totolink X2000R
受影响固件X2000R-Gh-V1.0.0-B20250421.1327
漏洞类型栈溢出(CWE-121)
危害等级CVSS 9.1 CRITICAL
攻击前提认证后的 HTTP 请求
危害后果任意代码执行(Scope Changed)
公开 PoC暂无,崩溃现场已实测确认
修复状态厂商已确认,暂无补丁
03 漏洞成因
X2000R 的 Web 服务是嵌入式设备里最常见的 boa。处理 IPv6 设置的 formIpv6Setup 函数里,PPPoE 拨号配置的各个参数(DNS、账号等)从 POST 包体里取出来后,直接以 strcpy 方式拷贝到栈上固定大小的缓冲区。
以 pppoe\_dns2 为例:这个参数本该是一个 DNS 服务器地址,但代码没有做任何长度检查、没有格式校验,超长字符串会把栈上保存的 s0-s7 寄存器和返回地址 ra 一路覆盖掉。函数返回后,PC 直接跳到攻击者控制的地址。
崩溃现场的证据链非常干净:先在拷贝点下断,确认输入是 200 个 A 的重复;继续运行后收到 SIGBUS,PC 和 ra 都变成 0x42424242——也就是填充用的 B。栈布局完全可控,教科书级的 MIPS 栈溢出:
拷贝点断下,输入为 200 个 A
0x457dc4: addiu a0,sp,24
=> 0x457dc8: jal 0x47bf60
0x457dcc: move a1,v0
0 0x457dc8 in /bin/boa(+0x57dc8)
继续运行:SIGBUS,返回地址被覆盖
Program received signal SIGBUS
s0 : 0x41414141 s1 : 0x41414141
ra : 0x42424242 pc : 0x42424242
Invalid $pc @ 0x42424242
pppoe\_dns1(CVE-2026-42019)是同一个函数里前一行代码的同款问题,拷贝目标偏移略有不同(sp+88 与 sp+24),利用方式完全一致。换句话说,这个表单里的参数几乎是一个模板写出来的,坏也是一起坏的。
04 影响范围
确认受影响:X2000R 固件 TOTOLINK-X2000R-Gh-V1.0.0-B20250421.1327(当前在售版本)。
其他型号:boa 加 formIpv6Setup 这套代码在 Totolink 多款路由器上复用,同代码路径的型号大概率同样受影响,建议按代码路径自查。
修复版本:暂无。厂商 2026 年 6 月 25 日确认收到通报,之后 7 月 16 日、9 月 15 日两次跟进,仍未见补丁发布。
05 危害推演
目前没有公开 PoC,从成因可以推出演练路径:
第一步,拿到一个已认证的会话——弱口令、历史认证绕过,或者干脆是内网一台被信任的设备。
第二步,向 formIpv6Setup 提交 POST,pppoe\_dns2 塞入超长填充加 MIPS 大端 payload。
第三步,覆盖 ra 返回到 ROP 链或直接跳 shellcode,在 boa 进程内拿到执行权。
第四步,boa 通常以 root 运行,等于整台路由器失守:DNS 劫持、流量镜像、作为内网跳板都是顺手的后续动作。MIPS 嵌入式漏洞的利用门槛主要在栈随机化和 NX 上,这类消费级路由器往往两者都缺或者很弱,实战可打性高。
06 检测与排查
管理界面里查固件版本是否为 X2000R-Gh-V1.0.0-B20250421.1327 或同分支;在补丁发布前,把 Web 管理口从 WAN 侧关掉是硬性动作。
后台系统状态页查固件版本
从 WAN 侧探测管理界面是否暴露
curl -s -m 5 \
http://
返回登录页即暴露,关远程管理
确认 IPv6 表单接口是否可达
curl -s -m 5 \
http://<目标IP>/boaroute6.asp
07 修复建议
目前没有官方修复固件,只能缓解:关闭 WAN 侧远程管理,管理界面仅限 LAN 访问。
修改默认或弱口令——认证是这个洞唯一的前置条件,口令质量直接决定风险等级。
关注 Totolink 官网固件页,补丁发布后第一时间升级。升级后重新提交超长 pppoe\_dns2,应返回错误或参数被截断,而不是设备崩溃——这也可以当作修复验证方法。
对做安服的同学:给客户的路由器资产清单里把 Totolink 单独标出来,这个厂商的消费级产品线近年是重灾区。
08 红队视角
实战里这类洞的价值在落地后干什么。家用路由器坐在网络边界最内侧,打下来之后是内网横向的优质跳板;在红队场景里,一个已知口令的 Totolink 后台,价值不亚于一台域内主机。
几个实操经验:
嵌入式 MIPS 漏洞先确认字节序和架构——这批固件是 MIPS 大端,shellcode 和 ROP gadget 不能跨架构套用。
boa 的表单处理函数名(formXxx)可以直接在固件 binwalk 提取后的字符串里搜,定位处理逻辑比硬啃快很多。
调试时 qemu-system 或真机串口都行,但这类 SIGBUS 崩溃在真机 GDB 下最直观,寄存器现场一拉就知道覆盖到哪了。
同系列参数一起测:一个参数有问题的表单,兄弟参数大概率同款写法,本文的 dns1 和 dns2 就是例子。
09 POC 链接
https://talosintelligence.com/
vulnerability\_reports/
TALOS-2026-2394
说明:完整漏洞通告与崩溃现场,暂无公开 PoC 仓库
想要文中检测命令和排查清单的,留言说一声;关注不迷路,更新看得见。
— END —
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论