CVE-2023-39785堆栈溢出漏洞分析

admin 2023年12月16日20:50:07评论26 views字数 3487阅读11分37秒阅读模式
CVE-2023-39785堆栈溢出漏洞分析

0x00 漏洞信息

Tenda AC8V4 V16.03.34.06版本中存在一个堆栈溢出漏洞,该漏洞位于set_qosMib_list函数的list参数中。

漏洞严重性评分(CVSS):未提供

指定的CNA(CVE编号分配机构):MITRE公司

日期记录创建:2023年08月07日

参考链接:Tenda官方网站/GitHub上的相关信息

0x01 漏洞影响

影响版本:Tenda AC8V4 V16.03.34.06

0x02 固件模拟

固件下载:

https://www.tenda.com.cn/download/detail-3518.html

解压zip包后是bin文件。

US_AC8V4.0si_V16.03.34.06_cn_TDC01.bin

binwalk可以直接解压,结果为mipsel32 (mips小端序)。

cp /bin/qemu-mipsel-static ./ sudo chroot . ./qemu-mipsel-static ./bin/sh
CVE-2023-39785堆栈溢出漏洞分析

模拟运行停在这里即可开始调试。

1.gdb调试

开始调试

 ./qemu-mipsel-static -g 1234 ./bin/httpdgdb-multiarch set arch mips set solib-search-path /your lib path file /your httpd path target remote 192.168.0.1:1234

调试发现程序在以下部分停止执行

  while ( 1 )  {    lan_ifname = ifaddrs_get_lan_ifname();    if ( ifaddrs_get_ifip(lan_ifname, v10) >= 0 )      break;    sleep(1u);  }

2.使用ida准备patch

查看汇编

li    $a0, 1           # secondsla    $v0, sleepnopmove    $t9, $v0jalr    $t9 ; sleepnoplw      $gp, 0x6B8+var_6A8($fp)b      loc_43ACECnop

将b loc_43ACEC改为nop

lan_ifname = ifaddrs_get_lan_ifname();if ( ifaddrs_get_ifip(lan_ifname, v10) < 0 )    sleep(1u);

保存(edit->patch program->apply)

└─$ sudo chroot . ./qemu-mipsel-static  ./bin/httpd        sh: can't create /proc/sys/kernel/core_pattern: nonexistent directory

 Yes:

       ****** WeLoveLinux****** 

  ****** Welcome to ****** connect: No such file or directory func:cfms_mib_proc_handle, line:191 connect cfmd is error.  connect: No such file or directory func:cfms_mib_proc_handle, line:191 connect cfmd is error.  connect: No such file or directory func:cfms_mib_proc_handle, line:191 connect cfmd is error.  connect: No such file or directory func:cfms_mib_proc_handle, line:191 connect cfmd is error.  connect: No such file or directory func:cfms_mib_proc_handle, line:191 connect cfmd is error.  connect: No such file or directory func:cfms_mib_proc_handle, line:191 connect cfmd is error.  connect: No such file or directory func:cfms_mib_proc_handle, line:191 connect cfmd is error.  connect: No such file or directory func:cfms_mib_proc_handle, line:191 connect cfmd is error.  sh: can't create /etc/httpd.pid: nonexistent directory sh: can't create /proc/sys/net/ipv4/tcp_timestamps: nonexistent directory [httpd][debug]----------------------------webs.c,158 bind: Address in use bind: Address in use bind: Address in use bind: Address in use bind: Address in use websOpenListen 253: Couldn't open a socket on ports 80 initWebs 511: websOpenServer failed main -> initWebs failed

3.修改网络配置错误

在is_lan_host中可以看到:

   v20.s_addr = ifaddrs_get_interface_addr("br0");   ifaddrs_get_if_netmask("br0", v17);

通过网络接口br0获取IP地址:

sudo ip link add br0 type bridge sudo ip link set dev br0 up sudo ip link set dev eth0 master br0 sudo ip address add 192.168.0.1/24 dev br0     sudo ip link set br0 up[httpd][debug]----------------------------webs.c,158 httpd listen ip = 192.168.0.1 port = 80 webs: Listening for HTTP requests at address 192.168.0.1

4.解决网页访问问题

CVE-2023-39785堆栈溢出漏洞分析

此时网页无法正确访问,而网页访问方法为websSetDefaultDir():

inet_aton(g_lan_ip, &in);strcpy(v6, off_504620);websSetDefaultDir(v6);

off_504620处数据为"/webroot":

lrwxrwxrwx  1 kali kali       9 Nov  6 05:05 webroot -> /dev/null

发现webroot_ro里面有大量网页信息,但webroot为空,因此创建软链接解决网页访问问题:

rm -rf webrootln -s webroot_ro/ webroot

CVE-2023-39785堆栈溢出漏洞分析

0x03 漏洞原理

CVE-2023-39785堆栈溢出漏洞分析
formSetQosBand函数中将网络中list的参数传递给var,set_qosMib_list对var的数据进行分割。
在set_qosMib_list函数中:
CVE-2023-39785堆栈溢出漏洞分析
根据上图猜测可以通过list达到栈溢出的效果,因此尝试进行漏洞复现:
CVE-2023-39785堆栈溢出漏洞分析
0x0048d188 in set_qosMib_list ()(gdb) ni

Program received signal SIGSEGV, Segmentation fault.0x3ffc5038 in ?? ().text:0048D184 move    $t9, $v0.text:0048D188 bal     set_client_qos.text:0048D18C nop
发现程序并没有因为 strcpy(v8, src);崩溃,而是因为.text:0048D188 bal set_client_qos崩溃。
CVE-2023-39785堆栈溢出漏洞分析

0x04 漏洞修复

修复版本:V16.03.34.06

关联产品:AC8 v4.0

更新日期:2023/1/12

软件版本:V16.03.34.09

关联产品:AC8 v4.0

更新日期:2023/7/24

https://www.tenda.com.cn/download/detail-3518.html

修复方式如下:

CVE-2023-39785堆栈溢出漏洞分析
CVE-2023-39785堆栈溢出漏洞分析

CVE-2023-39785堆栈溢出漏洞分析

从上图可见,set_qosMib_list方法的参数s的小于0x9D9,而v9的大小是256,但是中间增加了if判断,因而修复了该漏洞。

0x05 补充说明

之前由于没有进入循环set_client_qos(src, &v7);src的数据很大,没有被处理过(*v2 = 0;):

CVE-2023-39785堆栈溢出漏洞分析

这里又是一个溢出漏洞,没有对a1做任何处理。

V16.03.34.09的修复方法如下:

CVE-2023-39785堆栈溢出漏洞分析

原文始发于微信公众号(洞源实验室):CVE-2023-39785堆栈溢出漏洞分析

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月16日20:50:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2023-39785堆栈溢出漏洞分析https://cn-sec.com/archives/2304045.html

发表评论

匿名网友 填写信息