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固定のみで完全に安全」ではない