GitHub Actionsワークフローのセキュリティ強化チェックリスト
必須対応
1. permissions の明示設定
未設定だとデフォルト権限がリポジトリ設定依存で過剰になりうる。最小権限を明示する。
permissions:
contents: read
2. ${{ }} インジェクション対策
run: ブロック内で outputs を直接展開するとシェルインジェクションのリスク。環境変数経由で渡す。
# NG: 直接展開
run: echo "$\{\{ steps.changed.outputs.files \}\}"
# OK: 環境変数経由
env:
CHANGED_FILES: $\{\{ steps.changed.outputs.files \}\}
run: echo "$CHANGED_FILES"
3. SHAピンニング
タグ(@v4)は上書き可能。フルコミットSHAで固定する。2025年3月のtj-actions/changed-files事件(CVE-2025-30066)が実例。
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
4. EOFデリミタのランダム化
マルチライン出力で固定文字列EOFを使うと内容に含まれた場合に破壊される。
DELIMITER=$(openssl rand -hex 16)
echo "output<<$DELIMITER" >> "$GITHUB_OUTPUT"
echo "$CONTENT" >> "$GITHUB_OUTPUT"
echo "$DELIMITER" >> "$GITHUB_OUTPUT"
推奨対応
5. workflow_dispatch の入力パラメータ
手動実行時はHEAD~1比較が意図通り動かないことがある。全件処理モードを用意する。