コンテンツにスキップ
Zenn Dev Kou Pg 0131 Articles Gha Checkout Persist Credentials

【GitHub Actions】actions/checkout には persist-credentials: false を設定するべき

  • URL: https://zenn.dev/kou_pg_0131/articles/gha-checkout-persist-credentials
  • 日付: 2026-06-26
  • Tier: Tier 3
  • 要旨: GitHub Actionsでactions/checkoutを使う際、デフォルトのpersist-credentials: trueのままではGitHubトークンが$RUNNER_TEMP以下の設定ファイルに平文同然の状態で残り、後続ステップから容易に抜き取られる危険性がある。persist-credentials: falseを設定することでチェックアウト後にファイルが削除され、後続ステップからのファイル経由トークン窃取を防げる。Git認証が必要な後続処理はgh auth setup-gitコマンドで都度参照する構成に切り替えることで安全性と利便性を両立できる。設定漏れはghasec・zizmor・ghalintといった静的解析ツールで自動検出可能であり、人的な見落とし防止としてCI組み込みが推奨される。

詳細

  • 問題: actions/checkoutはデフォルト(persist-credentials: true)で$RUNNER_TEMP/git-credentials-.configを残す
  • ファイルの内容: [http “https://github.com/”] extraheader = AUTHORIZATION: basic <Base64文字列> の形式で、デコードするとx-access-token:<GitHubトークン>が取れる
  • 攻撃経路: リモートアクションの侵害やスクリプトインジェクションを経由してこのファイルを読まれる
  • 対策: persist-credentials: false を設定するとチェックアウト完了後にファイルが削除される
  • Git認証が必要な後続処理の対応:
    • gh auth setup-git コマンドを実行すると ~/.gitconfig にGitHub CLI経由の認証設定が追加される
    • 必要なステップにのみ env: GH_TOKEN: ${{ github.token }} を渡す構成
  • 静的解析ツールによる検出:
    • ghasec: “persist-credentials: false” must be set in “with” (checkout-persist-credentials)
    • zizmor: artipacked ルールで検出
    • ghalint: checkout_persist_credentials_should_be_false ポリシーで検出
  • 補足: disable-checkout-persist-credentials CLIで既存ワークフローを自動修正可能