nkopylov/tanscript-exploit-check

GitHub: nkopylov/tanscript-exploit-check

针对TanStack npm供应链攻击(CVE-2026-45321)的入侵指标(IOC)自动化检查脚本,用于快速检测开发环境是否被恶意包感染。

Stars: 1 | Forks: 0

# TanStack 供应链攻击 - IOC 检查工具 ``` curl -fsSL https://raw.githubusercontent.com/nkopylov/tanscript-exploit-check/main/check-tanstack-exploit.sh | bash ``` 或克隆后本地运行: ``` git clone https://github.com/nkopylov/tanscript-exploit-check.git cd tanscript-exploit-check ./check-tanstack-exploit.sh [project_dir ...] ``` ## 事件经过 **2026年5月11日**(UTC 19:20-19:26),攻击者在6分钟窗口内发布了 **42个 `@tanstack/*` npm 包中的84个恶意版本**。此次攻击是 **TeamPCP** 组织发起的名为 **"Mini Shai-Hulud"** 的大规模攻击活动的一部分,该活动还波及 Mistral AI、UiPath、OpenSearch 等组织的包——在 npm 和 PyPI 上共计超过170个包受到影响。 **没有维护者凭证被盗。** 攻击者通过三阶段攻击利用了 CI/CD 信任链本身: 1. **`pull_request_target` 漏洞利用** — 一个临时 GitHub Fork 提交的 PR 在基础仓库的安全上下文中执行了攻击者代码 2. **GitHub Actions 缓存投毒** — Fork 的代码污染了共享的 pnpm 缓存,随后感染了合法的发布工作流 3. **从进程内存中提取 OIDC 令牌** — 恶意代码直接从 GitHub Actions runner 的内存中提取 npm 发布令牌,生成的包具有 **有效的 SLSA Build Level 3 来源证明** ### 恶意代码的行为 每个被入侵的包中注入了一个 2.3 MB 的混淆载荷(`router_init.js`),执行了以下操作: - **凭证收集**:GitHub 令牌、AWS 密钥(IMDSv2、Secrets Manager、SSM)、GCP 元数据、Vault 令牌、K8s 服务账户令牌、SSH 密钥、`~/.npmrc` 令牌、Claude Code 会话历史 - **持久化**:向 `.claude/settings.json`、`.vscode/tasks.json` 和 systemd 服务注入钩子 - **数据外泄**:通过加密的 Session/Oxen P2P 网络和 GitHub GraphQL 死信投递提交发送数据 - **自我传播(蠕虫)**:使用被盗的 OIDC 令牌将自身重新发布到同一维护者拥有的其他包中 - **死手开关**:如果 GitHub 令牌在活动期间被撤销,载荷会尝试执行 `rm -rf ~/` 恶意版本在 **约20分钟内** 被 StepSecurity 研究员 **ashishkurmi** 发现,并于当天 **UTC 21:03** 被废弃。 ## 本脚本检查的内容 | # | 检查项 | 描述 | |---|--------|------| | 1 | 死手开关 | LaunchAgent/systemd 持久化守护进程(`gh-token-monitor`) | | 2 | 恶意进程 | 已知攻击者进程名称 | | 3 | 载荷文件 | 按名称和 SHA-256 哈希识别的已知恶意文件 | | 4 | Claude Code 钩子 | `.claude/settings.json` 中注入的钩子 | | 5 | VS Code 任务 | `.vscode/tasks.json` 中注入的任务 | | 6 | GitHub Actions | 泄露密钥的 `codeql_analysis.yml` 工作流 | | 7 | npm 锁定文件 | 锁定文件中被入侵的包版本 | | 8 | optionalDependencies | 恶意 `@tanstack/setup` 依赖标记 | | 9 | 网络连接 | 与攻击者 C2 基础设施的活跃连接 | | 10 | DNS 缓存 | 攻击者域名的历史解析记录 | | 11 | Git 分支 | Dune 主题的攻击者分支命名模式 | ## 受影响的包 仅 `@tanstack/router*` 和 `@tanstack/start*` 生态包受到影响。**未受影响:** `@tanstack/query*`、`@tanstack/table*`、`@tanstack/form*`、`@tanstack/virtual*`、`@tanstack/store`。 主要被入侵版本(每个包有2个恶意版本): | 包 | 恶意版本 | 首个安全版本 | |---|---------|--------------| | `@tanstack/react-router` | 1.169.5, 1.169.8 | 1.169.9 | | `@tanstack/router-core` | 1.169.5, 1.169.8 | 1.169.9 | | `@tanstack/vue-router` | 1.169.5, 1.169.8 | 1.169.9 | | `@tanstack/solid-router` | 1.169.5, 1.169.8 | 1.169.9 | | `@tanstack/react-start` | 1.167.68, 1.167.71 | 1.167.72 | | `@tanstack/router-plugin` | 1.167.38, 1.167.41 | 1.167.42 | 查看全部42个包请参阅 [完整安全公告](https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx)。 ## 修复措施(如已受感染) 1. 终止 `gh-token-monitor` 进程并移除 LaunchAgent/systemd 服务 2. 删除持久化文件(`.claude/router_runtime.js`、`.vscode/setup.mjs` 等) 3. 删除 `node_modules` 和锁定文件,使用 `--ignore-scripts` 重新安装 4. **轮换所有凭证**(npm、GitHub、AWS、GCP、SSH 密钥等) 5. 在 DNS/防火墙层面阻止攻击者域名(`api.masscan.cloud`、`filev2.getsession.org`、`git-tanstack.com`) 6. 审计云服务商在2026年5月11-12日的日志 ## 官方公告与参考 - **CVE-2026-45321**(CVSS 9.6 严重)— [CVE 记录](https://www.cve.org/CVERecord?id=CVE-2026-45321) - **GHSA-g7cv-rxg3-hmpx** — [GitHub 安全公告](https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx) - **TanStack 事后复盘** — [tanstack.com/blog/npm-supply-chain-compromise-postmortem](https://tanstack.com/blog/npm-supply-chain-compromise-postmortem) - **TanStack 加固跟进** — [tanstack.com/blog/incident-followup](https://tanstack.com/blog/incident-followup) - **GitHub 跟踪 Issue** — [TanStack/router#7383](https://github.com/TanStack/router/issues/7383) - **Tanner Linsley 在 X 上** — [x.com/tannerlinsley/status/2053949930784645170](https://x.com/tannerlinsley/status/2053949930784645170) ### 安全研究员分析文章 - [Socket.dev](https://socket.dev/blog/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack) - [Snyk](https://snyk.io/blog/tanstack-npm-packages-compromised/) - [StepSecurity](https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem)(原始发现者) - [Wiz](https://www.wiz.io/blog/mini-shai-hulud-strikes-again-tanstack-more-npm-packages-compromised) - [Orca Security](https://orca.security/resources/blog/tanstack-npm-supply-chain-worm/) - [SecurityWeek](https://www.securityweek.com/tanstack-mistral-ai-uipath-hit-in-fresh-supply-chain-attack/) ## AI 编程代理加固提示词 将以下提示词复制粘贴到你的 AI 编程代理(Claude Code、Cursor、Cline/OpenClaw、Windsurf、Hermes 等)中,以加固你的项目,防范此类供应链攻击。 ### 提示词 1:npm 发布延迟(新版本隔离) ### 提示词 2:加固 AI 代理配置 ### 提示词 3:GitHub Actions 加固 ## 许可证 MIT
标签:CI/CD安全, Cutter, CVE-2026-45321, GitHub Actions攻击, HTTP工具, IOC检查工具, IP 地址批量处理, Llama, Mini Shai-Hulud, npm供应链攻击, OIDC令牌窃取, pnpm, pull_request_target漏洞, Shell脚本, StruQ, TanStack, 凭证采集, 安全扫描工具, 应用安全, 恶意包检测, 无线安全, 暗色界面, 缓存污染, 网络安全审计