检测 CVE-2026-45321(TanStack 供应链攻击)和 Mini Shai-Hulud 蠕虫工件。扫描 node_modules、锁文件、持久化钩子(Claude Code、VS Code、systemd、LaunchAgent)、GitHub 工作流、Git 历史、C2 域名和 AI 工具配置。
⚠️ 免责声明: 此工具是为我自己的使用场景而构建的。所有指标均来自以下通告源:
如果在本次更新之后出现新的 IOC、负载变体或攻击者基础设施,它们将不会被检测到。请始终与最新发布的通告进行交叉核对。
检测本地项目检出中的 TanStack 供应链入侵(CVE-2026-45321)及相关 Mini Shai-Hulud 蠕虫工件。
该脚本旨在用于源代码检出、CI 作业和 Docker 构建中的快速分类。结果干净表示未发现以下任何已知指标。这并非完整的取证调查,也不保证机器从未暴露过。
| 类别 | 详情 |
|---|---|
| 入侵包 | 全部 42 个 @tanstack/* 包 + 20 个蠕虫传播的次级受害者(@mistralai、@opensearch-project、@draftlab、safe-action 等) |
| 锁定文件扫描 | pnpm-lock.yaml、yarn.lock、bun.lock、bun.lockb、package-lock.json,包括多行 npm v3 packages 条目和 Yarn v1 selector/version 节 |
| 负载文件 | node_modules 中的 router_init.js、tanstack_runner.js,含 SHA-256 校验;精确哈希匹配和哈希不匹配均会导致扫描失败 |
| 感染向量 | 任何已安装包中的 @tanstack/setup 作为 optionalDependency |
| 持久化 | 项目和主目录设置中的 Claude Code SessionStart 钩子、VS Code folderOpen 任务、gh-token-monitor(LaunchAgent + systemd)、恶意 GitHub 工作流 |
| 磁盘工件 | .claude/router_runtime.js、.claude/setup.mjs、.vscode/setup.mjs、gh-token-monitor.sh、com.user.gh-token-monitor.plist |
| 源 IOC | 攻击者提交哈希、C2 域名(api.masscan.cloud、git-tanstack.com)、Session Protocol 端点、PBKDF2 盐值、活动字符串 |
| Git 历史 | 作者为 [email protected] 的提交 |
| 分支模式 | dependabot/github_actions/format/* 和 dependabout/*/setup-formatter |
| AI 工具配置 | 被篡改的 .claude/mcp.json 和 .kiro/settings/mcp.json |
| 运行中的进程 | 守护化的负载和 gh-token-monitor 进程 |
| npm 令牌 | 被勒索标记的令牌(IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner) |
pnpm、yarn、bun,然后是 npm)选择一个项目锁定文件。如果仓库有意携带多个锁定文件,请分别扫描每个相关包管理器状态。npm 可用且通过足够认证以执行 npm token list 时运行。HOME。在 CI 或容器中,该路径可能不同于开发者工作站的主目录。# 扫描当前目录
bash check-tanstack-compromise.sh .
# 扫描特定项目
bash check-tanstack-compromise.sh /path/to/project
# 一行命令(curl)
curl -sL https://raw.githubusercontent.com/ry-allan/tanstack-compromise-checker/main/check-tanstack-compromise.sh | bash
退出码 0 = 未发现覆盖到的指标。
退出码 1 = 发现覆盖到的入侵或可疑负载指标。
═══════════════════════════════════════════════════════════════
TanStack 供应链入侵检查 (CVE-2026-45321)
═══════════════════════════════════════════════════════════════
通告:GHSA-g7cv-rxg3-hmpx
参考:https://snyk.io/blog/tanstack-npm-packages-compromised/
深度分析:https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-…
[*] 正在扫描:/Users/xxxxx/repos/xxxxx
[*] 包管理器:pnpm (pnpm-lock.yaml)
[*] 检查已安装的 TanStack 包是否与 42 个已知入侵版本匹配…
[*] 检查蠕虫传播的次级受害者 (Mini Shai-Hulud)…
[*] 包:@mistralai、@opensearch-project、@draftlab、@draftauth、
[*] @dirigible-ai、safe-action、cmux-agent-mcp、nextmove-mcp、
[*] git-git-git、git-branch-selector、agentwork-cli、ml-toolkit-ts、
[*] wot-api、cross-stitch、ts-dna
[*] 扫描锁定文件中已知入侵版本 (pnpm-lock.yaml)…
[✓] 锁定文件中未发现入侵版本
[*] 检查持久化工件(负载文件、钩子、服务、C2)…
[✓] Git 历史中无恶意作者提交
───────────────────────────────────────────────────────────────
[✓] 未检测到入侵。
安装 Aikido Safe Chain 以自动扫描每次包安装中的恶意软件:
curl -fsSL https://github.com/AikidoSec/safe-chain/releases/latest/download/install-safe-chain.sh | sh
之后重启终端。Safe Chain 包装了 npm、npx、yarn、pnpm、pip、uv 等——在恶意包接触磁盘之前阻止年龄小于 48 小时的新包和已知不良版本。无需令牌或配置。
集成 Dockerfile 仅创建合成测试夹具。它不会下载真实入侵包。
主夹具断言所有 33 条检测消息在包清单、锁定文件、持久化工件、工作流、Git 历史、源 IOC、负载文件名、AI 工具配置和修复输出中触发:
docker build -f integration.Dockerfile -t tanstack-check-test .
Docker 构建还包括针对以下内容的回归测试覆盖:
package-lock.json v3 条目,其中包名和入侵版本出现在不同行。version 出现在不同行。router_init.js 负载文件名返回退出码 1。.claude/settings.json,仍能检测到用户主目录级别的 Claude Code SessionStart 钩子。构建后,可以直接运行镜像命令:
docker run --rm tanstack-check-test