コンテンツにスキップ
Zenn Dev Kou Pg 0131 Articles Gha Should Be Pinned

GitHub Actions で参照するアクションはコミット SHA で固定するべき

  • URL: https://zenn.dev/kou_pg_0131/articles/gha-should-be-pinned
  • 日付: 2026-06-26
  • Tier: Tier 3
  • 要旨: GitHub Actionsでリモートアクションをコミット SHA固定にすべき理由を多角的に論じた記事。Gitタグやブランチはmutableなため、参照先リポジトリが侵害されると自身のワークフロー定義を変更していないのに悪意あるコードが実行されるリスクがある(tj-actions・reviewdog侵害事例を参照)。コミットSHAはimmutableなためこのリスクを低減でき、pinactで一発変換できる。「メジャーバージョンタグが便利」「Immutable Releasesがあれば安全」「コミットSHAを間違えると見分けがつかない」などの反論に対してもそれぞれ具体的に反証しており、なりすましコミットの検出にはzizmor、SHA固定の強制はリポジトリ設定で実現できる。

詳細

  • 問題の本質: GitタグはMutableなため、アクション提供リポジトリが侵害されるとタグを書き換えられ、利用者側の変更なしに悪意あるコードが実行される
  • 実際の事例: tj-actions・reviewdogが侵害されて大騒ぎになった事件(記事執筆時点から約1年前)
  • 推奨: コミットSHAでアクションを固定し、インラインコメントでバージョンを記載
    • 良い例: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
  • ツール:
    • pinact run: タグ/ブランチ指定をSHA固定に自動変換(brew install pinact)
    • pinact run –update: 最新バージョンに更新
    • –verify オプション: コメントのタグとSHAの不一致を検出(pinactコメントより)
    • zizmor: impostor-commitルールでなりすましコミットSHAを検出
  • リポジトリ設定による強制: “Require actions to be pinned to a full-length commit SHA” 設定で未固定ワークフローの実行をエラーにできる
  • 反論への反証:
    • 「Immutable Releases有効なら安全」→ 全依存アクションおよびメジャーバージョンタグで有効とは限らない
    • 「メジャーバージョンタグが便利」→ 依存ライブラリを毎日自動更新mainにpushするのと同じリスク
    • 「コミットSHA間違いで見分けがつかない」→ zizmor impostor-commitで検出可能
  • 注意: SHA固定はサプライチェーンリスク軽減の一手段であり、「SHA固定のみで完全に安全」ではない