今日 / 事故

Cline CLI npm 未授权发布事件复盘:AI 代理引发的供应链风险

原标题:Post-mortem: Unauthorized Cline CLI npm publish on February 17, 2026

aiid T2

解读说明:依据原文页面解读(约 9902 字)

这篇在讲什么

2026 年 2 月 17 日凌晨,Cline CLI 的 npm 包 v2.3.0 被未授权发布。该版本仅增加了一个 postinstall 脚本,用于全局安装合法开源项目 openclaw,未包含恶意代码或数据窃取行为。事件根源在于 2025 年 12 月引入的 AI 问题分类工作流,该工作流允许任意 GitHub 用户通过 Issue 标题向 Claude 代理注入指令,从而在 GitHub Actions 运行器上执行任意 Shell 命令。

攻击链的核心在于 GitHub Actions 缓存机制的滥用。虽然分类工作流权限受限,但它与拥有发布密钥的夜间发布工作流共享缓存作用域。攻击者通过填满缓存迫使系统驱逐合法条目,并植入匹配发布工作流键值的“毒化”缓存。当夜间工作流恢复缓存时,攻击者获得了执行代码的权限,进而窃取了 npm 发布令牌。安全研究员 Adnan Khan 于 1 月 1 日报告此漏洞,但直到 2 月 9 日公开披露后才得到处理。

在修复过程中,团队出现了人为失误:在轮换令牌时误删了错误令牌,导致暴露的令牌依然有效。2 月 17 日,第三方利用该令牌发布了受影响的版本。Cline 团队随后进行了全面取证,确认 VS Code 和 JetBrains 插件未受影响,且无用户数据泄露。此次事件凸显了将具有广泛工具访问权限的 AI 代理部署在处理不可信输入的 CI/CD 环境中的风险,这在功能上等同于赋予所有用户 Shell 访问权。

为防范此类事件,Cline 已完全移除 AI 分类工作流,禁止发布工作流使用缓存,并强制使用 OIDC 溯源证明替代长期令牌。此外,团队正在建立正式漏洞披露流程,并重新评估自动化凭证的安全性。这一案例表明,提示注入、缓存投毒和凭证窃取的组合攻击是行业正在学习防御的新威胁模式。

主要思路

事件调查采用全链路取证方法。首先,对 cline@2.3.0 与合法版本 cline@2.2.3 进行字节级对比,确认 CLI 二进制文件 SHA256 哈希一致,唯一差异为 package.json 中新增的 postinstall 脚本。其次,审计了 2025 年 12 月 21 日至 2026 年 2 月 17 日期间所有分发渠道(VS Code Marketplace, OpenVSX, npm, JetBrains)的发布记录,将其与 Git 标签及 GitHub Actions 工作流运行记录交叉验证,确认无其他未授权版本。

在根因分析中,团队复现了攻击路径:攻击者利用 claude-code-action 在 GitHub Actions 中的 Bash 工具权限,通过提示注入执行命令。由于工作流运行在默认分支,共享缓存作用域,攻击者利用 GitHub 缓存 10GB 驱逐机制,植入匹配夜间发布工作流键值的恶意缓存。当发布工作流恢复缓存时,攻击者获得代码执行权限并窃取 npm 令牌。修复措施包括移除 AI 工作流、禁用发布工作流缓存、轮换所有凭证,并实施 OIDC 溯源证明,确保每个发布版本链接到特定的 GitHub Actions 运行和源提交。

关键结论

受影响版本仅为 cline@2.3.0,暴露窗口约 8 小时。该版本包含的 openclaw 安装脚本为良性,无恶意代码或数据外泄。VS Code 和 JetBrains 插件未受影响,其令牌已在 2 月 9 日成功轮换。npm 令牌轮换失败是因为操作失误导致错误令牌被删除,而暴露令牌在管理页面未显示但依然有效。取证显示所有其他发布版本均可追溯至授权的工作流运行。事件表明,在 CI/CD 中赋予 LLM Shell 访问权并处理不可信输入,会创建等同于公开 Shell 访问的攻击面。

原文依据

评点

此事件揭示了 AI 代理在 CI/CD 管道中引入的新型供应链风险。当 LLM 拥有 Shell 访问权并处理不可信输入时,提示注入可导致缓存投毒和凭证窃取。对安全部署而言,这意味着必须严格限制 AI 代理的工具权限,避免在处理外部输入时赋予其执行代码的能力,并采用 OIDC 等短期凭证机制替代长期令牌,以增强发布流程的可审计性和安全性。

阅读原文

id: url:89e3f85f0604466c