
osv-scanner v2.5.0
Goで書かれた脆弱性スキャナーで、https://osv.dev が提供するデータを使用します。
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システム上のOSパッケージの脆弱性を検出します。
- コンテナ: コンテナイメージをスキャンして、ベースイメージと含まれるパッケージの脆弱性を検出します。
- ガイド付き修復: 依存関係の深さ、最小深刻度、修正戦略、投資対効果などの基準に基づいて、パッケージバージョンのアップグレードに関する推奨事項を提供します。
OSV-Scannerは、この機能を提供するために、拡張可能なOSV-Scalibrライブラリを内部で使用しています。現在サポートされていない言語やパッケージマネージャーがある場合は、機能リクエストを提出してください。
基盤となるデータベース
基盤となるデータベースであるOSV.devは、クローズドソースのアドバイザリデータベースやスキャナーと比較していくつかの利点があります:
- ほとんどのオープンソース言語およびOSエコシステムをカバーしており(Gitを含む)、包括的です。
- 各アドバイザリは、オープンで信頼できる情報源から提供されます(例:GitHub Security Advisories、RustSec Advisory Database、Ubuntu 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ベータ版の説明です。V1を使用している場合は、代わりにV1のREADMEとドキュメントを確認してください。
ソースディレクトリのスキャン
$ osv-scanner scan source -r /path/to/your/dir
このコマンドは、指定されたディレクトリを再帰的にスキャンして、package.json、go.mod、pom.xmlなどのサポートされているパッケージファイルを探し、発見された脆弱性を出力します。
OSV-Scannerには、コール分析を使用して脆弱な関数がプロジェクトで実際に使用されているかどうかを判断するオプションがあり、誤検知が減り、実用的なアラートが得られます。
OSV-Scannerは、ベンダリングされた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は、依存関係の深さ、最小深刻度、修正戦略、投資対効果などの基準に基づいてパッケージバージョンのアップグレードを提案する機能であるガイド付き修復を提供します。 現在、以下のファイルの脆弱性の修復をサポートしています:
| エコシステム | ファイル形式(タイプ) | サポートされている修復戦略 |
|---|---|---|
| npm | package-lock.json (lockfile) | in-place |
| npm | package.json (manifest) | relock |
| Maven | pom.xml (manifest) | 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
データソースとプライバシー
OSV-Scannerは動作中に以下の外部サービスと通信します:
OSV.dev API
脆弱性情報の主要なデータソースです。OSV-ScannerはこのAPIにクエリを送信して、既知の脆弱性がないかパッケージをチェックし、ベンダリングされたC/C++依存関係を特定します。送信されるデータには、パッケージ名、バージョン、エコシステム、ファイルハッシュが含まれます。--offlineモードを使用すると、ネットワークリクエストを無効にして、代わりにローカルデータベースに対してスキャンできます。
deps.dev API
補足的なパッケージ情報に使用されます:
- 依存関係の解決: 脆弱性スキャンと修復のために依存関係グラフを解決します
- コンテナイメージのスキャン: 脆弱性検出のためにコンテナイメージのメタデータをクエリします
- ライセンススキャン(
--licensesフラグ): パッケージのライセンス情報を取得します - パッケージの非推奨化: パッケージが非推奨かどうかをチェックします
送信されるデータには、パッケージ名、バージョン、エコシステムが含まれます。ソースコードは送信されません。
パッケージレジストリ
依存関係の解決に(deps.devの代わりに)ネイティブレジストリを使用する場合、OSV-Scannerは以下のレジストリにクエリを送信する場合があります:
| レジストリ | URL | 用途 |
|---|---|---|
| Maven Central | repo.maven.apache.org/maven2 | MavenパッケージのメタデータとPOMファイル |
| npm Registry | registry.npmjs.org | npmパッケージのメタデータ |
| PyPI | pypi.org | Pythonパッケージのメタデータ |
コントリビュート
問題の報告
バグと思われる問題がある場合は、GitHubのissue追跡システムを使用してください。issueを提出する前に、既存のissueを検索して、あなたの問題がすでにカバーされていないか確認してください。
osv-scannerへのコードの貢献
コードの貢献方法については、CONTRIBUTING.mdを参照してください。