AI 代理 Cline v2.3.0 被攻陷:从提示词注入到未授权 npm 发布

概要

2026 年 2 月 17 日,一个被泄露的 npm token 被用于发布流行 AI 编程工具 [email protected] 的未授权版本。该版本包含一个修改过的 package.json,其中包含一个 postinstall 脚本,会静默地在全局安装另一个包。

事件经过

GitHub 安全公告 GHSA-9ppg-jx86-fqw7 报道,一个未授权方获取了 npm 发布 token 并发布了 [email protected]。该恶意版本在 2 月 17 日大约存在了 8 小时(太平洋时间凌晨 3:26 至上午 11:30),随后被弃用。

安全研究员 Adnan Khan 的调查 在 Cline 的 AI 驱动 issue 分类工作流中发现了一个提示词注入漏洞。该工作流使用 claude-code-action 并配置了宽泛的工具权限(BashWriteEdit),允许任何 GitHub 用户通过创建 issue 来触发它。攻击者可以通过精心构造的 issue 标题注入提示词,诱使 Claude 从攻击者控制的 fork 中运行 npm install。由于分类工作流与 Cline 的 nightly 发布工作流共享 GitHub Actions 缓存作用域,这可以与缓存投毒相结合,从而窃取发布凭据(NPM_RELEASE_TOKEN、VS Code Marketplace 和 OpenVSX 凭据)。Token 被盗的确切方式尚未公开确认。值得注意的是,这些 token 的作用域是发布者身份而非单个扩展,这意味着 nightly 凭据可以发布生产版本。

有效载荷的作用

postinstall 脚本是:"postinstall": "npm install -g openclaw@latest"

OpenClaw 是一个合法的、非恶意的开源项目。该有效载荷没有窃取凭据、安装后门或泄露数据。这看起来像是一个概念验证:某人展示了攻击的可行性,而非部署真正的有效载荷。同样的 postinstall hook 本可以向每个运行 npm install -g [email protected] 的开发者交付凭据窃取器或反向 shell。攻击机制已被验证,即使有效载荷是无害的。

差异对比

合法版 2.2.32.3.0 基于此版本)与被篡改版本之间的唯一变化在 package.json 中。

https://npmdiff.dev/cline/2.2.3/2.3.0/

diff
Index: package/package.json =================================================================== --- package/package.json +++ package/package.json @@ -1,7 +1,7 @@ { "name": "cline", - "version": "2.2.3", + "version": "2.3.0", "description": "Autonomous coding agent CLI - capable of creating/editing files, running commands, using the browser, and more", "main": "dist/cli.mjs", "bin": { "cline": "./dist/cli.mjs" @@ -31,9 +31,10 @@ "typecheck": "npx tsc --noEmit", "link": "npm run build && npm link", "unlink": "npm unlink -g cline", "test": "vitest", - "test:run": "vitest run" + "test:run": "vitest run", + "postinstall": "npm install -g openclaw@latest" }, "keywords": [ "cline", "claude",

其他所有文件,包括 CLI 二进制文件 dist/cli.mjs,均与前一版本完全相同。

PMG 如何标记

SafeDep 包管理器卫士(Package Manager Guard,PMG) 在安装过程中将 [email protected] 标记为可疑:

Cline PMG 演示

SafeDep 的 LLM 驱动文件评估功能识别出 postinstall 脚本正在执行任意命令,在未经用户同意或明确声明依赖项的情况下安装全局包:

SafeDep 分析:Postinstall 脚本执行任意命令

使用 pmg 的用户在尝试安装时会被阻止或收到警报,从而阻止有效载荷执行。

对于希望在开发生命周期早期阶段捕获恶意依赖项的团队,SafeDep GitHub App 可以在已知恶意包到达安装阶段之前,标记引入这些包的 pull request。

事件后响应

Cline 撤销了被泄露的 token,移除了易受攻击的 AI 分类工作流(PR #9211),并将 npm 发布迁移到通过 GitHub Actions 的 OIDC 溯源。这消除了长期存在的静态 token 作为未来发布的攻击面。

用户后续步骤

如果您在 2 月 17 日太平洋时间凌晨 3:26 至上午 11:30 之间安装了 [email protected]

  1. 更新:升级至 npm install -g cline@latest(版本 2.4.0 或更高)
  2. 清理:如果您并非有意安装 openclaw,请将其移除:npm uninstall -g openclaw

参考资料

SafeDep 博客最新内容

关注以获取开源安全与工程的最新更新和见解