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

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

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

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

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

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

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

  • Dependabot は、マニフェストファイルを含むデフォルトブランチへのプッシュをスキャンします。 新しい脆弱性レコードが追加されると、既存のすべてのリポジトリがスキャンされ、脆弱性のあるリポジトリごとにアラートが生成されます。 Dependabotアラート は、脆弱性ごとに 1 つのアラートを作成するのではなく、リポジトリレベルで集約されます。 詳しい情報については、「脆弱性のある依存関係に対するアラートについて」を参照してください。

  • Dependabot doesn't scan repositories for vulnerable dependencies on a schedule, but rather when something changes. For example, a scan is triggered when a new dependency is added (GitHub checks for this on every push), or when a new vulnerability is added to the advisory database and synchronized to GitHub Enterprise Server. 詳しい情報については、「脆弱性のある依存関係に対するアラートについて」を参照してください。

一部のエコシステムの脆弱性アラートが表示されないのはなぜですか?

GitHub では、脆弱性アラートのサポートを、高品質で実用的なデータを提供できる一連のエコシステムに限定しています。 Curated vulnerabilities in the GitHub Advisory Database, the dependency graph, and Dependabot alerts are provided for several ecosystems, including Java’s Maven, JavaScript’s npm and Yarn, .NET’s NuGet, Python’s pip, Ruby's RubyGems, and PHP’s Composer. 今後も、より多くのエコシステムのサポートを追加していきます。 サポートされているパッケージエコシステムの概要については、「依存関係グラフについて」を参照してください。

It's worth noting that GitHub Security Advisories may exist for other ecosystems. セキュリティアドバイザリの情報は、特定のリポジトリのメンテナによって提供されます。 このデータは、サポートされているエコシステムの情報と同じ方法でキュレーションされていません。

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

依存関係グラフは、マニフェストとロックファイルの依存関係のみを検索しますか?

依存関係グラフには、環境で明示的に宣言されている依存関係に関する情報が含まれています。 つまり、マニフェストまたはロックファイルで指定されている依存関係です。 依存関係グラフには、通常、マニフェストファイル内の依存関係の依存関係を調べることにより、ロックファイルで指定されていない場合でも、推移的な依存関係も含まれます。

Dependabotアラート は、推移的な依存関係を含め、更新する必要のある依存関係についてアドバイスします。この場合、バージョンはマニフェストまたはロックファイルから判別できます。

依存関係グラフには、「寛容な」依存関係は含まれていません。 「寛容な」依存関係は、パッケージマネージャーのマニフェストまたはロックファイルで参照されるのではなく、別のソースからコピーされ、リポジトリに直接またはアーカイブ内でチェックインされる個々のファイル(ZIP ファイルや JAR ファイルなど)です。

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

依存関係グラフは、変数を使用して指定された依存関係を検出しますか?

依存関係グラフは、マニフェストが GitHub にプッシュされるときにマニフェストを分析します。 したがって、依存関係グラフはプロジェクトのビルド環境にアクセスできないため、マニフェスト内で使用される変数を解決できません。 マニフェスト内で変数を使用して名前、またはより一般的には依存関係のバージョンを指定する場合、その依存関係は依存関係グラフに含まれません。

チェック: 見つからない依存関係は、名前またはバージョンに変数を使用してマニフェストで宣言されていますか?

依存関係グラフのデータに影響する制限はありますか?

はい、依存関係グラフの制限には 2 つのカテゴリがあります。

  1. 処理制限

    これらは GitHub 内に表示される依存関係グラフに影響を与え、Dependabotアラート が作成されないようにします。

    サイズが 0.5 MB を超えるマニフェストは、Enterprise アカウントに対してのみ処理されます。 他のアカウントの場合、0.5 MB を超えるマニフェストは無視され、Dependabotアラート は作成されません。

    デフォルト設定では、GitHub はリポジトリごとに 20 個を超えるマニフェストを処理しません。 Dependabotアラート は、この制限を超えるマニフェストに対しては作成されません。 制限を増やす必要がある場合は、サイト管理者 にお問い合わせください。

  2. 表示制限

    これらは、GitHub 内の依存関係グラフに表示される内容に影響します。 ただし、作成された Dependabotアラート には影響しません。

    リポジトリの依存関係グラフの依存関係ビューには、100 個のマニフェストのみが表示されます。 通常、これは上記の処理制限よりも大幅に高いので十分です。 処理制限が100 個を超える状況でも、GitHub 内に表示されていないマニフェストに対して Dependabotアラート が作成されます。

チェック: 0.5 MB を超えるマニフェストファイル、または多数のマニフェストがあるリポジトリに見つからない依存関係はありませんか?

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

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

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

チェック: 未捕捉の脆弱性の公開日は、National Vulnerability Database で 2017 年より前ですか?

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

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

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

参考リンク

このドキュメントは役立ちましたか?プライバシーポリシー

これらのドキュメントを素晴らしいものにするのを手伝ってください!

GitHubのすべてのドキュメントはオープンソースです。間違っていたり、はっきりしないところがありましたか?Pull Requestをお送りください。

コントリビューションを行う

OR, コントリビューションの方法を学んでください。

問題がまだ解決していませんか?

GitHubコミュニティで質問するサポートへの連絡