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