GitHub Actions の uses をコミット SHA で固定する(pinact)
uses: actions/checkout@v4 をフルコミット SHA に置き換え、Action のタグ書き換えによる侵害を防ぐ。pinact で自動化できる。
何を解決するか
- タグ(
@v4)は後から別コミットに付け替え可能。Action のメンテナが侵害されると、タグ参照している全リポジトリで悪性コードが CI シークレット付きで動く。
手順
sh
pinact run # .github/workflows 内の uses を SHA に変換(コメントでバージョンを残す)
pinact run -u # 最新版に更新しつつ SHA で固定変換後のイメージ:
yaml
- uses: actions/checkout@<40桁のSHA> # v4.2.2- Renovate の
helpers:pinGitHubActionDigestsで継続的に更新するとよい。 - AI エージェントのスキルも同じ考え方で、
gh skillはスキルをタグやコミットに固定できる(GitHub Changelog)。
注意点
- SHA 固定でも「固定したコミット自体が悪性」なら防げない。導入時にレビューする。
- composite action や reusable workflow の内部で使われる Action はさらに先でタグ参照している場合がある。