
Goで書かれた脆弱性スキャナーで、https://osv.dev が提供するデータを使用します。
<picture>
<source srcset="/docs/images/osv-scanner-full-logo-darkmode.svg" media="(prefers-color-scheme: dark)">
<!-- markdown-link-check-disable-next-line -->
<img src="https://raw.githubusercontent.com/google/osv-scanner/HEAD/docs/images/osv-scanner-full-logo-lightmode.svg">
</picture>
---
[](https://scorecard.dev/viewer/?uri=github.com/google/osv-scanner)
[](https://github.com/google/osv-scanner/actions/workflows/checks.yml)
[](https://codecov.io/gh/google/osv-scanner)
[](https://slsa.dev)
[](https://github.com/google/osv-scanner/releases)
OSV-Scannerを使用して、プロジェクトの依存関係に影響する既存の脆弱性を発見しましょう。
OSV-Scannerは、[OSVデータベース](https://osv.dev/)への公式サポート付きフロントエンドと、プロジェクトの依存関係リストをそれらに影響する脆弱性に結び付ける[OSV-Scalibr](https://github.com/google/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](https://github.com/google/osv-scalibr)ライブラリを内部で使用しています。現在サポートされていない言語やパッケージマネージャーがある場合は、[機能リクエスト](https://github.com/google/osv-scanner/issues)を提出してください。
#### 基盤となるデータベース
基盤となるデータベースである[OSV.dev](https://osv.dev/)は、クローズドソースのアドバイザリデータベースやスキャナーと比較していくつかの利点があります:
- ほとんどのオープンソース言語およびOSエコシステムをカバーしており([Git](https://osv.dev/list?q=&ecosystem=GIT)を含む)、包括的です。
- 各アドバイザリは、オープンで信頼できる情報源から提供されます(例:[GitHub Security Advisories](https://github.com/github/advisory-database)、[RustSec Advisory Database](https://github.com/rustsec/advisory-db)、[Ubuntu security notices](https://github.com/canonical/ubuntu-security-notices/tree/main/osv))。
- 誰でもアドバイザリへの改善を提案できるため、非常に高品質なデータベースとなっています。
- OSV形式は、影響を受けるバージョンに関する情報を、開発者のパッケージリストに正確にマッピングできる機械可読形式で明確に保存します。
以上のすべてにより、正確で実用的な脆弱性通知が実現され、解決に必要な時間が短縮されます。詳細は[OSV.dev](https://osv.dev/)をご覧ください!
## 基本的なインストール
OSV-Scannerをインストールするには、ドキュメントの[インストールセクション](https://google.github.io/osv-scanner/installation)を参照してください。OSV-Scannerのリリースは、GitHubリポジトリの[リリースページ](https://github.com/google/osv-scanner/releases)にあります。推奨される方法は、お使いのプラットフォーム用のプリビルドバイナリをダウンロードすることです。または、`go install github.com/google/osv-scanner/v2/cmd/osv-scanner@latest`を使用してソースからビルドすることもできます。
## 主な機能
詳細については、[詳細なドキュメント](https://google.github.io/osv-scanner)を読んでOSV-Scannerの使用方法を学んでください。各機能の詳細については、このREADMEのタイトルをクリックしてください。
注意:これらは最新のOSV-Scanner V2ベータ版の説明です。V1を使用している場合は、代わりにV1の[README](https://github.com/google/osv-scanner-v1)と[ドキュメント](https://google.github.io/osv-scanner-v1/)を確認してください。
### [ソースディレクトリのスキャン](https://google.github.io/osv-scanner/usage)
```bash
$ osv-scanner scan source -r /path/to/your/dir
```
このコマンドは、指定されたディレクトリを再帰的にスキャンして、`package.json`、`go.mod`、`pom.xml`などのサポートされているパッケージファイルを探し、発見された脆弱性を出力します。
OSV-Scannerには、コール分析を使用して脆弱な関数がプロジェクトで実際に使用されているかどうかを判断するオプションがあり、誤検知が減り、実用的なアラートが得られます。
OSV-Scannerは、ベンダリングされたC/C++コードを検出して脆弱性スキャンを行うこともできます。詳細は[こちら](https://google.github.io/osv-scanner/usage/#cc-scanning)を参照してください。
#### サポートされているロックファイル
OSV-Scannerは、11以上の言語エコシステムと19以上のロックファイルタイプをサポートしています。お使いのエコシステムがカバーされているかどうかを確認するには、[詳細なドキュメント](https://google.github.io/osv-scanner/supported-languages-and-lockfiles/#supported-lockfiles)を参照してください。
### [コンテナスキャン](https://google.github.io/osv-scanner/usage/scan-image)
OSV-Scannerは、コンテナイメージの包括的なレイヤー認識スキャンもサポートしており、以下のオペレーティングシステムパッケージと言語固有の依存関係の脆弱性を検出します。
| ディストリビューションのサポート | 言語アーティファクトのサポート |
| -------------- | -------------------------- |
| Alpine OS | Go |
| Debian | Java |
| Ubuntu | Node |
| | Python |
サポートの詳細については、[完全なドキュメント](https://google.github.io/osv-scanner/supported-languages-and-lockfiles/#supported-artifacts)を参照してください。
**使用法**:
```bash
$ osv-scanner scan image my-image-name:tag
```

### [ライセンススキャン](https://google.github.io/osv-scanner/usage/license-scanning/)
deps.devデータを使用して依存関係のライセンスを確認します。概要を表示するには:
```bash
osv-scanner --licenses path/to/repository
```
許可されたライセンスリスト(SPDX形式)に対して確認するには:
```bash
osv-scanner --licenses="MIT,Apache-2.0" path/to/directory
```
### [オフラインスキャン](https://google.github.io/osv-scanner/usage/offline-mode/)
ローカルのOSVデータベースに対してプロジェクトをスキャンします。最初のデータベースダウンロード後はネットワーク接続は不要です。データベースは手動でダウンロードすることもできます。
```bash
osv-scanner --offline --download-offline-databases ./path/to/your/dir
```
### [ガイド付き修復](https://google.github.io/osv-scanner/experimental/guided-remediation/)(実験的)
> [!WARNING]
> ガイド付き修復(`fix`コマンド)は、信頼できないプロジェクトで実行すると危険を伴う可能性があります。パッケージマネージャーがスクリプトを実行したり、プロジェクトで指定された外部レジストリを参照したりする可能性があります。続行する前に、ソースコードとアーティファクトを信頼できることを確認してください。
OSV-Scannerは、依存関係の深さ、最小深刻度、修正戦略、投資対効果などの基準に基づいてパッケージバージョンのアップグレードを提案する機能であるガイド付き修復を提供します。
現在、以下のファイルの脆弱性の修復をサポートしています:
| エコシステム | ファイル形式(タイプ) | サポートされている修復戦略 |
| :-------- | :----------------------------- | :--------------------------------------------------------------------------------------------------------------------- |
| npm | `package-lock.json` (lockfile) | [`in-place`](https://google.github.io/osv-scanner/experimental/guided-remediation/#in-place-lockfile-changes) |
| npm | `package.json` (manifest) | [`relock`](https://google.github.io/osv-scanner/experimental/guided-remediation/#relock-and-relax-direct-dependencies) |
| Maven | `pom.xml` (manifest) | [`override`](https://google.github.io/osv-scanner/experimental/guided-remediation/#override-dependency-versions) |
これは、ヘッドレスCLIコマンドとしても、インタラクティブモードとしても利用できます。
#### 例(npmの場合)
```bash
$ osv-scanner fix \
--max-depth=3 \
--min-severity=5 \
--ignore-dev \
--strategy=in-place \
-L path/to/package-lock.json
```
#### インタラクティブモード(npmの場合)
```bash
$ osv-scanner fix \
-M path/to/package.json \
-L path/to/package-lock.json
```
<img src="https://assets.kitploit.com/production/public/readmes/202/c3a58b2f3acf8619375afa1f7ec3ede0349494517a5812c4c09e1638c1b8cdaa.png" alt="いくつかの緩和パッチが選択されたインタラクティブなリロック結果画面のスクリーンショット">
## データソースとプライバシー
OSV-Scannerは動作中に以下の外部サービスと通信します:
### [OSV.dev API](https://osv.dev/)
脆弱性情報の主要なデータソースです。OSV-ScannerはこのAPIにクエリを送信して、既知の脆弱性がないかパッケージをチェックし、ベンダリングされたC/C++依存関係を特定します。送信されるデータには、パッケージ名、バージョン、エコシステム、ファイルハッシュが含まれます。[`--offline`モード](https://google.github.io/osv-scanner/usage/offline-mode/)を使用すると、ネットワークリクエストを無効にして、代わりにローカルデータベースに対してスキャンできます。
### [deps.dev API](https://docs.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追跡システム](https://github.com/google/osv-scanner/issues)を使用してください。issueを提出する前に、既存のissueを検索して、あなたの問題がすでにカバーされていないか確認してください。
### `osv-scanner`へのコードの貢献
コードの貢献方法については、[CONTRIBUTING.md](https://github.com/google/osv-scanner/blob/main/CONTRIBUTING.md)を参照してください。
## スター履歴
[](https://www.star-history.com/#google/osv-scanner&Date)