Tenda AC10 v3缓冲区溢出漏洞CVE-2026-51380
腾达 AC10 V3 是百元级 AC1200 全千兆双频家用路由器,搭配四根高增益天线,总无线速率 1167Mbps,千兆网口即可跑满千兆宽带。
一、基本情况
腾达 AC10 V3 搭载了1GHz处理器,它支持波束成形、MU-MIMO 多设备并发,穿墙覆盖稳定,自带家长控制、IPv6、APP 远程管理。
腾达 AC10 V3 没有 USB 接口,不支持文件共享,适合只追求基础稳定上网、预算有限的用户,也适合中小户型日常追剧、手游使用。
栋科技漏洞库关注到 Tenda AC10 v3 路由器 UploadCfg 缓冲区溢出漏洞,漏洞现在已被追踪为CVE-2026-51380,CVSS 3.X评分9.8。
二、漏洞分析
CVE-2026-51380是腾达AC10 V3(固件版本V03.03.16.09)认证后缓冲区溢出,存在设备永久拒绝服务(变砖)、远程代码执行风险。

漏洞源于Tenda AC10 v3 路由器固件 V03.03.16.09 的 /cgi-bin/UploadCfg 配置恢复端点在解析用户上传配置时未对字段长度进行校验。
这就使得认证后的远程攻击者可向 nvram_set 写入超长字段触发缓冲区溢出,进而造成设备永久不可用(变砖)甚至可执行任意代码。
具体来说腾达AC10 v3路由器配置恢复功能存在高危安全缺陷:
固件校验和实现存在缺陷,已登录攻击者可绕过固件完整性校验,上传特制配置文件触发nvram_set内部函数缓冲区溢出。
溢出后设备会陷入无限重启死循环,Web管理后台无法访问、WiFi名称消失,硬件复位按键完全失效。
受影响版本中,Tenda AC10 v3.0 硬件搭配固件 V03.03.16.09(eCos 实时操作系统 + Realtek 芯片)的 Web 服务,
在收到 /cgi-bin/UploadCfg 请求后调用 FUN_80048a18 解析上传的配置文本,
该函数仅以对每行字符的 ASCII 累加值(行尾 @<sum>)作为完整性校验,
校验通过后立即将键值对传递给 nvram_set 的封装函数 FUN_80047190;
由于诸如 wan0_macclone_mode 等 NVRAM 变量的目标缓冲在固件内仅预分配约 32 字节,
而 UploadCfg 解析层未对单行长度或目标缓冲容量做任何边界检查,
攻击者仅需构造一个 wan0_macclone_mode=<超长字符串> 的配置并附上伪造的累加校验和即可覆盖相邻栈帧与全局数据。
1、固件勘测
使用binwalk解析官方固件,发现其采用eCos单片内核架构,无标准Linux文件系统。
通过strings工具提取静态字符串,定位DownloadCfg、UploadCfg、DownloadSyslog等关键网页接口。
处理CGI程序的核心逻辑集成在网页服务函数中,以下为配置导入接口的反编译处理流程:
undefined4 FUN_800ed674(int param_1)
{
// ... [Truncated Web Server Routing Logic] ...
iVar1 = FUN_80048a18(*(undefined4 *)(param_1 + 0x214), *(undefined4 *)(param_1 + 0x1b0));
if (iVar1 == 0) {
FUN_80290744(s_UploadCfg_success..._8035a9d4);
uVar6 = 100;
}
else {
FUN_80290744(s_UploadCfg_err!_8035a9c4);
uVar6 = 0xca;
}
// ...
FUN_80013cf4(1, 0x12, s_string_info=reboot_80337b98);
return 1;
}
校验和验证逻辑缺陷(签名绕过)
程序通过解析以@开头的行校验配置文件完整性,
但仅采用简易ASCII累加算法,未使用MD5、SHA-256等加密哈希算法,校验机制存在严重缺陷。
函数FUN_80048a18内部实现了该校验和处理逻辑:
undefined4 FUN_80048a18(char *param_1, int param_2)
{
// ...
if (local_830[0] != '#') {
if (local_830[0] != '@') {
iVar1 = FUN_829734c(local_830);
for (iVar9 = 0; iVar9 != iVar1; iVar9 = iVar9 + 1) {
iVar4 = iVar4 + local_830[iVar9]; // Simple ASCII summation
}
// ...
FUN_80047190(local_830, puVar2 + 1); // Forwards to nvram_set wrapper
}
else {
iVar5 = FUN_8296ac8(local_830 + 1, 0, 10); // Parsed expected checksum
}
}
// ...
}
2、漏洞缺陷拆解
该校验算法仅累加配置文本每个字符的字节值,攻击者可随意篡改配置参数,
通过简易脚本重新计算累加和,将数值拼接至@符号后,即可完全绕过完整性校验。
3、借助nvram_set触发缓冲区溢出
校验和验证通过后,配置参数会传入函数FUN_80047190(nvram_set封装函数)。
CGI解析器虽限制单行输入最大2047字节,但各NVRAM变量分配的缓冲区远小于该长度,如wan0_macclone_mode仅分配约32字节。
程序直接将用户输入字符串拷贝至目标缓冲区,未做长度边界校验,引发经典缓冲区溢出,破坏相邻栈内存与内存帧数据。
三、POC概念验证
(一)免责声明:下文描述未修复漏洞,仅可在本人授权硬件设备上测试。
1、生成攻击载荷:
脚本构造超长字符串配置项(如wan0_macclone_mode后拼接1000个A字符),
计算ASCII累加校验和,在配置文件末尾添加@计算值,生成恶意配置文件hacked_config.cfg。
2、身份认证:登录路由器管理后台(默认地址http://192.168.0.1)。
3、上传利用:进入系统管理-备份与恢复页面,或直接向/cgi-bin/UploadCfg接口提交POST请求,选中恶意cfg文件执行配置恢复。
4、现象:服务返回200状态码与成功提示,校验和校验放行;路由器自动重启加载篡改后的配置。
(二)危害评估:设备永久变砖
实测溢出造成的破坏远高于普通临时拒绝服务:
1、无限重启死锁:重启后内核初始化阶段加载NVRAM配置,调用nvram_set时立刻触发溢出崩溃,此时基础中断子系统尚未初始化。
2、无限崩溃循环:崩溃触发硬件复位,设备重启后再次读取损坏的NVRAM配置,重复崩溃流程。
3、硬件复位失效:长按机身复位按键无任何效果。崩溃发生在内核初始化GPIO控制器之前,系统无法识别硬件复位信号。
总结:设备彻底瘫痪变砖,仅能通过拆焊闪存芯片、JTAG/串口调试工具清空NVRAM分区才能修复。
(三)修复方案
1、完善完整性校验:舍弃简易累加校验,采用HMAC-SHA256等高强度加密签名算法,密钥存放于安全存储区域。
2、严格边界校验:在nvram_set函数内增加输入长度校验,超长参数直接拦截或安全截断。
3、安全默认配置:设备首次使用时强制修改管理密码,降低认证后漏洞被利用的风险。
四、影响范围
Tenda AC10 v3 ≤ V03.03.16.09
五、修复建议
Tenda AC10 v3 > V03.03.16.09
六、参考链接
管理员已设置登录后刷新可查看