周一发布的一项 CVE 描述了 Continue CLI 中用于拦截破坏性命令的防护机制。在无头模式和自动模式下,默认策略会为 Bash 工具授予 allow。唯一的硬性阻断是危险路径测试,匹配 /、/*、~、~/*、/usr、/etc、/bin、/sbin 及其前缀。
清单上没有什么
对 /home、/root、/var、/opt 或 /srv 的递归强制删除并未被禁用。更糟的是,命令行会通过 shell-quote 解析,这会把 $HOME 变成一个 空标记——因此 rm -rf $HOME 也会未通过危险路径测试,而 shell 随后会在命令真正启动时重新展开该变量。解析器和 shell 对这个字符串的含义并不一致,而检查依据的是解析器给出的结果。另一个问题是,带 -delete 的 find 只被评为高风险,并未被禁用;shred、wipefs、truncate 和 pkexec 则完全没有处理。
常规表述哪里说错了
有三点。第一,常见的 AI-CVE 模式是“你听说前就已经修复”——这次恰好相反。受影响范围写明为“截至 1.5.47”,而 1.5.47 正是当前已发布版本。没有修复版本。第二,8.3 和 7.4 的 HIGH 评分是报告 CNA 自行打出并标记为 Secondary 的;NVD 尚未发布主评分。凡是写“ NVD 将其评为 High”的说法都不对。第三,这一漏洞向量是有条件的,不是一次性的远程利用:CVSS 字符串包含 AC:H 和 AT:P,意味着代理必须在无人值守状态下运行,并且正在摄取攻击者可控文本。该记录本身的表述是,“该内容中的间接提示注入可能导致无人值守运行销毁调用用户的数据。” 目前没有证据表明该漏洞已在野外被利用——这是一份对拒绝列表的分析,而不是事件报告。
为什么时间线就是新闻本身
GitHub issue 于 7 月 19 日 创建,标题几乎与 CVE 一模一样。36 天后,它仍然处于打开状态,且看不到维护者的回复。自动模式和无头模式正是编码代理进入 CI 的方式,而这清楚地表明,这种 blocklist 方法会被变量展开击败。
一般性教训
当 shell 之后还会接收同一字符串时,仅靠危险字符串的拒绝列表并不能构成安全边界。所有以这种方式对 Bash 进行门控的代理运行框架都有同样的结构性问题。
