返回更新列表
新发布Aug 7, 2026

osv-scanner v2.5.0

用 Go 编写的漏洞扫描器,使用 https://osv.dev 提供的数据

分享

OpenSSF Scorecard Checks codecov SLSA 3 GitHub Release

使用 OSV-Scanner 查找影响项目依赖项的现有漏洞。 OSV-Scanner 为 OSV 数据库提供官方支持的前端,并为 OSV-Scalibr 提供 CLI 接口,可将项目的依赖项列表与影响它们的漏洞关联起来。

OSV-Scanner 支持多种项目类型、包管理器和功能,包括但不限于:

  • 语言: C/C++, Dart, Elixir, Go, Java, Javascript, PHP, Python, R, Ruby, Rust。
  • 包管理器: npm, pip, yarn, maven, go modules, cargo, gem, composer, nuget 等。
  • 操作系统: 检测 Linux 系统上操作系统软件包中的漏洞。
  • 容器: 扫描容器镜像中基础镜像及所含软件包的漏洞。
  • 引导式修复: 根据依赖深度、最低严重性、修复策略和投资回报率等条件提供软件包版本升级建议。

OSV-Scanner 在底层使用可扩展的 OSV-Scalibr 库来提供此功能。如果当前不支持某种语言或包管理器,请提交功能请求。

底层数据库

底层数据库 OSV.dev 与闭源安全公告数据库和扫描器相比,具有以下几项优势:

  • 覆盖大多数开源语言和操作系统生态系统(包括 Git),非常全面。
  • 每条安全公告均来自开放且权威的来源(例如 GitHub Security AdvisoriesRustSec Advisory DatabaseUbuntu security notices)。
  • 任何人都可以提出对安全公告的改进建议,从而形成高质量数据库。
  • OSV 格式以机器可读的格式明确存储受影响版本的信息,并精确映射到开发者的软件包列表上。

以上所有特性都会带来准确且可操作的漏洞通知,从而缩短解决漏洞所需的时间。请访问 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.jsongo.modpom.xml 等,并输出发现的任何漏洞。

OSV-Scanner 可选择使用调用分析来确定项目中是否实际使用了易受攻击的函数,从而减少误报并提供可操作的警报。

OSV-Scanner 还可以检测 vendored 的 C/C++ 代码以进行漏洞扫描。详情请参见此处

支持的锁定文件

OSV-Scanner 支持 11 种以上语言生态系统和 19 种以上锁定文件类型。如需确认您的生态系统是否受支持,请查看我们的详细文档

容器扫描

OSV-Scanner 还支持对容器镜像进行全面、分层感知的扫描,以检测以下操作系统软件包和语言特定依赖项中的漏洞。

发行版支持语言工件支持
Alpine OSGo
DebianJava
UbuntuNode
Python

有关支持的详细信息,请参阅完整文档

用法

$ osv-scanner scan image my-image-name:tag

容器扫描 HTML 输出的屏幕录像

许可证扫描

使用 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 提供引导式修复功能,可根据依赖深度、最低严重性、修复策略和投资回报率等条件建议软件包版本升级。我们目前支持修复以下文件中的漏洞:

生态系统文件格式(类型)支持的修复策略
npmpackage-lock.json(锁定文件)in-place
npmpackage.json(清单文件)relock
Mavenpom.xml(清单文件)override

该功能既可以作为无头 CLI 命令使用,也可以作为交互模式使用。

示例(npm)

$ osv-scanner fix \
    --max-depth=3 \
    --min-severity=5 \
    --ignore-dev  \
    --strategy=in-place \
    -L path/to/package-lock.json

交互模式(npm)

$ osv-scanner fix \
    -M path/to/package.json \
    -L path/to/package-lock.json
交互式 relock 结果界面截图,其中选中了一些放宽补丁

数据来源与隐私

OSV-Scanner 在运行期间会与以下外部服务通信:

OSV.dev API

这是漏洞信息的主要数据来源。OSV-Scanner 会查询此 API 以检查软件包是否存在已知漏洞,并识别 vendored 的 C/C++ 依赖项。发送的数据包括软件包名称、版本、生态系统和文件哈希。使用 --offline 模式可禁用网络请求,改为针对本地数据库进行扫描。

deps.dev API

用于补充软件包信息:

  • 依赖解析:解析依赖关系图,用于漏洞扫描和修复。
  • 容器镜像扫描:查询容器镜像元数据以检测漏洞。
  • 许可证扫描--licenses 标志):检索软件包的许可证信息。
  • 软件包弃用检查:检查软件包是否已被弃用。

发送的数据包括软件包名称、版本和生态系统。不会传输源代码。

软件包注册表

当使用原生注册表进行依赖解析(而非 deps.dev)时,OSV-Scanner 可能会查询:

注册表URL用途
Maven Centralrepo.maven.apache.org/maven2Maven 软件包元数据和 POM 文件
npm Registryregistry.npmjs.orgnpm 软件包元数据
PyPIpypi.orgPython 软件包元数据

贡献

报告问题

如果您认为遇到了 bug,请使用 GitHub 问题跟踪系统。在提交问题之前,请先搜索现有问题,确认您的问题是否已被覆盖。

osv-scanner 贡献代码

有关如何贡献代码的文档,请参阅 CONTRIBUTING.md

Star 历史

Star History Chart

分类