使用说明
补给扫描
扫描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来源(汇总)
- DataDog入侵指标——Shai Hulud v2 对于原始的Shai-Hulud蠕虫包(npm)
- DataDog妥协指标——TeamPCP Mini-Shai Hulud/TeamPCP活动(npm和PyPI行)
- GitHub咨询数据库 适用于npm和PyPI(
pip)恶意软件公告 - OSV.dev 用于npm和PyPI恶意软件条目(
MAL-咨询)
漏洞数据
- npm审计API 对于npm包中的已知CVE
- OSV.dev查询批处理 PyPI包中的已知漏洞
版本范围匹配
以版本范围表示的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范围支持是一个有记录的快速跟进。
