Skip to main content

脆弱性のある依存関係の検出のトラブルシューティング

GitHub Enterprise Cloud によって報告された依存関係の情報が期待したものと異なる場合、いくつかの考慮するポイントと、様々な確認項目があります。

GitHub Enterprise Cloud によって報告された依存関係の検出結果は、他のツールから返される結果とは異なる場合があります。 これには理由があり、GitHub がプロジェクトの依存関係をどのように決定するかを理解しておくと便利です。

一部の依存関係がないように見えるのはなぜですか?

GitHub は、他のツールとは異なる方法で依存関係データを生成および表示します。 したがって、依存関係を特定するために別のツールを使用している場合は、ほぼ確実に異なる結果が表示されます。 次に例を示します。

  • GitHub Advisory Database は、GitHub が脆弱性のある依存関係とマルウェアを識別するために使用するデータ ソースの 1 つです。 これは、GitHub の一般的なパッケージ エコシステムのセキュリティ アドバイザリがキュレーションされた無料のデータベースです。 これには、GitHub Security Advisories から GitHub に直接報告されたデータと、公式フィードおよびコミュニティソースの両方が含まれます。 このデータは GitHub によってレビューおよびキュレーションされ、虚偽または実行不可能な情報が開発コミュニティと共有されないようにします。 詳しくは、「GitHub Advisory Database でのセキュリティ アドバイザリの参照」をご覧ください。

  • 依存関係グラフは、ユーザのリポジトリ内のすべての既知のパッケージマニフェストファイルを解析します。 たとえば、npm の場合、package-lock.json ファイルを解析します。 リポジトリのすべての依存関係とパブリック依存関係のグラフを作成します。 これは、依存関係グラフを有効にし、誰かがデフォルトブランチにプッシュしたときに発生します。また、サポートされているマニフェスト形式に変更を加えるコミットが含まれています。 詳細については、「依存関係グラフについて」および「依存関係グラフのトラブルシューティング」を参照してください。

  • Dependabot は、マニフェストファイルを含むデフォルトブランチへのプッシュをスキャンします。 新しいアドバイザリが追加されると、既存のすべてのリポジトリがスキャンされ、影響を受けるリポジトリごとにアラートが生成されます。 Dependabot alerts は、アドバイザリごとに 1 つのアラートを作成するのではなく、リポジトリ レベルで集約されます。 詳細については、「Dependabot alerts について」を参照してください。

  • Dependabot security updates は、リポジトリ内の脆弱性のある依存関係に関するアラートを受け取ったときにトリガーされます。 可能な場合、Dependabot はリポジトリ内でプルリクエストを作成して、脆弱性を回避するために必要な最小限の安全なバージョンに脆弱性のある依存関係をアップグレードします。 詳細については、「Dependabot security updates について」と「Dependabot エラーのトラブルシューティング」を参照してください。

    Dependabot は、スケジュールに従ってではなく、何か変更があった場合にリポジトリをスキャンします。 スキャンがトリガーされるのは、たとえば、新しい依存関係が追加されたとき (GitHub はプッシュのたびにこれをチェックします)、または新しいアドバイザリがデータベースに追加されたときです。 詳細については、「Dependabot alertsについて」を参照してください。

Dependabot alerts は、マニフェストとロックファイルの安全でない依存関係にのみ関連していますか?

Dependabot alerts は、推移的な依存関係を含め、更新する必要のある依存関係についてアドバイスします。この場合、バージョンはマニフェストまたはロックファイルから判別できます。 Dependabot security updatesは、Dependabotが依存関係を直接 "修復" できる場合、つまり、以下のような場合にのみ変更を提案します。

  • マニフェストまたはロックファイルで明示的に宣言されている直接依存関係
  • ロックファイルで宣言されている推移的な依存関係

チェック: リポジトリのマニフェストまたはロックファイル内で指定されていないコンポーネントに対する、キャッチされていない脆弱性はありますか?

一部のエコシステムで Dependabot alerts が生成されないのはなぜですか?

Dependabot alerts は、高品質でアクションにつながるデータを提供できるエコシステムのセットに対してサポートされています。 GitHub Advisory Database、依存関係グラフ、Dependabot のセキュリティ更新プログラム、および Dependabot alerts のキュレーションされたアドバイザリは、Java の Maven、JavaScript の npm と Yarn、.NET の NuGet、Python の pip、Ruby の RubyGems、PHP の Composer など、いくつかのエコシステムに対して提供されます。 今後も、より多くのエコシステムのサポートを追加していきます。 サポートされているパッケージ エコシステムの概要については、「依存関係グラフについて」を参照してください。

セキュリティ アドバイザリは、その他のエコシステムに対しても存在するかもしれないことに注意してください。 レビューされていないセキュリティ アドバイザリの情報は、特定のリポジトリの保守担当者によって提供されます。 このデータは GitHub によってキュレーションされません。 詳しくは、「GitHub Advisory Database でのセキュリティ アドバイザリの参照」をご覧ください。

チェック: キャッチされていない脆弱性は、サポートされていないエコシステムに適用されますか?

Dependabot は、何年も前から知られている脆弱性に対してアラートを生成しますか?

GitHub Advisory Database は 2019 年 11 月にリリースされ、2017 年からサポートされているエコシステムのセキュリティ リスクのアドバイザリを含めるために当初にバックフィルされました。 データベースに CVE を追加するときは、新しい CVE のキュレーションと、新しいバージョンのソフトウェアに影響を与える CVE を優先します。

古い脆弱性に関するいくつかの情報は、特にこれらの CVE が特に広範囲に及ぶ場合に利用可能ですが、一部の古い脆弱性は GitHub Advisory Database に含まれていません。 データベースに含める必要のある特定の古い脆弱性がある場合は、GitHub Support にお問い合わせください。

チェック: キャッチされていない脆弱性の公開日は、National Vulnerability Database で 2017 年より前ですか?

GitHub Advisory Database が公開された脆弱性データのサブセットを使用するのはなぜですか?

一部のサードパーティツールは、人間によるチェックまたはフィルタが行われていない未キュレートの CVE データを使用しています。 これは、タグ付けや重要度のエラー、またはその他の品質に問題のある CVE により、わずらわしく有用性の低いアラートが頻出するということです。

Dependabot は GitHub Advisory Database で厳選されたデータを使用するため、アラートの数は少なくなる可能性があります。ただし、受信するアラートは正確で関連性があるものです。

安全でない依存関係ごとに個別のアラートが生成されますか?

依存関係に複数の脆弱性がある場合、アドバイザリとマニフェストのレベルで脆弱性ごとにアラートが生成されます。

異なるマニフェストを持つ同じパッケージからの 2 つのアラートを示す Dependabot alerts タブのスクリーンショット。

従来の Dependabot alerts は、同じ依存関係のすべての脆弱性を含む 1 つの集約アラートにグループ化されました。 従来の Dependabot アラートへのリンクに移動すると、その依存パッケージとマニフェストの脆弱性を表示するためにフィルター処理された Dependabot alerts タブにリダイレクトされます。

従来の Dependabot アラートに移動して、フィルター処理されたアラートを示す Dependabot alerts タブのスクリーンショット。

GitHub の Dependabot alerts の数は、アラートの合計数、つまり依存関係の数ではなく、脆弱性の数を示します。

チェック: 表示されている合計に不一致がある場合は、アラートの数と依存関係の数を比較していないかどうかを確認してください。 また、フィルター処理されたアラートのサブセットではなく、すべてのアラートを表示していることを確認します。

Dependabot では特定の依存関係を無視できますか?

構成ファイル内の特定の依存関係を無視するように Dependabot を構成できます。これにより、それらの依存関係に関するセキュリティとバージョンの更新が防止されます。 セキュリティ更新プログラムのみを使用したい場合は、構成ファイルで既定の動作をオーバーライドする必要があります。 詳細については、バージョンの更新がアクティブ化されないようにする方法について「構成ファイルで既定の動作をオーバーライドする」を参照してください。 依存関係を無視する方法については、「ignore」を参照してください。

参考資料