本文由笔者首发于奇安信攻防社区:29dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6X3L8%4u0#2L8g2)9J5k6h3u0#2N6r3W2S2L8W2)9J5k6h3&6W2N6q4)9J5c8Y4y4Z5j5i4u0W2i4K6u0r3x3K6l9H3x3l9`.`.一年多前,看到小米SRC公众号推文搞了个赏金活动,于是挖了挖当时比较新的一款AX9000路由器,挖到了两个命令注入漏洞,不过没什么本事,挖的都是授权后的,危害一般。小米给的赏金还是很可观的,但是补丁发布的速度不知为何比较慢(交了这么多厂商,还是Zyxel和华硕的响应速度最快),所以一直也没能分配CVE编号,我也遵守小米的规定在漏洞披露前未公开相关漏洞细节。
直到最近和其他朋友聊起这个漏洞,才想起来已经过去了一年多,应该是能公开了,于是又去找了小米SRC的运营小姐姐。经过一些流程的审批,得知这两个漏洞的确是已经推送完补丁可以披露了。不过有趣的是,小米申请的2023的CVE编号只剩一个了,2024的新编号还没申请,于是只先分配了一个漏洞的CVE,还有一个得等新编号。
正好和朋友聊到这个漏洞,也顺带回忆并简单记录了一下,想着既然写了就发出来吧。我这里也就先公开一个漏洞吧,另外一个后面看情况。时间有限,写的比较简略,希望能给各位师傅带来些许启发。
之后,可能会整理一些漏洞报告以及自己写的小工具放在我的Github上:cc1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6%4K9h3&6E0N6l9`.`.漏洞编号: CVE-2023-26315 / CNVD-2024-23093
厂商致谢: 2f1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6@1M7Y4g2K6N6q4)9J5k6h3#2A6i4K6u0W2j5$3!0E0i4K6u0r3P5X3S2Q4x3X3c8o6e0W2)9J5c8X3#2A6M7%4u0U0i4K6u0r3j5Y4g2D9L8r3g2@1K9h3&6K6i4K6u0r3j5h3c8$3K9i4y4G2M7Y4W2Q4x3@1k6U0N6X3g2u0k6q4)9K6c8o6f1@1y4R3`.`.248K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6@1M7Y4g2K6N6q4)9J5k6h3#2A6i4K6u0W2j5$3!0E0i4K6u0r3L8h3W2K6M7X3y4Q4x3V1k6T1N6h3I4D9k6i4c8A6L8Y4y4Q4x3V1k6S2k6s2k6A6M7$3!0J5P5g2)9K6c8X3y4$3k6f1W2V1i4K6y4p5y4e0b7$3
漏洞描述: 小米AX9000路由器在1.0.168版本及之前存在二进制漏洞(命令注入),该漏洞由于未对非法的appid做出有效限制而引起。已授权登录的攻击者在成功利用此漏洞后,可在远程目标设备上执行任意命令,并获得设备的最高控制权,造成权限提升。
BUT,怎么算CVSS Score应该都是7.2+高危,不太清楚官方的6.5是咋算的了QAQ 关于修复后的1.0.174版本的固件,厂商说明目前已经直接由云端推送补丁。首先,可以从官网下载对应版本的固件:小米路由器AX9000 稳定版 1.0.168
小米的固件最外面用的是UBIFS文件系统,固件本身没有加密,先用binwalk解出一个.ubi文件,然后用ubireader_extract_images xxx.ubi,可以在ubifs-root内解出三个.ubifs文件,对其中的xxx-ubi_rootfs.ubifs用binwalk再解开,即可得到里面的SquashFS文件系统,也就是核心部分。
小米的前端也是用的Lua编写的,但是其中的Lua文件不是源码,而是编译后的二进制文件,所以我们需要对其进行反编译。目前,对Lua反编译的常用工具有unluac和luadec。但是小米对Lua的解释器做了魔改,就不能直接用这两个工具进行反编译了,所幸已有师傅对此做了研究,并给出了专门针对小米固件的反编译工具unluac_miwifi和luadec_miwifi。至于如何对被魔改的解释器或编译器所编译出来的Lua字节码进行逆向,网上也有不少文章,这里不再展开。
我这里用的是unluac_miwifi,最终可以编译出一个unluac.jar,但一次只能对一个Lua文件进行反编译,所以我们需要写一个批量处理的简单脚本:
小米AX9000路由器固件是AArch64el架构的,由于网上似乎没有公开的AArch64的内核与文件系统,系统级仿真可参考下面这篇文章的步骤extract出来vmlinuz和initrd.img:eeaK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2V1K9h3!0*7k6i4u0G2i4K6u0W2j5$3!0E0i4K6u0r3j5X3!0S2M7X3c8K6i4K6u0r3M7h3g2E0N6h3q4S2M7X3y4Z5y4U0c8Q4y4h3k6T1N6h3I4D9M7$3g2&6k6g2)9J5k6h3S2@1L8h3H3`.
此外,小米AX9000的固件中采用了Apache Thrift的框架,使用C++编写的版本,相关源码可见:9c8K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7r3q4U0K9r3g2Q4x3V1k6@1K9s2u0A6k6Y4c8Q4x3V1k6@1M7X3g2W2i4K6u0r3L8h3q4K6N6r3g2J5i4K6u0r3L8r3W2T1i4K6u0r3j5%4m8H3i4K6u0r3M7%4u0U0i4K6u0r3N6r3S2J5K9h3k6@1 ,也可参考网络上其他资料,初步认识后对接下来的逆向分析可能会有一些帮助。此部分只对该漏洞调用链做大致的分析,感兴趣的师傅可继续深入分析相关细节。
在反编译的/usr/lib/lua/luci/controller/api/xqdatacenter.lua中,可以看到 URL /api/xqdatacenter/request 相关的handler函数是tunnelRequest函数,且是需要鉴权通过的。
关于鉴权,这里多说两句。首先,对于/api/xqdatacenter这个节点来说,设置sysauth = "admin"即确保只有admin账户可以访问这个node(小米路由器后台的默认账户就是admin),设置sysauth_authenticator = "jsonauth"即当token不存在或错误时,通过authenticator.jsonauth函数进行登录验证。对于具体的入口来说,定义entry{}内的第五个参数flag位为0x01(或&0x01=1)代表不需要鉴权,这里
...(已截断)
---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-281901.htm
[原创] 小米AX9000路由器CVE-2023-26315漏洞挖掘
148 浏览
5 回复
羡慕一眼出洞
膜拜一下大佬
从解包到了解AArch64el架构,就不觉明厉,过来膜拜
师傅方便说一下具体怎么提交漏洞吗?我看那些平台都是有要求提交url的,但是像挖路由器这些都是在本地跑固件模拟的怎么弄嘛?还有那个漏洞分析报告那些怎么写嘛?跟平时打比赛写wp一样还是有什么说法的
太牛了 ,学习了