Vigil — 开源依赖漏洞扫描器
发布: (2026年2月11日 GMT+8 15:46)
5 分钟阅读
原文: Dev.to
Source: Dev.to

现代软件高度依赖开源软件包。虽然这加快了开发速度,但当依赖中的漏洞未被发现时,也会带来供应链风险。
Vigil 是一个轻量级的开源 CLI 工具,使用 OSV 数据库扫描依赖文件,并生成可直接用于取证的 HTML 和 JSON 报告。
GitHub:
为什么选择 Vigil?
许多现有的扫描器:
- 需要付费订阅
- 使用专有的漏洞信息源
- 隐藏实现细节
- 生成难以归档或审计的报告
Vigil 的重点:
- 开放的漏洞数据(OSV.dev)
- 透明的实现
- 本地优先设计
- 自包含的 HTML 报告
- 可机器读取的 JSON 输出
- CI/CD 兼容性
- 无 SaaS 依赖或专有数据库
支持的生态系统
Python
requirements.txtpyproject.toml([project.dependencies])pip freeze输入 (--from-freeze)
Node.js
package.jsonpackage-lock.jsonyarn.lockpnpm-lock.yaml
当可用时,锁文件更受推荐,以确保解析版本的准确性。
快速开始
直接从 GitHub 安装:
pip install "git+https://github.com/0x5A65726F677275/Vigil.git"
运行扫描:
vigil scan requirements.txt
这将生成:
- 终端输出
scan-report.htmlscan-report.json
在浏览器中打开 HTML 文件以查看结构化报告。
示例命令
扫描默认的 requirements 文件
vigil scan
扫描已安装的包
pip freeze | vigil scan - --from-freeze
若存在漏洞则使 CI 失败
vigil scan --fail-on-vuln
强制进行全新的 OSV 查询
vigil scan --no-cache
仅终端模式
vigil scan --report none
输出设计
终端输出
- 彩色摘要
- 按包的漏洞详情
- CVE / OSV ID
- 简短描述
- 修复提示
HTML 报告
- 完全自包含(无外部 CSS 或 JS)
- 适合打印和生成 PDF
- 按包结构化
包含:
- 扫描的总包数
- 含漏洞的包数
- 漏洞总计数
- CVE/OSV ID 及严重程度(如有)
- 参考链接和修复指导
- 生成时间戳(UTC)
- 扫描器版本和数据来源归属(OSV)
用于审计、合规文档和安全评审。
JSON 报告
结构化用于:
- CI/CD 流水线
- 自动化工作流
- 合规工具
- 自定义仪表盘
包含元数据和每个包的详细漏洞条目。
架构概览
核心组件:
- CLI 界面
- 依赖解析器(Python + Node)
- OSV API 客户端
- 本地 SQLite 缓存
- 报告器(终端 + HTML + JSON)
- 基于 Jinja2 的 HTML 模板
仓库还包括:
- Pytest 测试套件
- GitHub Actions 工作流
- Docker 支持
- 架构文档
- 贡献指南
- 指标文档
依赖最小,结构清晰,易于审查。
CI 与 Docker 支持
GitHub Actions
示例工作流:
- 在 push 和 pull request 时运行扫描
- 生成 HTML + JSON 报告
- 将报告上传为工作流工件
Docker 用法
docker build -t vigil .
docker run --rm -v "$(pwd):/work" -w /work vigil
报告会写入挂载的目录中。
与供应链安全指南的一致性
Vigil 的构建参考了:
- 行政命令 14028(提升国家网络安全)
- NIST 安全软件开发框架(SP 800‑218)
- CISA 软件供应链安全指南
重点包括:
- 依赖可视化
- 漏洞识别
- 可直接用于取证的报告
- 透明的工具链
设计理念
- 仅开放数据
- 无隐藏服务
- 可复现的结果
- 人类可读且机器可读的输出
- 最小化设置
- 适合小团队
项目状态
- 发行版: 0.2.x
- 许可证: MIT
- 早期阶段项目,欢迎反馈和贡献
如果您从事 DevSecOps、开源安全、供应链风险管理或合规工程,欢迎贡献。
GitHub:
构建弹性的软件供应链需要实用、透明的工具。Vigil 是朝此方向迈出的专注一步。