CVE-2025-60685CVE-2025-60685是存在于ToToLink A720R路由器固件中的一个栈缓冲区溢出漏洞。该漏洞位于sysconf二进制文件的sub_401EE0函数中,固件版本为V4.1.5cu.614_B20230630。漏洞的根本原因在于sysconf进程在读取/proc/stat文件时,使用fgets()函数将文件内容读取到栈上的局部缓冲区,随后使用sscanf()函数配合%s格式说明符将数据解析到单字节变量中。由于%s格式说明符不限制输入长度,攻击者可以通过精心构造/proc/stat文件内容,使其长度超过栈缓冲区的容量,从而覆盖相邻的栈内存区域,造成栈缓冲区溢出。拥有文件系统写权限的攻击者可利用此漏洞在设备上执行任意代码。
该漏洞的技术原理涉及多个不安全函数调用。首先,sysconf二进制文件在sub_401EE0函数中调用fgets()读取/proc/stat文件内容到栈缓冲区。fgets()函数会读取一整行数据到指定缓冲区,直到遇到换行符或达到指定的缓冲区大小限制。然而,问题出在后续的sscanf()调用上。该函数使用%s格式说明符将缓冲区内容解析到目标变量,%s会持续读取字符直到遇到空白字符,且不检查目标缓冲区的实际大小。当/proc/stat文件中某一行数据的长度超过栈缓冲区的的大小时,sscanf()就会将超出部分写入栈缓冲区,覆盖函数返回地址、保存的寄存器值以及其他局部变量的内存空间。攻击者需要具备文件系统的写权限才能修改/proc/stat文件内容。一旦成功写入恶意构造的数据,触发sysconf进程读取该文件时即可触发溢出。攻击者可利用栈布局特性覆盖返回地址,将程序执行流重定向到攻击者植入的shellcode,从而实现远程代码执行。