2021-12-12 GitHub Actions の pull_request_target について
GitHub Actions の pull_request
と pull_request_target
イベントの存在についてわかりにくいのでメモ。
GitHub の詳しい解説は下記。
pull_request_target
の間違った使用は危険だよ、と警鐘を鳴らす。
pull_request_target
は fork repoにも書き込み権限・Secretsを渡すpull_request
は fork repo に書き込み権限・Secretsは渡さない
下記のワークフローfork先をチェックアウトした後に実行しているnpm install
or npm build
が危険。なぜなら npm install
or npm build
の実行時に untrusted なコードが実行されるリスクがあるから。
# INSECURE. Provided as an example only.
on:
pull_request_target
jobs:
build:
name: Build and test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.pull_request.head.sha }}
- uses: actions/setup-node@v1
- run: |
npm install
npm build
- uses: completely/fakeaction@v2
with:
arg1: ${{ secrets.supersecret }}
- uses: fakerepo/comment-on-pr@v1
with:
message: |
Thank you!
ただ、fork先のコードをチェックアウトしてコードをフォーマットする、diffを取る、grep検索する、などのユースケースにおいてはuntrustedなコード実行は伴わないので使用してOK。
- Secret にアクセス不要な場合は
pull_request_target
を使うのは避けること pull_request
andworkflow_run
の組み合わせで権限を渡すワークフローを切り分けること