Go 脆弱性データベース

Go 脆弱性管理に戻る

概要

Go 脆弱性データベース(https://vuln.go.dev)は、オープンソース脆弱性(OSV)スキーマで Go 脆弱性情報を提供します。

また、pkg.go.dev/vuln でデータベース内の脆弱性を閲覧することもできます。

x/vulndb Git リポジトリの内容に依存しないでください。 そのリポジトリの YAML ファイルは、予告なく変更される可能性のある内部フォーマットを使用して保守されています。

貢献

すべての Go パッケージメンテナが、自身のプロジェクトの公開されている脆弱性に関する情報を提供し、Go パッケージの脆弱性に関する既存の情報を更新することを歓迎します。

報告プロセスをできるだけスムーズにすることを目指しているので、ご提案をお送りください

上記のフォームを使用して、Go 標準ライブラリまたはサブリポジトリの脆弱性を報告しないでください。代わりに、Go プロジェクトの脆弱性については、go.dev/security/policy のプロセスに従ってください。

API

正規の Go 脆弱性データベースである https://vuln.go.dev は、以下に指定されたエンドポイントへの GET リクエストに応答できる HTTP サーバーです。

エンドポイントにはクエリパラメータがなく、特定のヘッダーは必要ありません。このため、固定ファイルシステム(`file://` URL を含む)から提供するサイトでも、この API を実装できます。

各エンドポイントは、非圧縮(`.json` としてリクエストされた場合)または gzip 圧縮(`.json.gz` としてリクエストされた場合)のいずれかの形式で、JSON エンコードされたレスポンスを返します。

エンドポイントは次のとおりです。

一括ダウンロード

Go 脆弱性データベース全体を簡単にダウンロードできるように、すべてのインデックスと OSV ファイルを含む zip ファイルが vuln.go.dev/vulndb.zip で入手できます。

`govulncheck` での使用

デフォルトでは、`govulncheck` は vuln.go.dev にある正規の Go 脆弱性データベースを使用します。

コマンドは、`-db` フラグを使用して別の脆弱性データベースに接続するように設定できます。このフラグは、プロトコルが `http://`、`https://`、または `file://` の脆弱性データベース URL を受け入れます。

`govulncheck` で正しく動作するには、指定された脆弱性データベースが上記の API を実装している必要があります。 `govulncheck` コマンドは、http(s) ソースから読み取る場合は圧縮された ".json.gz" エンドポイントを、ファイルソースから読み取る場合は ".json" エンドポイントを使用します。

レガシー API

正規のデータベースには、レガシー API の一部である追加のエンドポイントがいくつか含まれています。これらのエンドポイントのサポートはまもなく削除される予定です。レガシー API に依存していて、移行にさらに時間が必要な場合は、お知らせください

スキーマ

レポートは、オープンソース脆弱性(OSV)スキーマを使用します。Go 脆弱性データベースは、フィールドに次の意味を割り当てます。

id

id フィールドは、脆弱性エントリの一意の識別子です。GO-<YEAR>-<ENTRYID> 形式の文字列です。

affected

affected フィールドは、脆弱性を含むモジュールバージョンを記述するオブジェクトを含む JSON 配列です。

affected[].package

affected[].package フィールドは、影響を受ける *モジュール* を識別する JSON オブジェクトです。オブジェクトには、2 つの必須フィールドがあります。

affected[].ecosystem_specific

affected[].ecosystem_specific フィールドは、Go の脆弱性検出ツールで使用される、脆弱性に関する追加情報を含む JSON オブジェクトです。

現時点では、ecosystem_specific は常に単一のフィールド `imports` を持つオブジェクトになります。

affected[].ecosystem_specific.imports

`affected[].ecosystem_specific.imports` フィールドは、脆弱性の影響を受けるパッケージとシンボルを含む JSON 配列です。配列内の各オブジェクトには、次の 2 つのフィールドがあります。

database_specific

`database_specific` フィールドには、Go 脆弱性データベースに固有のカスタムフィールドが含まれています。

database_specific.url

`database_specific.url` フィールドは、Go 脆弱性レポートの完全修飾 URL(例:「https://pkg.go.dev/vuln/GO-2023-1621")を表す文字列です。

database_specific.review_status

`database_specific.review_status` フィールドは、脆弱性レポートのレビュー状態を表す文字列です。存在しない場合、レポートは `REVIEWED` と見なされます。可能な値は次のとおりです。

スキーマの他のフィールドについては、OSV 仕様を参照してください。

バージョンに関する注意

Go のツールは、標準のGo モジュールバージョン番号に従って、ソースアドバイザリのモジュールとバージョンを正規の Go モジュールとバージョンに自動的にマッピングしようとします。 `govulncheck` などのツールは、これらの標準バージョンに依存して、Go プロジェクトが依存関係の脆弱性の影響を受けるかどうかを判断するように設計されています。

Go プロジェクトが独自のバージョン管理スキームを使用している場合など、標準の Go バージョンへのマッピングが失敗する場合があります。この場合、Go 脆弱性データベースレポートは、保守的にすべての Go バージョンが影響を受けるとリストする可能性があります。これにより、`govulncheck` などのツールが、認識できないバージョン範囲のために脆弱性を報告できないこと(偽陰性)を防ぎます。ただし、保守的にすべてのバージョンが影響を受けるとリストすると、ツールがモジュールの修正バージョンに脆弱性が含まれていると誤って報告する可能性があります(偽陽性)。

`govulncheck` が脆弱性を誤って報告している(または報告できない)と思われる場合は、脆弱性レポートに編集を提案してください。レビューいたします。

Go 脆弱性データベースのすべての脆弱性は、上記の OSV スキーマを使用します。

さまざまな Go 脆弱性の例については、以下のリンクを参照してください。

除外されたレポート

Go 脆弱性データベースのレポートは、さまざまなソースから収集され、Go セキュリティチームによってキュレーションされています。脆弱性アドバイザリ(CVE や GHSA など)を見つけて、さまざまな理由で除外する場合があります。このような場合、最小限のレポートが x/vulndb リポジトリのx/vulndb/data/excluded の下に作成されます。

レポートは、次の理由で除外される場合があります。

現時点では、除外されたレポートはvuln.go.dev APIを介して提供されていません。ただし、特定のユースケースがあり、APIを通じてこの情報にアクセスできると役立つ場合は、お知らせください