編集

GitHub Actionsの`pull_request_target`とenvironment branch protection rulesの変更

GitHub Actionsのpull_request_targetとenvironment branch protection rulesの評価方法が変更される。12月8日から適用。ユーザー制御ブランチでの予期しないワークフローコード実行や環境シークレットへのアクセスを防ぐため。

pull_request_targetイベントは常にデフォルトブランチをワークフローソースと参照として使用するようになる。ワークフローファイルとcheckoutコミットは常にリポジトリのデフォルトブランチから取得され、pull requestのベースブランチに関係なく実行される。これにより、リポジトリ内の他のブランチにある古い、脆弱な可能性のあるワークフローが実行されることを防ぐ。

GITHUB_REFはデフォルトブランチに解決され、GITHUB_SHAはそのブランチの最新コミットを指す。これにより、信頼できない名前やブランチが評価に影響を与える既知の脆弱性クラスを閉じる。

以前は、pull requestのベースブランチとして設定された親リポジトリ内の任意のブランチが実行されるワークフローのソースとして使用され、古いワークフローが実行される可能性があった。この変更により、これらのイベントで実行されるワークフローソースとしてリポジトリのデフォルトブランチのみが使用される。

環境ブランチ保護ルールは実行参照に対して評価される。pull requestワークフロー中に環境シークレットへの意図しないアクセスを防ぐため、環境ブランチ保護ルールはpull request head(HEAD_REF)ではなく実行参照(GITHUB_REF)に対して評価される。

  • pull_requestpull_request_reviewpull_request_review_commentでは、環境ルールはrefs/pull/number/mergeに対して評価される
  • pull_request_targetでは、環境ルールはデフォルトブランチに対して評価される

推奨事項:

  • pull_request_targetの使用を必要最小限にし、ユーザー制御入力やコードが信頼できないコードを実行する方法で実行に影響を与えないようにする
  • ワークフローが高度な権限やシークレットへのアクセスを必要としない場合、pull_requestを使用する
  • これらのワークフローに付与される権限を制限し、デフォルトトークン権限を読み取り専用に設定するか、ワークフローで最小権限設定を適用する
  • CodeQLを使用してアクションワークフローの脆弱性をスキャンする

環境ブランチ保護ルールを使用し、pull requestイベントでトリガーされるワークフローの場合:

  • pull_requestの環境ブランチフィルターを更新し、refs/pull/number/mergeのようなパターンを追加
  • pull_request_targetでは、リポジトリのデフォルトブランチを追加

出展:Actions pull_request_target and environment branch protections changes

編集