关键漏洞信息总结 漏洞概述 厂商: Wavlink 产品: NU516U1 版本: WAVLINK-NU516U1-A-WO-20251208-BYFM 类型: 堆栈缓冲区溢出 产品用途: USB 打印服务器 漏洞基本信息 漏洞功能: (处理 OTA 升级) 和它的辅助函数 (字符转义)。 漏洞点: 在 函数内。 触发参数: (对应代码中的 -> )。 前提条件: - 攻击者拥有有效的登录会话(Cookie)。 - 请求中的 、 和 参数必须包含有效字符以绕过黑名单检查。 漏洞描述 处理 OTA 固件升级请求时, 函数会获取用户提交的 参数,调用辅助函数 处理该 URL,并打算将结果存储在堆栈上分配的固定大小缓冲区 (大小为260字节)中。 漏洞的核心在于辅助函数 在逻辑上的缺陷:它强制在输入字符串的每个字符前添加一个反斜杠进行转义,导致数据长度变为原来的两倍。随后, 函数将扩展后的数据附加到目标缓冲区,而不执行任何目标缓冲区边界检查。 攻击者只需发送一个超过130字节的 (经过扩展超过260字节)即可导致 缓冲区溢出。溢出的数据将依次覆盖本地变量、存储寄存器及最终覆盖函数的返回地址。当函数试图返回时,执行流将被捕获,导致远程代码执行 (RCE) 或拒绝服务 (DoS)。 内存布局及原因分析 目标缓冲区 v18: 位于堆栈上偏移量 处,大小为260字节。 保存寄存器及返回地址 $ra: 位于堆栈帧高地址。 调用者函数的栈帧。 存储寄存器。 可变缓冲区及最终覆盖函数返回地址。 扩展效果 输入: (10 字节)。 内存写入: (20 字节)。 关键点: 缓冲区为260字节,约130字节的输入已足以填满缓冲区。 溢出路径 输入长度达到180字节时,实际堆栈写入数据360字节。 额外100字节足以跨越 边界并完全覆盖堆栈底部存储的返回地址 。 内存内容为 ,它会以不同模式覆盖 。