Skip to main content

脆弱な依存関係の検出

          GitHubによって報告された依存関係情報が期待どおりでない場合は、考慮すべき点が多数あり、さまざまな点を確認できます。

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

見つからない依存関係または未検出の依存関係

          GitHub では、依存関係データが他のツールとは異なる方法で生成および表示されます。 したがって、依存関係を特定するために別のツールを使用している場合は、ほぼ確実に異なる結果が表示されます。 次の点を考慮してください。
  • GitHub Advisory Database は、 GitHub が脆弱な依存関係とマルウェアを識別するために使用するデータ ソースの 1 つです。 これは、 GitHub上の一般的なパッケージ エコシステムに関するセキュリティ アドバイザリの無料でキュレーションされたデータベースです。 これには、GitHubからGitHub Security Advisoriesに直接報告されたデータと、公式のフィードとコミュニティ ソースの両方が含まれます。 このデータは、誤った情報または操作不可能な情報が開発コミュニティと共有されないように、 GitHub によってレビューおよびキュレーションされます。 詳しくは、「GitHub Advisory Database でのセキュリティ アドバイザリの参照」をご覧ください。

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

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

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

            Dependabot は、スケジュールに従ってリポジトリをスキャンするのではなく、何かが変更されたときにスキャンします。 たとえば、スキャンは、新しい依存関係が追加されたとき (プッシュごとにこれを確認GitHub)、または新しいアドバイザリがデータベースに追加されたときにトリガーされに同期されます。 詳しくは、「[AUTOTITLE](/code-security/dependabot/dependabot-alerts/about-dependabot-alerts#detection-of-insecure-dependencies)」をご覧ください。
    

アラート の対象範囲

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

  • ロックファイルで宣言されている推移的な依存関係

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

サポートされていないエコシステム

          Dependabot alerts は、高品質で実用的なデータを提供できる一連のエコシステムでサポートされています。 
          GitHub Advisory Databaseでキュレーションされたアドバイザリ、 依存関係グラフDependabot セキュリティ更新プログラム、、Dependabot alerts は、Javaの Maven、JavaScript の npm、Yarn、.NET の NuGet、Python の pip、Ruby の RubyGems、PHP の Composer など、いくつかのエコシステムに対して提供されています。 
          Dependabot alertsでサポートされているパッケージ エコシステムの概要については、[AUTOTITLE](/code-security/supply-chain-security/understanding-your-software-supply-chain/dependency-graph-supported-package-ecosystems#supported-package-ecosystems) を参照してください。

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

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

過去の脆弱性

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

古い脆弱性に関する一部の情報は、特にこれらの CVE が特に広く普及している場合に利用できますが、一部の古い脆弱性は GitHub Advisory Databaseに含まれていません。 データベースに含める必要がある特定の古い脆弱性がある場合は、 GitHub サポート ポータルにお問い合わせください。

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

勧告データベース範囲

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

          DependabotはGitHub Advisory Databaseのキュレーションされたデータを使用するため、アラートの量は少なくなりますが、受信するアラートは正確で関連性があります。

アラートの生成と集計

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

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

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

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

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

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

依存関係無視オプション

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

          GitHub Actions バージョンの Monorepo の制限事項

リポジトリに複数の GitHub Actions (monorepo など) が含まれている場合、使用するタグ形式は、アクションのバージョン Dependabot 検出して更新する方法に影響します。

  • ダッシュ (-) 区切り (たとえば、@my-action-v0.1.0):

    • Dependabot は、1 つの依存関係エントリの下に複数のアクションをグループ化したり、新しいバージョンを正しく検出できない場合があります。 これは、 Dependabot がアクションを区別するためにスラッシュベースのタグ解析に依存しているために発生します。
  • スラッシュ (/) 区切り (たとえば、@my-action/v0.1.0):

    • Dependabot スラッシュによって、 Dependabotの解析ロジックに合わせた階層タグ構造が作成されるため、各アクションを個別に正しく検出して更新します。

            **レコメンデーション:** 複数のアクションがあるモノリポジトリの場合は、アクション タグに `name/version` (スラッシュ) 形式を使います。 これにより、 Dependabot がタグ階層を正しく解析し、アクションを個別に更新できるようになります。
      
  • 例:

    # Recommended: namespaced with slash
    uses: my-org/monorepo/my-action@my-action/v0.1.0
    
    # Not recommended: dash
    uses: my-org/monorepo@my-action-v0.1.0
    

詳細については、次を参照してください。