テック技報最新号へ →
コード

GitHub Actions: pull_request_target で PR のコードを checkout してビルドしない

pull_request_target はベースリポジトリの権限と secrets を持つ。ここに PR ブランチを明示 checkout して npm install / ビルドすると、フォーク作者のコードが高い権限で実行され、リポジトリ侵害につながる。

@t6adev · 投稿 2026-05-12
#github-actions#security#pull_request_target#サプライチェーン

危険なパターン

yaml
on:
  pull_request_target:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          ref: ${{ github.event.pull_request.head.sha }}  # ← 攻撃者のコード
      - run: npm install && npm test  # postinstall / テストで任意コード実行可

安全な使い分け

やりたいこと推奨
ラベル付け・コメントだけ(コードを走らせない)pull_request_target 可。デフォルト checkout(ベース側)のまま
ビルド・テストなどコード実行pull_request(フォークからは write/secrets なし)
テスト結果を privileged に反映まず pull_request で artifact 保存 → workflow_run で読み取り・コメント(GitHub Actions: workflow_run でCI成功後にだけCDを起動する)

一時しのぎと落とし穴

  • safe to test ラベル条件はレビュー後実行の一時策だが、ラベル後に攻撃者がコミットを足す競合がある。恒久策に置き換える。
  • 修正前に開いていた PR は、当時の脆弱なワークフロー定義のまま動く。修正後は該当 PR を close / rebase する。

出典

X の元の投稿を開く