供应链安全扫描工具

一款用于检测JavaScript和Python依赖文件中的供应链漏洞和已知安全问题的开源工具,支持多包管理器和集成到CI/CD流程。

  • by undont
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 seanhalberthal/supplyscan-mcp

使用说明

补给扫描

扫描JavaScript和Python锁文件,查找供应链漏洞和已知漏洞。

快速开始 · 安装 · CLI使用情况 · MCP服务器 · 数据源


快速开始

brew install undont/tap/supplyscan

supplyscan scan                              # scan current directory
supplyscan check lodash 4.17.20              # check an npm package
supplyscan check django 2.2.0 -e pypi        # check a PyPI package

特性

  • 跨npm和PyPI的供应链检测 通过聚合来自DataDog(Shai Hulud v2和TeamPCP/Mini Shai Hulod)、GitHub咨询数据库和OSV.dev的IOC,每个生态系统都进行匹配,这样同名包就不会发生冲突
  • 漏洞扫描 通过用于npm的npm审核API和用于PyPI的OSV.dev
  • 多格式锁文件支持 跨npm、Yarn(经典和浆果)、pnpm、Bun、Deno和Python(pip、Poetry、Pipenv、uv、PDM)
  • 启发式建议 适用于运行安装脚本的软件包,以及软件包名称或URL中的不可见或非ASCII字符
  • CLI和MCP模式 在单个二进制文件中,可通过以下方式切换 --mcp
  • JSON输出 用于脚本编写和CI使用
  • 每个源缓存 具有可配置的TTL,因此每个IOC源都按照自己的时间表刷新

支持的锁定文件

包管理器 锁定文件
npm package-lock.json, npm-shrinkwrap.json
纱线经典 yarn.lock (v1)
纱线浆果 yarn.lock (v2+)
pnpm pnpm-lock.yaml
Bun bun.lock
一切。 deno.lock
pip requirements.txt
诗歌 poetry.lock
Pipenv Pipfile.lock
紫外线 uv.lock
PDM pdm.lock

用Go编写并作为静态二进制文件发布,因此扫描仪本身不会受到其扫描的包生态系统的影响。


安装

家酿

brew install undont/tap/supplyscan

去安装

go install github.com/undont/supplyscan/cmd/supplyscan@latest

需要Go 1.26+和 $GOPATH/bin 在你的路径。

Download binary

预构建的二进制文件可从以下网址获得 GitHub发布:

# macOS (Apple Silicon)
curl -L https://github.com/undont/supplyscan/releases/latest/download/supplyscan-darwin-arm64 \
  -o /usr/local/bin/supplyscan && chmod +x /usr/local/bin/supplyscan

# macOS (Intel)
curl -L https://github.com/undont/supplyscan/releases/latest/download/supplyscan-darwin-amd64 \
  -o /usr/local/bin/supplyscan && chmod +x /usr/local/bin/supplyscan

# Linux (x64)
curl -L https://github.com/undont/supplyscan/releases/latest/download/supplyscan-linux-amd64 \
  -o /usr/local/bin/supplyscan && chmod +x /usr/local/bin/supplyscan
Build from source
git clone https://github.com/undont/supplyscan.git
cd supplyscan
go build -o supplyscan ./cmd/supplyscan
mv supplyscan /usr/local/bin/

CLI使用情况

CLI是默认模式;无需旗帜。

# Scan current directory (recursive by default, scans every file in the tree)
supplyscan scan
supplyscan .  # shorthand

# Scan a monorepo root; all sub-package lockfiles are found and audited
supplyscan scan /path/to/monorepo

# Scan only the top level, without descending into subdirectories
supplyscan scan /path/to/project --no-recursive  # --shallow is an alias

# Scan production dependencies only (exclude devDependencies)
supplyscan scan --no-dev

# Fail (exit 3) when something can't be audited — unpinned requirements or a
# manifest with no lockfile — even if no compromise is found. Useful in CI.
supplyscan scan --strict

# Check a specific package (npm by default)
supplyscan check lodash 4.17.20

# Check a PyPI package
supplyscan check django 2.2.0 --ecosystem pypi
supplyscan check django 2.2.0 -e pypi  # short form

# Refresh IOC database
supplyscan refresh
supplyscan refresh --force  # force update even if cache is fresh

# Show status
supplyscan status

# Output raw JSON (for scripting/CI)
supplyscan scan --json
supplyscan check lodash 4.17.20 --json

# Show help
supplyscan help

退出代码

代码 含义
0 干净--找不到任何东西
1 错误(路径错误等)
2 调查结果——供应链妥协或已知漏洞
3 覆盖缺口 --strict (有些东西无法审计;没有发现)

默认情况下,覆盖范围差距是信息性的 不 更改退出代码;仅 --strict 将它们转换为不同的退出代码 3,以及一个真正的发现(退出 2)总是优先。


MCP服务器集成

对于AI代理集成(Claude Code、Cursor等),供应商可以作为MCP服务器运行 --mcp 旗帜。

克劳德代码

brew install undont/tap/supplyscan && \
claude mcp add mcp-supplyscan --transport stdio -s user -- supplyscan --mcp

克劳德桌面/光标/其他客户端

添加到MCP配置文件中:

{
  "mcpServers": {
    "mcp-supplyscan": {
      "command": "supplyscan",
      "args": ["--mcp"]
    }
  }
}

MCP工具

工具 说明
supplyscan_status 扫描仪版本、IOC数据库信息、支持的锁文件
supplyscan_scan 扫描项目目录以查找漏洞和漏洞
supplyscan_check 检查单曲package@version
supplyscan_refresh 从上游来源更新IOC数据库
Tool parameters

supplyscan_scan

参数 类型 说明
path string 项目目录的路径
include_dev boolean 包括开发依赖关系(默认值: true)

supplyscan_check

参数 类型 说明
package string 包名称
version string 包版本
ecosystem 字符串 npm (默认)或 pypi

supplyscan_refresh

参数 类型 说明
force boolean 即使缓存是新的,也强制刷新

更新

# Homebrew
brew upgrade supplyscan

# Go
go install github.com/undont/supplyscan/cmd/supplyscan@latest

使用 supplyscan status (CLI)或 supplyscan_status (MCP)检查您当前的版本。


数据源

IOC来源(汇总)

漏洞数据

版本范围匹配

以版本范围表示的IOC条目(例如。 < 1.2.3, >= 1.0.0, < 2.0.0)被评估为 npm 使用semver,因此范围咨询与任何受影响的安装版本相匹配。 PyPI IOC范围不进行范围评估——PyPI仅匹配精确引脚、枚举版本列表和所有版本通配符。这是因为PyPI使用PEP 440,而不是semver,并且添加PEP 440解析器会违背该工具在一小部分情况下的最小攻击面设计(绝大多数PyPI恶意软件IOC都是枚举特定版本或所有版本的拼写错误)。如果范围形式PyPI IOC开始出现,PEP 440范围支持是一个有记录的快速跟进。


许可证

麻省理工学院