Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
tanscript-exploit-check — 用于 TanStack/Mini Shai-Hulud npm 供应链攻击(CVE-2026-45321)的 IOC 检查器 | Kitploit
工具/GitHubGitHub/nkopylov/tanscript-exploit-check
危害指标 (IOC) 管理漏洞分析取证分析威胁情报供应链安全事件响应
GitHubnkopylov/tanscript-exploit-check

tanscript-exploit-check

用于 TanStack/Mini Shai-Hulud npm 供应链攻击(CVE-2026-45321)的 IOC 检查器

查看仓库
12个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Mini Shai-Hulud 供应链攻击 — IOC 检查器

root@kitploit:~
curl -fsSL https://raw.githubusercontent.com/nkopylov/tanscript-exploit-check/main/check-tanstack-exploit.sh | bash

或者克隆并在本地运行:

root@kitploit:~
git clone https://github.com/nkopylov/tanscript-exploit-check.git
cd tanscript-exploit-check
./check-tanstack-exploit.sh [project_dir ...]

事件概述

此检查器覆盖了由 TeamPCP 发起的 Mini Shai-Hulud 供应链攻击活动的两波攻击:

第一波:TanStack CI/CD 入侵(2026 年 5 月 11 日)

2026 年 5 月 11 日(19:20-19:26 UTC),攻击者在 6 分钟内发布了 42 个 @tanstack/* npm 包中的 84 个恶意版本。此次攻击还波及了 Mistral AI、UiPath、OpenSearch 等公司的包——npm 和 PyPI 上总计超过 170 个包。

没有任何维护者凭据被盗。 攻击者通过 3 阶段攻击利用了 CI/CD 信任链本身:

  1. pull_request_target 漏洞利用 —— 一个一次性 GitHub fork 发起了 PR,在基础仓库的安全上下文中运行了攻击者代码
  2. GitHub Actions 缓存投毒 —— fork 中的代码污染了共享的 pnpm 缓存,随后感染了合法的发布工作流
  3. 从进程内存中提取 OIDC 令牌 —— 恶意代码直接从 GitHub Actions runner 的内存中提取 npm 发布令牌,从而生成带有有效 SLSA Build Level 3 来源证明的包

第二波:"atool" npm 账户接管(2026 年 5 月 19 日)

2026 年 5 月 19 日(01:39-02:06 UTC),被入侵的 atool npm 账户([email protected])通过两轮自动化攻击发布了 314 个包中的 637 个恶意版本。影响较大的目标包括:

  • size-sensor(每月 420 万次下载)
  • echarts-for-react(每月 380 万次下载)
  • @antv/scale(每月 220 万次下载)
  • timeago.js(每月 115 万次下载)
  • 另有 310+ 个 @antv/* 及其他包

该波攻击使用了基于 Bun 的载荷(498KB 的 index.js),通过 "preinstall": "bun run index.js" 触发,第二阶段载荷隐藏在伪造提交中,利用 fork 对象共享漏洞推送至 antvis/G2 GitHub 仓库。

恶意代码的行为(两波通用)

两波攻击使用相同的 "Mini Shai-Hulud" 工具包家族:

  • 凭据窃取:80+ 个环境变量、AWS 全链路(env → config → IMDSv2 → ECS → Secrets Manager)、GitHub PAT、npm 令牌、SSH 密钥、K8s 令牌、Vault 令牌、密码管理器(1Password、Bitwarden、pass、gopass)
  • 持久化:通过 LaunchAgent/systemd 运行的 gh-token-monitor(第一波)和 kitty-monitor(第二波)守护进程;在 .claude/settings.json 和 .vscode/tasks.json 中注入钩子
  • 数据外传:P2P 网络(第一波)、GitHub Git Data API + 伪装成 OpenTelemetry 追踪的 HTTPS(第二波)
  • CI/CD 滥用:工作流注入转储 toJSON(secrets)、npm OIDC 令牌交换
  • 死亡开关:若守护进程活跃期间 GitHub 令牌被撤销,则执行 rm -rf ~/
  • 死信箱 C2(第二波):轮询 GitHub commit 搜索 API 查找 firedalazer 关键字,使用 RSA-PSS 签名的命令

此脚本检查的内容

受影响的包

第一波:TanStack(42 个包)

只有 @tanstack/router* 和 @tanstack/start* 受影响。不受影响: @tanstack/query*、@tanstack/table*、@tanstack/form*、@tanstack/virtual*、@tanstack/store。

查看 完整安全公告 了解全部 42 个包。

第二波:atool 账户(314 个包)

npm 用户 atool([email protected])发布的所有包在 2026 年 5 月 19 日都收到了恶意版本。影响较大的包包括:

包每月下载量
size-sensor420 万
echarts-for-react380 万
@antv/scale220 万
timeago.js

此外还有 310+ 个包,主要位于 @antv/* 作用域内(@antv/g2、@antv/g6、@antv/l7、@antv/s2、@antv/x6、@antv/f2 等),以及 ai-figure、timeago-react、jest-canvas-mock、jest-date-mock 等。

查看 SafeDep 分析文章 获取完整列表。

补救措施(若已受影响)

关键:在撤销任何令牌之前,先禁用死亡开关。 如果守护进程活跃期间令牌被撤销,恶意软件会清空 $HOME。

  1. 终止持久化守护进程(gh-token-monitor 和 kitty-monitor),并删除 LaunchAgent/systemd 服务
  2. 删除持久化文件(.claude/router_runtime.js、.vscode/setup.mjs、~/.local/share/kitty/cat.py、/var/tmp/.gh_update_state 等)
  3. 删除 node_modules 和锁文件,使用 --ignore-scripts 重新安装
  4. 轮换所有凭据(npm、GitHub、AWS、GCP、SSH 密钥、Vault 令牌、密码管理器令牌等)
  5. 在 DNS/防火墙层面阻止攻击者域名(api.masscan.cloud、filev2.getsession.org、git-tanstack.com、t.m-kosche.com)
  6. 审计 2026 年 5 月 11 日至 19 日的云提供商日志

官方公告与参考资料

第一波:TanStack(5 月 11 日)

  • CVE-2026-45321(CVSS 9.6 严重)— CVE 记录
  • GHSA-g7cv-rxg3-hmpx — GitHub 安全公告
  • TanStack 事后分析 — tanstack.com/blog/npm-supply-chain-compromise-postmortem
  • TanStack 加固后续 — tanstack.com/blog/incident-followup
  • GitHub 跟踪问题 — TanStack/router#7383

第二波:atool 账户接管(5 月 19 日)

  • SafeDep 分析 — safedep.io/mini-shai-hulud-strikes-again-314-npm-packages-compromised

安全研究人员分析文章

  • Socket.dev
  • Snyk
  • StepSecurity(最初发现者)
  • Wiz
  • Orca Security
  • SecurityWeek

AI 编程代理加固提示词

将以下提示词复制粘贴到你的 AI 编程代理(Claude Code、Cursor、Cline/OpenClaw、Windsurf、Hermes 等)中,以加固你的项目,防范此类供应链攻击。

提示词 1:npm 发布延迟(隔离新版本)

加固此项目的 npm 配置以防范供应链攻击。请执行以下操作:

  1. 锁定精确版本:移除 package.json 中所有依赖项前面的 ^ 和 ~ 前缀,确保 npm install 永远不会静默拉取新发布的版本。

  2. 默认禁用 postinstall 脚本:在 .npmrc 中添加 ignore-scripts=true。然后在 package.json 中添加一个显式的 "preinstall" 脚本,仅运行此项目实际需要的已知安全生命周期脚本(如有)。

  3. 在 CI 中强制仅使用锁文件安装:确保 CI 使用 npm ci(而非 npm install)。如果存在 CI 配置文件,请核实。如果没有,请将其记为手动步骤。

  4. 添加来源验证:在 CI 流水线中以及作为 pre-push git 钩子添加 npm audit signatures 步骤。

  5. 创建更新策略脚本:创建一个 scripts/safe-update.sh,其功能如下:

提示词 2:加固 AI 代理配置

审计并加固此项目的 AI 编程代理配置,以防范供应链注入攻击(例如 TanStack/Mini Shai-Hulud 活动中向 .claude/settings.json 和 .vscode/tasks.json 注入恶意钩子的手法)。请执行以下操作:

Claude Code(.claude/):

  1. 检查 .claude/settings.json 和 .claude/settings.local.json 中是否有运行 shell 命令的 hooks 条目。标记任何执行 .js、.mjs 或 .sh 文件的内容——尤其是位于 .claude/、.vscode/ 或 node_modules/ 目录内的。
  2. 移除任何无法追溯到合法、用户创建用途的钩子。
  3. 添加一条 .gitignore 规则,防止 .claude/settings.local.json 被提交(它应保持本地状态)。

提示词 3:GitHub Actions 加固

审计并加固此仓库中的 GitHub Actions 配置,以防范 CI/CD 供应链攻击。请执行以下操作:

  1. 移除或重构所有 pull_request_target 触发器 —— 即使在 fork 触发时,这些触发器也会在基础仓库的上下文中运行工作流代码并可访问机密。如有需要,请替换为 pull_request 加单独的审批门控工作流。

  2. 将所有第三方 action 固定到完整提交 SHA(而非标签或分支)。例如,将 actions/checkout@v4 替换为 actions/checkout@<full-sha>。添加包含标签的注释以提高可读性。

  3. 为每个工作流应用最小权限。添加显式的 permissions: 块。大多数工作流只需要 contents: read。发布工作流需要 id-token: write——仅此而已。

  4. 限制缓存范围:如果使用 actions/cache,请确保缓存键按分支限定范围,以防跨分支投毒。谨慎添加 restore-keys——不要从未受信任的分支恢复缓存。

  5. 在每个作业的第一步添加 StepSecurity Harden-Runner:step-security/harden-runner@v2,并设置 egress-policy: audit(如果你知道允许的端点,可设为 )。

许可证

MIT

下载工具
#检查项描述
1死亡开关持久化守护进程:gh-token-monitor(第一波)、kitty-monitor(第二波)
2恶意进程已知攻击者进程名(两波)
3载荷文件按文件名和 SHA-256 哈希(4 个哈希)识别的已知恶意文件
4Claude Code 钩子注入到 .claude/settings.json 的钩子 + 通用 SessionStart 启发式检测
5VS Code 任务注入到 .vscode/tasks.json 的任务 + 通用 runOn: folderOpen 启发式检测
6GitHub Actions任意工作流中的 toJSON(secrets) + pull_request_target 警告
7npm 锁文件锁文件中的受损包版本
8optionalDependencies恶意 @tanstack/setup 和 @antv/setup + 4 个伪造提交 SHA
9网络连接与 C2 基础设施的活动连接(5 个域名/IP)
10DNS 缓存先前解析的攻击者域名(4 个域名)
11Git 分支沙丘主题的攻击者分支命名模式
12生命周期脚本启发式: preinstall/postinstall 中的 bun run(已安装的包)
13死信箱 C2git 历史中的 firedalazer 关键字和 "Shai-Hulud" 标记
14GitHub 依赖启发式: optionalDeps 中固定到提交 SHA 的 github: 依赖
包恶意版本首个安全版本
@tanstack/react-router1.169.5, 1.169.81.169.9
@tanstack/router-core1.169.5, 1.169.81.169.9
@tanstack/vue-router1.169.5, 1.169.81.169.9
@tanstack/solid-router1.169.5, 1.169.81.169.9
@tanstack/react-start1.167.68, 1.167.711.167.72
@tanstack/router-plugin1.167.38, 1.167.411.167.42
115 万
  • 接受一个包名作为参数
  • 检查最新版本何时发布(npm view <pkg> time --json)
  • 如果版本发布不足 3 天,则拒绝更新
  • 如果超过 3 天,则运行 npm install <pkg>@latest --save-exact
  • 打印变更摘要

不要修改任何应用程序代码。只修改配置文件、.npmrc、package.json 脚本和 CI 配置。

VS Code(.vscode/):

  1. 检查 .vscode/tasks.json 和 .vscode/launch.json 中是否有执行意外脚本或二进制文件的任务。
  2. 移除任何引用 setup.mjs、router_runtime.js 等不属于此项目的文件名的任务条目。
  3. 检查 .vscode/extensions.json 中是否有你不认识的扩展。

Cursor(.cursor/):

  1. 检查 .cursor/settings.json 及任何规则文件中是否含有注入的命令或钩子。
  2. 与上述 VS Code 检查相同——Cursor 会继承 .vscode/ 配置。

通用:

  1. 检查 package.json 中是否有非你本人编写的 preinstall、postinstall、prepare 或 prestart 脚本,并标记可疑项。
  2. 检查 .github/workflows/ 中是否有使用 pull_request_target 的工作流——将其标记为安全风险,并添加注释说明原因。
  3. 确保 .gitignore 排除了可能泄露凭据的代理会话文件(.claude/projects/、.cursor/logs/ 等)。

报告你的发现和所做的更改。不要修改应用程序代码。

block
  • 检查工作流日志中的机密:确保没有工作流步骤向 stdout 打印 ${{ secrets.* }} 或 ${{ toJSON(secrets) }}。

  • 报告所有更改。不要修改应用程序代码。