Nxxo31/supply-radar
GitHub: Nxxo31/supply-radar
一款开源的命令行供应链安全扫描工具,通过查询 OSV 数据库检测 Go 和 npm 项目依赖项中的已知漏洞。
Stars: 0 | Forks: 0
# supply-radar
`supply-radar` 扫描 Go 和 Node.js 项目,分析其 manifest 文件,查询 [OSV 数据库](https://osv.dev) 以寻找已知漏洞,并在几秒钟内生成清晰且可执行的报告。
无需 SaaS。无需 dashboards。无需数据库。无需将依赖项发送到外部服务器。
## 为什么
软件供应链危机是真实存在的:
- 2024-2025 年未审查的依赖项增加了 **+67%** (Sonatype)。
- 在 Log4j (2021) 和 XZ backdoor (2024) 之后,供应链攻击呈指数级增长。
- 严重漏洞需要 **500+ 天** 才能解决。
- 团队缺乏对其项目中实际包含内容的可见性。
`supply-radar` 回答了开发人员如今需要回答的基本问题:
1. 我的项目实际使用了哪些依赖项?(直接和间接/传递的)
2. 这些版本是否存在已知的漏洞?
3. 综合风险等级是多少?
4. 每个问题是在哪个版本中被修复的?
## 安装
从源码安装:
```
git clone https://github.com/Nxxo31/supply-radar.git
cd supply-radar
go build -o supply-radar .
./supply-radar --version
```
要求:Go 1.23+。
## 用法
```
# 扫描当前目录(自动检测 Go 或 Node.js)
supply-radar .
# 以表格格式扫描特定项目
supply-radar ./mi-proyecto
# 生成 JSON 报告以集成 CI/CD
supply-radar --format json --output report.json ./mi-proyecto
# 仅显示严重漏洞(适用于 CI gates)
supply-radar --threshold CRITICAL ./mi-proyecto
# 发现任何漏洞时失败
supply-radar --fail ./mi-proyecto
# 离线模式(仅使用缓存,不进行网络调用)
supply-radar --offline ./mi-proyecto
# 用于快速 CI gates 的紧凑 JSON 摘要
supply-radar --format json-summary ./mi-proyecto
# 用于 GitHub Code Scanning 的 SARIF 报告
supply-radar --format sarif --output results.sarif ./mi-proyecto
# 用于文档或 issues 的 Markdown
supply-radar --format markdown --output SECURITY.md ./mi-proyecto
```
### Flags
--path 项目路径(默认:.)
--format table | json | json-summary | markdown | sarif(默认:table)
--output 输出文件或 - 用于 stdout(默认:-)
--threshold CRITICAL | HIGH | MEDIUM | LOW
--fail 如果存在漏洞则以代码 1 退出
--offline 仅使用缓存数据,无网络请求
--cache-ttl-hours 缓存的 TTL(小时)(默认:24)
--version 打印版本并退出
--help 显示帮助
## 支持的生态系统
Go go.mod, go.sum
npm package.json, package-lock.json
PyPI requirements.txt, pyproject.toml
## 环境变量
SUPPLY_RADAR_FORMAT
SUPPLY_RADAR_OUTPUT
SUPPLY_RADAR_THRESHOLD
SUPPLY_RADAR_FAIL_ON_VULNS (设为 true 以激活)
SUPPLY_RADAR_OFFLINE (设为 true 以激活)
## GitHub Actions 集成示例
有关使用 SARIF 格式运行 supply-radar 并将结果上传到 GitHub Code Scanning 的完整 GitHub Actions 工作流,请参见 [docs/examples/github-actions-sarif.yml](docs/examples/github-actions-sarif.yml)。
## 许可证
## 输出示例 (表格)
supply-radar ./tests/fixtures/node/express-app
## -- supply-radar v0.1.0 ---
Project: express-app
Duration: 2121ms
```
Found 29 vulnerabilities in 4 dependencies -- CRITICAL issues require immediate action
CRITICAL: 1 | HIGH: 12 | MEDIUM: 14 | LOW: 2
Risk Score: 10.0/10
```
Vulnerable Dependencies:
PACKAGE SEVERITY CVSS
minimist CRITICAL
GHSA-xvch-5gv4-984h
axios HIGH
21 vulnerabilities
lodash HIGH
5 vulnerabilities
express MEDIUM
2 vulnerabilities
## 许可证
MIT。请参阅 LICENSE。
## 工作原理
[manifest files] -> Parser -> [Dependencies] -> Vulnerability Provider (OSV) -> [Vulns]
|
Risk score + summary
|
Reporter -> table/json
1. 检测:在指定路径下搜索 go.mod 或 package.json。
2. 解析:提取依赖项(直接和间接),无需外部依赖。
3. OSV 查询:并发地在 api.osv.dev/v1/query 查询每个依赖项。
4. 缓存:将 OSV 的响应缓存在内存中(TTL 可配置)。
5. 报告:计算风险评分,并按照所选格式进行序列化。
我们不会将您的依赖项发送到我们的服务器:仅会向 api.osv.dev
发送包含 package 和 version 的 POST 请求。在 --offline 模式下,不会进行任何网络调用。
## 架构
cmd/supply-radar/ CLI entry point + flags
internal/
scanner/ 编排器:parser -> vulns -> report
parser/ Interfaces + registry
gomod/ 解析 go.mod
npm/ 解析 package.json
vulnerability/ Provider 契约
osv/ OSV 客户端(HTTP + 解析)
reporter/ Reporters
table/ 终端输出
dependency/ 领域类型
cache/ 带 TTL 的内存缓存
config/ 环境变量
每个包都有单一的职责,并且可以在不影响其他部分的情况下进行扩展。
### 添加新的生态系统
1. 创建 internal/parser/mi-ecosistema/parser.go 并实现 parser.Parser。
2. 在 internal/scanner/scanner.go 中注册它。
3. 如果该生态系统在 OSV 中有对应项(pypi, maven, crates.io),只需
在 internal/vulnerability/osv/client.go 中映射 ecosystem 即可。
pipeline 的其余部分(cache, reporter, exit codes)无需更改即可正常工作。
## Roadmap
MVP V1(当前):扫描,OSV 查询,表格/JSON 报告,CI 标志。
V1.1:支持 package-lock.json 和 go.sum 以获取精确版本。
V1.2:导出 SPDX 和 CycloneDX 格式的 SBOM。
V2.0:更多漏洞提供者(直接使用 NVD、GHSA),支持 PyPI/Maven 包。
有关完整愿景,请参阅 PROJECT.md。
## 许可证
MIT。请参阅 LICENSE。
## 作者
Sebastian [Nxxo31] - 开源工程项目。
标签:EVTX分析, Go, LNA, OSV, Ruby工具, Vercel, WebSocket, 依赖分析, 日志审计