Git

GitHub Dependabotでセキュリティ脆弱性を自動検出する方法

GitGitHubセキュリティ

GitHub Dependabotで
セキュリティ脆弱性を自動検出する

GitHub Dependabotは、プロジェクトの依存パッケージに含まれる既知の脆弱性を自動的に検出し、修正PRを作成してくれる機能です。設定方法から対応手順まで解説します。

こんな人向けの記事です

  • GitHubリポジトリのセキュリティを強化したい人
  • 依存パッケージの脆弱性を自動で検出したい人
  • Dependabotアラートの対処方法を知りたい人

Step 1Dependabotとは

Dependabotは、GitHubに組み込まれたセキュリティ機能です。プロジェクトの依存パッケージ(npm、pip、Gemなど)を監視し、既知の脆弱性が見つかるとアラートを発行します。

機能説明
Dependabot alerts脆弱性のあるパッケージを検出してアラートを表示
Dependabot security updates脆弱性を修正するPRを自動作成
Dependabot version updatesパッケージを最新バージョンに更新するPRを定期作成

対応パッケージマネージャー: npm、pip、Bundler、Maven、Gradle、Composer、Go modules、Cargo、Docker など主要なパッケージマネージャーに対応しています。

Step 2Dependabotの有効化

方法1: GitHub Webから設定

リポジトリの SettingsCode security で以下を有効にします。

  1. Dependency graph を Enable(依存関係の解析)
  2. Dependabot alerts を Enable(脆弱性アラート)
  3. Dependabot security updates を Enable(自動修正PR)

方法2: GitHub CLIから設定

ターミナル
# Dependabotアラートを有効化
gh api repos/ユーザー名/リポジトリ名/vulnerability-alerts -X PUT

Step 3アラートの確認と対処

脆弱性が検出されると、リポジトリの SecurityDependabot alerts にアラートが表示されます。

対処方法

対処方法使う場面
パッケージ更新対象パッケージをアップデート互換性の問題がない場合
自動修正PRDependabotのPRをマージsecurity updatesが有効な場合
dismissアラートを無視該当パッケージを使っていない場合
ターミナル
# Pythonパッケージの更新例
pip install --upgrade パッケージ名
pip freeze > requirements.txt

# Node.jsパッケージの更新例
npm update パッケージ名
npm audit fix

注意: パッケージを更新する際は、破壊的変更がないか必ずリリースノートを確認してください。メジャーバージョンアップはAPIが変わる可能性があります。

Step 4GitHub CLIでアラートを確認する

ブラウザを開かなくても、GitHub CLIでアラートを一覧表示できます。

ターミナル
# アラート一覧を取得(パッケージ名・深刻度・概要)
gh api repos/ユーザー名/リポジトリ名/dependabot/alerts   --jq '.[] | {
    severity: .security_advisory.severity,
    package: .security_vulnerability.package.name,
    summary: .security_advisory.summary,
    state: .state
  }'

# openなアラートのみ取得
gh api repos/ユーザー名/リポジトリ名/dependabot/alerts?state=open   --jq '.[] | {severity: .security_advisory.severity, package: .security_vulnerability.package.name}'

Step 5Dependabot version updatesの設定

定期的にパッケージを最新バージョンに更新するPRを自動作成するには、.github/dependabot.ymlをリポジトリに追加します。

.github/dependabot.yml
version: 2
updates:
  # Python(pip)の依存関係を毎週チェック
  - package-ecosystem: "pip"
    directory: "/"
    schedule:
      interval: "weekly"

  # npm の依存関係を毎週チェック
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"

  # Dockerイメージを毎月チェック
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "monthly"

ポイント: intervaldailyweeklymonthlyから選べます。アクティブなプロジェクトではweeklyが推奨です。

Step 6アラートの深刻度と優先順位

Dependabotアラートには深刻度(severity)が設定されています。高い順に対処してください。

深刻度説明対応目安
criticalリモートコード実行などの重大な脆弱性即座に対応
highデータ漏洩やDoSなどの重要な脆弱性1週間以内
medium限定的な影響の脆弱性次回リリースまで
low影響が軽微な脆弱性余裕のある時に対応

重要: criticalhighのアラートは放置しないでください。攻撃者は公開された脆弱性情報を利用して自動的に攻撃を仕掛けることがあります。