关键信息 标题 Tenda AC20 V16.03.08.12 Buffer Overflow 描述 漏洞类型: 基于堆栈的缓冲区溢出漏洞 影响设备: Tenda AC20路由器(固件版本V16.03.08.12) 攻击方式: 未授权远程攻击者可通过deviceList参数在/goform/setMacFilterCfg端点执行任意代码或导致服务拒绝(DoS) 漏洞原因: sub_46A2AC函数处理deviceList输入时,存在不安全的字符串操作,缺乏边界检查,导致堆栈损坏 漏洞细节 1. 参数检索: deviceList参数通过websGetVar在formSetMacFilterCfg中获取,并传递给sub_46A2AC进行规则处理。 2. 规则解析: sub_46A2AC按换行符(\n)分割deviceList并迭代每个条目,将它们传递给sub_46A8F8进行单独规则处理。 3. 数据提取: sub_46A8F8调用sub_46BC10解析每个条目。sub_46BC10使用strchr按回车符(\r)分割条目,将其分为“名称”部分(\r前)和“MAC地址”部分(\r后)。 4. 不安全复制: - strcpy(a2 + 32, a1): 将用户控制的“名称”部分复制到固定大小堆栈缓冲区(v5在sub_46A8F8中,大小为160字节)的32字节偏移处。 - strcpy(a2, v4): 将用户控制的“MAC地址”部分复制到同一缓冲区的起始位置。 - 两个strcpy调用均未验证输入长度与缓冲区大小,若“名称”或“MAC地址”部分超出剩余缓冲区空间,将导致堆栈缓冲区溢出,覆盖相邻内存(包括返回地址、保存寄存器和其他关键栈数据)。 来源 https://github.com/ZZ2266/-github/blob/main/AC20/formSetMacFilterCfg/readme.md 提交者 n0ps1ed (UID 88889)