Cloud Commander 目录遍历漏洞 CVE-2026-82460:任意文件读写可致远程代码执行

事件概述

2026 年 8 月 29 日,Coderaiser 发布 Cloud Commander 19.20.2,修复由 VulnCheck 研究员披露的 CVE-2026-82460 目录遍历漏洞。Cloud Commander 是一款用 Node.js 编写的自托管 Web 文件管理器,常被个人开发者、运维与小型团队用于通过浏览器直接浏览、编辑服务器文件并内置控制台。漏洞位于 REST 文件操作端点(rename/move/copy/pack/extract)与 Markdown 渲染端点的路径标准化流程,未认证攻击者只需访问到 Cloud Commander 暴露的 HTTP/HTTPS 端口即可利用,影响范围被官方与多个第三方数据库一致评为 Critical。CVSS 3.1 评分 9.8(CWE-22),CVSS 4.0 评分 9.3,攻击向量为网络、攻击复杂度低、无需任何权限与用户交互。

技术细节

Cloud Commander 通过内部 root() 函数对用户提交的路径进行规范化,但函数并未验证规范化后的路径是否仍位于 --root 配置的根目录之内。原本仅在 GET 列表端点额外检查了 indexOf(config('root')) !== 0,REST 操作与 Markdown 渲染均未做同样的限制,导致出现以下攻击面:

  • REST 文件操作:通过构造含 ../ 或 URL 编码后 %2e%2e%2f 的路径,可越权执行 rename/move/copy/pack/extract,写入或替换任意可写目录中的文件;
  • Markdown 渲染:通过 ?relative= 参数附带同样路径,可读取任意可读文件内容;
  • 典型武器化路径:覆盖 ~/.ssh/authorized_keys 注入攻击者公钥实现 SSH 免密登录、覆盖 Web 应用配置文件(如 PHP/Node.js 入口)或 crontab 调度文件,进而达成远程代码执行;
  • PostgreSQL/MongoDB 等数据库配置文件也是常见攻击目标,攻击者修改监听地址、修改管理员口令后借由重启服务达成完整控制;
  • 修复差异:旧版本尝试过在 GET 列表端点加 indexOf(config('root')) !== 0 检测,但并未同步应用到 REST/Markdown 端点,造成”修了表面的 root,没有改底层校验”的局部修补。

CVE 向量:AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N,意味着网络可达、无认证要求、不影响下游系统即可完整破坏组件机密性、完整性、可用性。

影响范围

  • 受影响版本:Cloud Commander 全部早于 19.20.2 的版本(npm 包 cloudcmd);
  • 利用门槛:默认配置若未启用认证并依赖 --root 沙箱,则无需任何凭据;若启用认证但只信任沙箱,仍可通过同一 REST/Markdown 端点越界;
  • 暴露面:通过 npm list cloudcmd 排查自托管节点;很多运维将 Cloud Commander 暴露在内网或反代后甚至公网端口;
  • 关联输入:仅当 path 拼装使用 ../、URL 编码 %2e%2e%2f 或双重编码组合能穿透;
  • 关联攻击:与近期多起暴露的 Web 文件管理器类(CVE-2026-63569、Gitea diffpatch CVE-2026-60004、Apache Camel CXF CVE-2026-47323)利用手法一致,均以路径或反序列化作为初始入口。

修复建议

  1. 立即升级:执行 npm install cloudcmd@latest 把 Cloud Commander 升级到 19.20.2 或更高,npm list cloudcmd 输出可见版本号应当 ≥ 19.20.2;
  2. 核查暴露面grep -n 'cloudcmd' /etc/nginx/conf.d/*.conf(或对应反代配置)排查是否对外开放,如确实需要公网,必须把 --root 限定到独立沙箱目录并对整个反代启源 IP 白名单;
  3. 认证强化:开启 Cloud Commander 内置账户认证(不再依赖单一 --root 沙箱),结合 OTP/TOTP 双因素,避免仅靠文件系统隔离;
  4. WAF 兜底:在反代或 WAF 层加入对 ../%2e%2e%2f、UTF-8 编码组合的拦截规则;记录触发来源并对账户采取临时封禁;
  5. 事故回看:检查 ~/.ssh/authorized_keys/etc/crontab/etc/cron.d/*、Web 应用入口文件是否出现非预期变更,对已注入 SSH 密钥的账户立刻禁用、对已植入 cron 的脚本立即清理;
  6. 网络层:将 Cloud Commander 放在 VPN/堡垒机后面,避免直接面向互联网;记录到内网时也要限定到运维管理网段;
  7. 节点清点:通过 ps -ef | grep cloudcmdsystemctl list-unit-files | grep cloudcmd、Docker/K8s 部署清单枚举所有节点,避免遗漏长尾实例。

参考来源