找回密码
立即注册
搜索
发回帖 发新帖

6323

积分

0

好友

798

主题
发表于 14 小时前 | 查看: 0| 回复: 0

1. 前言

在对 Tenda AC20 路由器进行安全分析时,我发现其固件在处理特定输入时存在缓冲区溢出漏洞。

这个问题的根源在于,程序拷贝用户输入时缺乏有效的边界检查。攻击者可以构造恶意请求触发溢出,轻则导致系统崩溃,严重时甚至可能获取更高权限,进而完全控制设备。

经过多轮验证与测试,我确认该漏洞风险较高,对设备安全性影响严重。整理了一份详细的技术报告后,我通过正规渠道提交给了厂商及 CVE 分配机构,目前漏洞已被正式收录,编号为 CVE-2025-8939。

2. 漏洞概述

Tenda AC20 路由器存在一处缓冲区溢出漏洞。攻击者可以向特定路径发送精心构造的 HTTP POST 请求来触发它,可能导致拒绝服务(DoS),甚至远程代码执行(RCE)。

3. 漏洞细节

AC20 路由器的最新固件可以从腾达官网下载。固件解包有两条路:一是使用在线工具,二是直接用 binwalk 解包。解包后可以得到以下文件结构:

binwalk解包Tenda AC20固件文件,终端显示LZMA压缩数据偏移量及MD5校验码

我们要找的目标是 /squashfs-root/bin/httpd 这个二进制文件。

为什么盯上 httpd?因为它是 Tenda 路由器的 Web 管理后台进程。大部分家用路由器(包括 Tenda)都提供一个 Web 管理界面,这个界面本质上就是路由器内部一个小型 Web 服务器 httpd 提供的。当你在浏览器里访问路由器后台时,请求会被发送到路由器本地运行的 httpd 服务,由它负责接收、解析 HTTP 请求——比如登录、改 Wi-Fi 密码、固件升级等操作,然后调用底层的系统函数或配置接口来完成。

由于 httpd 需要解析用户提交的数据,如果代码没做好边界检查,缓冲区溢出、命令注入这类问题就很容易冒出来。这也是为什么路由器的很多经典漏洞——溢出、注入、未授权访问——都集中在 httpd 这个二进制文件里。

解包文件里还有一个 dhttpd 二进制文件。它和 httpd 最大的区别在于:httpd 是主后台 Web 管理进程,面向用户可见的路由器管理界面;而 dhttpd 则用来跑一些非核心但需要 Web 接口的功能,比如诊断、子模块之类。

在 Tenda AC 系列里,Web 管理界面并没有用第三方服务器(如 lighttpd 或 boa),而是厂商自己写的 httpd。所有 HTTP 请求都由这个 httpd 直接处理,路由器后台的逻辑——Wi-Fi 配置、系统管理等——也都在里面实现。换句话说,Tenda 的 httpd 本身就是 Web 服务 + 业务逻辑的二合一。

回到正题。在 httpd 文件中,我们发现 fromSetWifiGusetBasic 函数存在缓冲区溢出的风险。这个函数会获取 shareSpeed 的值,然后将其复制到 Var 数组中,且没有进行长度检查,从而导致缓冲区溢出。

IDA Pro反编译伪代码显示fromSetWifiGusetBasic函数使用strcpy复制shareSpeed参数到栈缓冲区

交叉引用后再往上翻,会发现它其实有个前提条件:请求路径必须是 WifiGuestSet。

IDA Pro交叉引用窗口显示fromSetWifiGusetBasic被formDefineTendData函数调用

websFormDefine注册函数列表显示WifiGuestSet与fromSetWifiGusetBasic的绑定关系

这段代码的作用,是把 WifiGuestSet 这个字符串与具体的处理函数 fromSetWifiGusetBasic 绑定在一起。也就是说,只要有请求命中 WifiGuestSet,设备就会调用对应的函数去执行。

所以我们的 PoC 请求路径就应该是 POST /goform/WifiGusetSet HTTP/1.1。路径前加 /goform/ 是 Tenda 固件的惯用套路,结合代码逻辑基本可以确认。

4. 漏洞验证

确定漏洞点之后,我们先把固件跑起来,模拟一个真实运行环境,这样更方便观察是否因栈溢出而产生崩溃。

找到 /bin/httpd 文件后,使用以下命令模拟环境:

sudo chroot ./ ./qemu-mipsel-static ./bin/httpd

终端日志显示httpd启动时的连接错误及监听地址192.168.102.145:80

稍等片刻,浏览器输入 192.168.102.145 就能进入 AC20 路由器的管理页面。

Tenda AC20路由器Web管理界面显示网络状态及软件版本V16.03.08.12

跑起来之后,我们使用 burpsuite进行一个发包测试,向 shareSpeed 参数发送一堆垃圾数据:

Burp Suite抓包显示POST请求中shareSpeed参数被填充大量垃圾字符

可以发现 192.168.102.145/main.html 出现了崩溃信息。从终端也能观察到段错误,确认发生了栈溢出,也就是说 shareSpeed 这里确实存在一个缓冲区溢出漏洞。

终端日志末尾显示段错误信息及cfms_mib_proc_handle连接失败日志




上一篇:24小时34项第一,帧跃科技凭什么登顶英伟达GPU算子榜?
下一篇:Chrome紧急修复XML组件零日漏洞:CVE-2026-125350已遭在野利用
您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-11-13 17:44 , Processed in 0.972644 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表