概要
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 并配置了宽泛的工具权限(Bash、Write、Edit),允许任何 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.3(2.3.0 基于此版本)与被篡改版本之间的唯一变化在 package.json 中。
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] 标记为可疑:
SafeDep 的 LLM 驱动文件评估功能识别出 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]:
- 更新:升级至
npm install -g cline@latest(版本2.4.0或更高) - 清理:如果您并非有意安装
openclaw,请将其移除:npm uninstall -g openclaw
参考资料
-
npm
-
oss
-
malware
-
cline
-
supply-chain
-
prompt-injection
SafeDep 博客最新内容
关注以获取开源安全与工程的最新更新和见解