GitHub Actions が完全なコミット SHA に固定されていない

外部アクションを確認済みの完全なコミット SHA に固定し、参照コードの予期しない変更を減らしてください。

説明

GitHub Actions ワークフローで外部アクションをタグやブランチだけで参照すると、その名前が別のコミットを指すように変更される可能性があります。同じワークフロー設定でも、後の実行時には未確認のアクションコードが動くことがあります。

完全なコミット SHA は、アクションのリポジトリで参照するコードを固定します。実行中に取得する他の依存関係や、ワークフローの権限まで安全にするものではありません。

想定される影響

  • 外部アクションのリポジトリが変わると、未確認のコードが CI で実行される可能性があります。
  • タグの付け替えや悪意ある変更により、サプライチェーン攻撃を受ける可能性があります。
  • 実行結果が時期によって変わり、再現性や監査可能性が低下します。

対処方法

外部アクションの uses: を確認済みの完全なコミット SHA に固定してください。SHA が元のリポジトリの確認したバージョンに属することを確かめ、更新は検証後に新しい SHA へ明示的に置き換えてください。ワークフローの権限とアクションの他の依存関係も別途確認してください。

例

過去のアクションバージョンを使い、参照形式を比較する抜粋です。実際に使う際はサポートされるバージョンを確認し、必要なメッセージ入力やトークン権限などを別途設定してください。

変更前

yaml
name: ci
on:
  pull_request:

jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
      - name: Add comment
        uses: thollander/actions-comment-pull-request@v2

変更後

yaml
name: ci
on:
  pull_request:

jobs:
  comment:
    runs-on: ubuntu-latest
    steps:
      - name: Add comment
        uses: thollander/actions-comment-pull-request@b07c7f86be67002023e6cb13f57df3f21cdd3411

変更後はタグではなく特定のコミットを参照します。そのコミットの安全性を確認してください。SHA を固定しても、後のセキュリティ更新は自動では適用されません。

参考資料