@DeRonin_: 使用本指南保护你的计算机免受 NPM 攻击,这些攻击会在一次安装中窃取一切。TanStack,一个代码库使用……
摘要
本文详细介绍了针对 NPM 上 TanStack 库的供应链攻击,并提供了一份全面的指南,通过锁定依赖项发布年龄、固定版本以及对 CI/CD 流水线和 IDE 扩展进行审计,来保护开发环境的安全。
USE THIS GUIDE TO PROTECT YOUR COMPUTER FROM NPM HACKS THAT STEAL EVERYTHING IN ONE INSTALL
周一,被数百万 Web 应用使用的代码库 TanStack 遭到黑客攻击。仅一次安装操作即可窃取您计算机上的所有密码、密钥和凭据。这远非本月首例黑客攻击,也绝非开端。以下是保护您的设备的方法:
**1. 对 npm 设置 7 天冷却期**
打开 `~/.npmrc`。保留所有现有行(身份验证令牌、注册表配置)。追加以下内容:
```text
min-release-age=7
minimum-release-age=10080
save-exact=true
```
这将使 npm 拒绝任何在过去 7 天内发布的包版本。攻击窗口通常不足 24 小时,您可以完全避开它们。
**2. 对 bun 设置相同的冷却期**
打开 `~/.bunfig.toml`(如果缺失则创建)。追加以下内容:
```toml
[install]
minimumReleaseAge = 604800
```
7 天换算成秒数,在 bun 的配置格式中提供相同的保护。
**3. 在项目中固定所有 npm 依赖项**
打开 `package.json`。从以下部分的版本中移除所有 `^` 和 `~`:
- dependencies
- devDependencies
- peerDependencies
仅使用确切版本。将锁定文件(`bun.lock` / `package-lock.json` / `pnpm-lock.yaml`)提交到 git,以冻结解析后的依赖树。
**4. 对 Python 保持同样的纪律**
如果您使用 uv(现代默认工具):提交 `uv.lock`,运行 `uv sync` 以还原。
如果您使用 pip:使用固定版本的 `requirements.txt`,运行 `pip install --require-hashes -r requirements.txt`。
如果您使用 poetry:提交 `poetry.lock`,使用 `poetry install --no-update`。
在生产项目中,永远不要信任 `>=` 或 `~=` 版本范围。
**5. 将 GitHub Actions 固定到提交 SHA**
停止使用 `actions/checkout@v4`。改为使用:
```yaml
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
```
每个第三方 Action 都在您的 CI 中运行,并有权访问仓库密钥。固定 SHA 意味着被入侵的维护者无法将恶意代码推送到您的流水线中。
**6. 审核您的 IDE 扩展**
Cursor、VSCode、Windsurf,每个扩展都是代码,以完全访问权限运行您的文件系统、剪贴板和打开的文件:
- 每月审查已安装的扩展
- 移除任何过去 30 天内未积极使用的扩展
- 安装前检查发布者、安装次数、上次更新日期、GitHub 源代码
- 永远不要安装那些请求其不需要的权限的扩展
**7. 锁定 API 令牌和凭据**
- 永远不要将 `.env` 提交到 git(在每个项目中添加到 `.gitignore`,没有例外)
- 使用最小作用域令牌:一个仓库、一个桶、一个工作区
- 每 90 天轮换 API 密钥,对关键密钥强制过期
- 按环境分隔令牌(dev / staging / prod)
- 在每个开发者账户上启用双因素认证(2FA):GitHub、npm、PyPI、Cloudflare、AWS、OpenAI、Anthropic
- 永远不要将密钥粘贴到 Claude / ChatGPT / 任何 AI 聊天中,它们会被记录
**8. 设置持续监控**
- 在每个仓库上启用 Dependabot 警报(免费,耗时 2 分钟)
- 安装 http://Socket.dev 或 Snyk 进行实时漏洞扫描
- 订阅 npm 和 PyPI 安全公告源
- 关注 @snyksec、@socketsecurity、@stepsecurity 以获取早期预警
**9. 如何检测是否感染了 TanStack 载荷**
如果您在 5 月 11 日周一 UTC 时间 19:20 到 19:30 之间安装了任何 `@tanstack/*` 包,请将主机视为已受 compromise。
检测签名:恶意清单包含 `"optionalDependencies": { "@tanstack/setup": "github:tanstack/router#79ac49ee..." }`。
包含此条目的任何版本均已被入侵。载荷通过 git-resolved 的 optionalDependency 交付,其 prepare 脚本运行 `router_init.js`(约 2.3 MB,潜入 tarball 根目录)。
快速检查方法:
- 在锁定文件中搜索 `@tanstack/setup` 引用
- 在 `node_modules` 中搜索任何 `router_init.js` 文件
- 如果显示任一结果,请立即跳转到第 10 节
未来的攻击将使用相同的技巧:恶意代码隐藏在 `optionalDependencies` 或 `postinstall`/`prepare` 脚本中。将 `grep -r "postinstall\|prepare" node_modules/*/package.json | grep -iE "curl|wget|eval|base64"` 添加到您的每周审计例程中。
**10. 如果您已经受 compromise 的紧急响应**
在疑似攻击窗口期间运行了安装?请严格按以下顺序操作:
- 轮换每个云凭据:AWS、GCP、Kubernetes 服务账户、Vault 令牌
- 轮换 GitHub 个人访问令牌、OAuth 令牌、SSH 密钥
- 撤销 GitHub、npm、PyPI、所有云服务提供商上的活动会话
- 审核过去几小时的 AWS / GCP / Kubernetes / Vault 审计日志,查找未经授权的 API 调用
- 将每个 `@tanstack` 包固定到最后已知良好的版本,并从干净的锁定文件重新安装
- 检查 `~/.npm`、`~/.config`、浏览器 cookie 存储中是否有篡改的文件
- 清除 `~/.bash_history`、`~/.zsh_history`、可能包含密钥的本地 AI 聊天日志
- 如果您以 root 或 sudo 运行安装:销毁机器,从头重新安装,仅从 git 恢复代码
**[ 为什么现在很重要 ]**
供应链黑客攻击链通常仅持续几个小时,直到恶意包被捕获并下架。在这几个小时内,每个运行 `npm install` 的开发者都会成为受害者。
更糟的是:由于第三方依赖关系,npm 甚至无法 UNPUBLISH 大多数 TanStack 恶意版本。注册表自身的 safeguards 是问题的一部分。您不能依赖平台,您必须保护自己。
过去 18 个月的模式:
- npm:5 月 11 日的 TanStack(42 个包,AWS/GCP/Vault 凭据),Shai-Hulud 蠕虫击中 Nx 包,chalk/debug/ansi-styles 蠕虫击中 qix 维护者
- GitHub Actions:tj-actions/changed-files 妥协暴露了数千个仓库的密钥
- PyPI:针对 AI/ML 包的 ongoing typosquatting 活动
- IDE 扩展:VSCode 市场被抓获托管凭据窃贼
频率正在上升,因为回报是巨大的。一个被入侵的包会在几小时内登陆数百万台机器。如果您不在今晚锁定这一切,您将暴露在下一次攻击中。而且会有一次。
是今晚花 30 分钟搞定,还是等待下一次攻击来清理您的机器?
完整 TanStack 分析:http://github.com/TanStack/router/issues/7383…
相似文章
@tan_stack: 安全公告 —— TanStack npm 包遭遇供应链攻击,影响 42 个 @tanstack/* 包(共 84 个版本……
一次高危供应链攻击影响了 42 个 TanStack npm 包,导致云凭证和 SSH 密钥被窃取。建议用户在攻击时间窗口内安装过相关包的,立即轮换凭证并从干净的 lockfile 重新安装。
事故复盘:TanStack npm 供应链入侵事件
本文详细复盘了针对 TanStack npm 包的供应链攻击事件,涉及缓存投毒、OIDC 令牌提取及凭证窃取恶意软件。所有受影响版本均已弃用;建议用户轮换凭证。
TanStack NPM 软件包遭入侵
报告显示 TanStack NPM 软件包存在安全漏洞,波及使用 TanStack Router 和 Start 框架的开发人员。
我们对 TanStack npm 供应链攻击的回应
OpenAI 回应 TanStack npm 供应链攻击,表示没有用户数据或生产系统被攻破,但有两名员工的设备受到影响,内部代码仓库中的少量凭证被窃取。
Grafana Labs GitHub仓库因TanStack npm供应链攻击遭入侵
Grafana Labs披露,一个网络犯罪团伙通过TanStack npm供应链攻击非法访问了其GitHub仓库,下载了代码库和内部数据,但未涉及客户生产系统。