CVE-2025-65221CVE-2025-65221是影响Tenda AC21 V16.03.08.16路由器固件的一个中等严重性缓冲区溢出漏洞。该漏洞存在于路由器的Web管理界面中,具体位于/goform/setPptpUserList接口的list参数处理逻辑中。由于该接口在处理用户输入的list参数时缺乏适当的边界检查,攻击者可以通过发送超长的字符串数据来触发缓冲区溢出条件。
Tenda AC21是一款面向家庭和小型办公环境的双频无线路由器,其Web管理界面提供了PPTP VPN用户列表管理功能。攻击者无需进行任何认证即可利用此漏洞,这意味着任何能够与路由器建立网络连接的邻接网络攻击者都可以尝试触发该漏洞。
成功利用此漏洞可能导致多种严重后果:首先是造成路由器服务拒绝(DoS),导致设备崩溃重启;其次是可能实现任意代码执行,在路由器上以特权用户权限执行恶意代码;最后,攻击者可能利用此漏洞进一步渗透内网环境,窃取敏感数据或发起进一步的攻击。
由于该漏洞的攻击向量为邻接网络(Adjiacent Network),攻击者需要处于目标路由器所在的本地网络环境中。这在一定程度上限制了该漏洞的利用范围,但考虑到家庭和办公网络中可能存在的不安全无线网络或被入侵的设备,该漏洞仍具有较高的实际威胁价值。建议受影响用户尽快采取防护措施,避免遭受潜在攻击。
该漏洞的根本原因在于Tenda AC21 V16.03.08.16固件中的/goform/setPptpUserList接口对list参数的处理存在缓冲区溢出问题。在Web服务器的CGI处理逻辑中,该接口接收用户通过HTTP POST请求提交的list参数值,并将其传递给底层的C语言字符串处理函数。
问题出在以下几个环节:首先,程序在为list参数分配固定大小的缓冲区时,未能根据实际输入数据的长度进行动态内存分配或边界检查;其次,当使用strcpy、sprintf等不安全的字符串函数将输入数据复制到栈上的局部缓冲区时,如果输入数据长度超过缓冲区容量,就会发生缓冲区溢出;第三,固件中缺乏现代编译器提供的栈保护机制(如stack canary),使得溢出的数据可以覆盖返回地址和函数指针等关键控制流数据。
攻击者可以通过构造精心设计的HTTP POST请求来利用此漏洞。请求的目标路径为/goform/setPptpUserList,list参数包含超长字符串(通常为数百字节到数千字节的重复字符序列)。在某些情况下,攻击者还可以在溢出数据中嵌入特定的ROP(Return-Oriented Programming)链或shellcode,以实现代码执行。
值得注意的是,该接口原本设计用于管理PPTP VPN用户列表,但输入验证的缺失使其成为攻击向量。攻击者利用此漏洞无需任何认证凭证,仅需发送特制的HTTP请求即可触发溢出条件。这使得漏洞的利用门槛较低,具有一定的现实威胁性。