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

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

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

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

工具目录

分类

查看所有分类
Loading categories
shai-scan — 零依赖的CLI扫描器,用于检测npm/PyPI供应链受损。能够发现lockfiles中的受感染包以及来自诸如Mini Shai-Hulud(CVE-2026-45321)等攻击的系统级IOC。 | Kitploit
工具/GitHubGitHub/digi4care/shai-scan
危害指标 (IOC) 管理静态分析漏洞扫描器代码分析DevSecOps秘密检测威胁情报供应链安全事件响应
GitHubdigi4care/shai-scan

shai-scan

零依赖的CLI扫描器,用于检测npm/PyPI供应链受损。能够发现lockfiles中的受感染包以及来自诸如Mini Shai-Hulud(CVE-2026-45321)等攻击的系统级IOC。

63个月前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

shai-scan

零依赖的 npm 和 PyPI 供应链受损检测 CLI 扫描器。

npm version License: MIT Node.js

为什么?

2026年5月11日,一种自传播的供应链蠕虫被命名为 Mini Shai-Hulud(CVE-2026-45321,GHSA-g7cv-rxg3-hmpx)入侵了 npm 生态系统。该恶意软件归因于 TeamPCP(又名 DeadCatx3、PCPcat、ShellForce、CipherForce),它劫持了 GitHub Actions OIDC 令牌,发布带有有效 SLSA Build Level 3 来源证明的恶意包。它窃取了 CI/CD 流水线、云提供商和加密货币钱包中的凭证,并在 Claude Code 和 VS Code 中安装了持久化钩子。内置的“死亡开关”会威胁,如果 npm 令牌被撤销,则擦除用户的家目录。

受影响的包包括 TanStack router 和 start 包、Mistral AI SDK、OpenSearch 客户端、UiPath 工具等。由于供应链攻击传播迅速,组织需要一种轻量、可信赖的扫描器,可以在任何地方运行,而无需在其自身攻击面上增加新的依赖项。

功能

  • 锁定文件扫描 — 检测 package-lock.json、pnpm-lock.yaml、yarn.lock、bun.lock、bun.lockb、poetry.lock、Pipfile.lock 和 requirements.txt 中的受损 npm 和 PyPI 包。
  • 系统 IOC 检查 — 扫描正在运行的进程、文件系统工件、网络连接和已知的持久化路径,检查是否存在入侵指标。
  • 零运行时依赖 — 仅使用 Node.js/Bun 内置模块(fs、path、child_process、os)。该扫描器不会增加您的供应链风险。
  • 多种输出格式 — 人类可读文本、机器可读 JSON 以及用于 GitHub Code Scanning 的 SARIF。
  • CI/CD 原生 — 为自动化设计的退出码(0 = 干净,1 = 发现问题,2 = 错误)。
  • 路径无关 — 接受任何目录;默认使用当前工作目录。
  • 基于攻击波的数据 — 新的攻击波作为离散的攻击波添加到 src/db.ts 中;更新文件并重新运行。

安装

无需安装。直接使用您选择的包运行器:

root@kitploit:~
# npx
npx @digi4care/shai-scan

# bunx
bunx @digi4care/shai-scan

# pnpm dlx
pnpm dlx @digi4care/shai-scan

全局安装(可选):

root@kitploit:~
npm install -g @digi4care/shai-scan
# 或
pnpm add -g @digi4care/shai-scan

从源码安装:

root@kitploit:~
git clone https://github.com/digi4care/shai-scan.git
cd shai-scan
pnpm install
bun run src/cli.ts --help   # Bun(推荐用于开发)
# 或使用 Node.js 构建并运行:
pnpm run build && node dist/cli.js --help

使用方法

扫描当前项目

root@kitploit:~
npx @digi4care/shai-scan

扫描特定路径

root@kitploit:~
npx @digi4care/shai-scan ~/projects/my-app

自动化用的 JSON 输出

root@kitploit:~
npx @digi4care/shai-scan --json .

GitHub Code Scanning 用的 SARIF 输出

root@kitploit:~
npx @digi4care/shai-scan --sarif --sarif-file results.sarif .

CI/CD 退出码

root@kitploit:~
#!/bin/bash
npx @digi4care/shai-scan --severity high . || {
  code=$?
  if [ "$code" -eq 1 ]; then
    echo "检测到供应链问题"
    exit 1
  elif [ "$code" -eq 2 ]; then
    echo "扫描器错误"
    exit 2
  fi
}

CI/CD 集成

GitHub Actions(文本输出)

root@kitploit:~
name: Supply Chain Scan
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - run: pnpm install --frozen-lockfile
      - run: npx @digi4care/shai-scan --severity high .

GitHub Actions(SARIF 上传)

root@kitploit:~
name: Supply Chain Scan SARIF
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
  schedule:
    - cron: '0 6 * * 1'

jobs:
  scan:
    runs-on: ubuntu-latest
    permissions:
      security-events: write
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      - run: pnpm install --frozen-lockfile
      - run: npx @digi4care/shai-scan --sarif --sarif-file results.sarif .
      - uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: results.sarif

输出格式

格式标志描述
文本(默认)人类可读的发现结果表格,包含严重性、包名、版本和攻击波详情
JSON--json结构化的 JSON 发现结果数组,适用于导入 SIEM 或自定义仪表板

JSON 示例片段:

root@kitploit:~
[
  {
    "package": "@tanstack/react-router",
    "version": "1.169.5",
    "ecosystem": "npm",
    "severity": "critical",
    "campaign": "mini-shai-hulud-wave4",
    "cve": "CVE-2026-45321",
    "reference": "https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx"
  }
]

退出码

代码含义
0未检测到受损包或 IOC
1检测到一个或多个问题
2运行时错误(无效路径、无法读取锁定文件等)

添加新攻击波

当发现新的供应链攻击时,更新 src/db.ts:

  1. 添加一个新的 CompromisedVersion[] 数组,包含受影响的包和版本。
  2. 在 CAMPAIGNS 数组中追加一个新的 Campaign 对象,包括 CVE/GHSA 标识符、严重性、描述、参考 URL 和 IOC 指标。
  3. buildLookup() 函数会在下次运行时自动重建查找映射。

使用 Bun 时不需要构建步骤。对 src/db.ts 的更改会立即生效(通过 bun run src/cli.ts)。对于 npm 包,编辑后运行 pnpm run build。

安全注意事项

  • 零运行时依赖:该扫描器仅使用 Node.js/Bun 内置模块。它不会在运行时下载或执行第三方代码,消除了扫描器本身成为入侵媒介的风险。

  • 使用 pnpm 作为包管理器:pnpm 使用严格锁定文件,默认不执行生命周期脚本,并支持内容寻址存储。这些特性相比其他包管理器减少了攻击面。

  • 推荐的 .npmrc 设置:为了在安装包时获得最大保护,请将以下内容添加到您的项目或全局 .npmrc 中:

    root@kitploit:~
    ignore-scripts=true
    engine-strict=true
    
  • 无网络调用:shai-scan 不会回拨电话、下载签名或需要 API 密钥。所有攻击波数据都随包一起提供。

受影响的包(当前攻击波)

以下包和版本已知在 CVE-2026-45321(Mini Shai-Hulud 第 4 波)中受损。这是一个代表性子集;完整列表维护在 src/db.ts 中。

许可证

MIT。详情请参见 LICENSE。

免责声明

shai-scan 是一种检测辅助工具,不能替代全面的安全审计、依赖审查或威胁情报平台。它仅基于内置数据库识别已知的受损版本;在攻击波被添加之前,新的或零日供应链攻击可能无法被检测到。始终遵循深度防御原则:审计依赖、固定版本、验证来源证明并监控 CI/CD 流水线。

下载工具
SARIF--sarifOASIS SARIF 2.1.0 格式,用于上传到 GitHub Code Scanning、GitLab Secure 或其他 SARIF 消费端
包生态系统受损版本
@tanstack/react-routernpm1.169.5, 1.169.8
@tanstack/vue-routernpm1.169.5, 1.169.8
@tanstack/solid-routernpm1.169.5, 1.169.8
@tanstack/router-corenpm1.169.5, 1.169.8
@tanstack/react-startnpm1.167.68, 1.167.71
@mistralai/mistralainpm2.2.2, 2.2.3, 2.2.4
@mistralai/mistralai-azurenpm1.7.2, 1.7.3
mistralaipypi2.4.6
@opensearch-project/opensearchnpm3.5.3, 3.6.2, 3.7.0, 3.8.0
@uipath/robotnpm1.3.4
@squawk/airwaysnpm0.4.2, 0.4.3, 0.4.5
@draftauth/corenpm0.13.1, 0.13.2
@tallyui/corenpm0.2.1, 0.2.2, 0.2.3
safe-actionnpm0.8.3, 0.8.4
cmux-agent-mcpnpm0.1.3 - 0.1.8
nextmove-mcpnpm0.1.3, 0.1.4, 0.1.5, 0.1.7
ts-dnanpm3.0.1, 3.0.2, 3.0.4
cross-stitchnpm1.1.3, 1.1.4, 1.1.6
git-git-gitnpm1.0.8 - 1.0.12
git-branch-selectornpm1.3.3 - 1.3.7
agentwork-clinpm0.1.4, 0.1.5
wot-apinpm0.8.1, 0.8.2, 0.8.4
ml-toolkit-tsnpm1.0.4, 1.0.5
@beproduct/nestjs-authnpm0.1.2 - 0.1.19
@dirigible-ai/sdknpm0.6.2, 0.6.3
@taskflow-corp/clinpm0.1.24 - 0.1.29
@tolka/clinpm1.0.2, 1.0.3, 1.0.4, 1.0.6
@supersurkhet/clinpm0.0.2 - 0.0.7
guardrails-aipypi0.10.1