2023年7月25日,Altin (tin-z),github.com/tin-z
ASUS RT-AX56U V2 和 RT-AC86U 路由器固件(版本分别低于或等于 3.0.0.4.386_50460 和 3.0.0.4_386_51529)在 httpd 服务的 detwan.cgi 函数中存在格式字符串漏洞,当攻击者构造恶意数据时可能导致代码执行。该漏洞也影响其他使用 httpd 服务的 ASUS 设备。点击此处查看详情。
参考:
该漏洞可实现 RCE,而此 PoC 仅实现 DoS,主要是因为固件是通过 QEMU 模拟的,因此堆栈与实际设备不同。前提条件:
virtualenv --python=python3 .venv
source .venv/bin/activate
pip install hexdump
python poc_crash.py --HOST 127.0.0.1 --PORT 12234 --test
# output expected: [+] Target supports detwan.cgi
python poc_crash.py --HOST 127.0.0.1 --PORT 12234 --dos

该漏洞可通过向 URI /detwan.cgi 发起 GET 或 POST 请求,并将特殊格式字符串作为 action_mode HTTP 参数的值来触发。
通过在 ghidra 中打开 httpd 二进制文件,可以看到地址 0x492c4 引用了字符串 "do_detwan_cgi"。

反编译器对该函数进行了分解,但没有显示全部内容,不过关键点已经在那里:
FUN_0001b70c 提取 action_mode 参数logmessage_normal 是由 libshared 公开的外部函数
logmessage_normal 的源代码可以在 asuswrt-merlin 固件中找到,具体位于文件 asuswrt-merlin/release/src/router/shared/misc.c 中,正如所看到的,它将 action_mode 的内容保存到局部变量 buf 中,而后者又会在 syslog 调用中使用。

libc 的 syslog 支持格式字符串,这就是漏洞的根源。
