用 Go 编写的漏洞扫描器,使用 https://osv.dev 提供的数据
使用 OSV-Scanner 查找影响项目依赖项的现有漏洞。 OSV-Scanner 为 OSV 数据库提供官方支持的前端,并为 OSV-Scalibr 提供 CLI 接口,可将项目的依赖项列表与影响它们的漏洞关联起来。
OSV-Scanner 支持多种项目类型、包管理器和功能,包括但不限于:
OSV-Scanner 在底层使用可扩展的 OSV-Scalibr 库来提供此功能。如果当前不支持某种语言或包管理器,请提交功能请求。
底层数据库 OSV.dev 与闭源安全公告数据库和扫描器相比,具有以下几项优势:
以上所有特性都会带来准确且可操作的漏洞通知,从而缩短解决漏洞所需的时间。请访问 OSV.dev 了解更多详情!
如需安装 OSV-Scanner,请参阅我们文档中的安装部分。OSV-Scanner 的发布版本可在 GitHub 仓库的发布页面找到。推荐的方法是下载适用于您平台的预构建二进制文件。或者,您也可以使用
go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latest 从源码构建。
如需了解更多信息,请阅读我们的详细文档以了解如何使用 OSV-Scanner。有关每个功能的详细信息,请点击本 README 中的标题。
请注意:这些是最新 OSV-Scanner V2 beta 版的说明。如果您在使用 V1,请改看 V1 的 README 和文档。
$ osv-scanner scan source -r /path/to/your/dir
该命令将递归扫描指定目录中所有受支持的软件包文件,例如 package.json、go.mod、pom.xml 等,并输出发现的任何漏洞。
OSV-Scanner 可选择使用调用分析来确定项目中是否实际使用了易受攻击的函数,从而减少误报并提供可操作的警报。
OSV-Scanner 还可以检测 vendored 的 C/C++ 代码以进行漏洞扫描。详情请参见此处。
OSV-Scanner 支持 11 种以上语言生态系统和 19 种以上锁定文件类型。如需确认您的生态系统是否受支持,请查看我们的详细文档。
OSV-Scanner 还支持对容器镜像进行全面、分层感知的扫描,以检测以下操作系统软件包和语言特定依赖项中的漏洞。
| 发行版支持 | 语言工件支持 |
|---|---|
| Alpine OS | Go |
| Debian | Java |
| Ubuntu | Node |
| Python |
有关支持的详细信息,请参阅完整文档。
用法:
$ osv-scanner scan image my-image-name:tag

使用 deps.dev 数据检查依赖项的许可证。如需摘要:
osv-scanner --licenses path/to/repository
要对照允许的许可证列表(SPDX 格式)进行检查:
osv-scanner --licenses="MIT,Apache-2.0" path/to/directory
使用本地 OSV 数据库扫描您的项目。首次下载数据库后无需网络连接。该数据库也可以手动下载。
osv-scanner --offline --download-offline-databases ./path/to/your/dir
[!WARNING] 在不受信任的项目上运行引导式修复(
fix命令)可能存在风险。它可能会触发包管理器执行脚本或访问项目指定的外部注册表。请确保在继续之前信任源代码和工件。
OSV-Scanner 提供引导式修复功能,可根据依赖深度、最低严重性、修复策略和投资回报率等条件建议软件包版本升级。我们目前支持修复以下文件中的漏洞:
该功能既可以作为无头 CLI 命令使用,也可以作为交互模式使用。
$ osv-scanner fix \
--max-depth=3 \
--min-severity=5 \
--ignore-dev \
--strategy=in-place \
-L path/to/package-lock.json
$ osv-scanner fix \
-M path/to/package.json \
-L path/to/package-lock.json
OSV-Scanner 在运行期间会与以下外部服务通信:
这是漏洞信息的主要数据来源。OSV-Scanner 会查询此 API 以检查软件包是否存在已知漏洞,并识别 vendored 的 C/C++ 依赖项。发送的数据包括软件包名称、版本、生态系统和文件哈希。使用 --offline 模式可禁用网络请求,改为针对本地数据库进行扫描。
用于补充软件包信息:
--licenses 标志):检索软件包的许可证信息。发送的数据包括软件包名称、版本和生态系统。不会传输源代码。
当使用原生注册表进行依赖解析(而非 deps.dev)时,OSV-Scanner 可能会查询:
| 注册表 | URL | 用途 |
|---|---|---|
| Maven Central | repo.maven.apache.org/maven2 | Maven 软件包元数据和 POM 文件 |
如果您认为遇到了 bug,请使用 GitHub 问题跟踪系统。在提交问题之前,请先搜索现有问题,确认您的问题是否已被覆盖。
osv-scanner 贡献代码有关如何贡献代码的文档,请参阅 CONTRIBUTING.md。
| 生态系统 | 文件格式(类型) | 支持的修复策略 |
|---|
| npm | package-lock.json(锁定文件) | in-place |
| npm | package.json(清单文件) | relock |
| Maven | pom.xml(清单文件) | override |
| npm Registry | registry.npmjs.org | npm 软件包元数据 |
| PyPI | pypi.org | Python 软件包元数据 |