説明
ACTIONS_ALLOW_UNSECURE_COMMANDSをtrueにすると、非推奨のset-envとadd-pathコマンドが再び許可されます。信頼できない入力がステップの標準出力に含まれると、攻撃者が環境変数やPATHを操作するおそれがあります。
想定される影響
- 意図しない環境変数や実行ファイルの検索パスが、後続ステップに影響する可能性があります。
- 変更された環境を使うステップで、攻撃者が選んだコマンドが実行されるおそれがあります。影響はジョブの権限とシークレットへのアクセス範囲によって変わります。
対処方法
ACTIONS_ALLOW_UNSECURE_COMMANDS: trueを削除し、set-envとadd-pathをGITHUB_ENVとGITHUB_PATHの環境ファイルに置き換えてください。信頼できない値をスクリプトに直接埋め込まず、ワークフローの権限とシークレットへのアクセスも制限してください。
例
変更前の例は、非セキュアなコマンドを許可し、GitHubコンテキストをPythonコードに直接埋め込むため、そのまま使用しないでください。変更後は、このフラグを使わずに環境ファイルへ固定値を書き込みます。イベントを変えるだけで、外部入力によるすべてのリスクが解消されるわけではありません。
変更前
yaml
name: Vulnerable workflow
on:
pull_request_target
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
ENVIRONMENT_NAME: prod
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- run: |
print("""${{ toJSON(github) }}""")
shell: python
変更後
yaml
name: Safe workflow
on:
pull_request:
types: [opened, synchronize, edited, reopened]
branches:
- master
jobs:
review-comment:
runs-on: ubuntu-latest
steps:
- name: Set review flag
run: echo "REVIEW_STARTED=true" >> "$GITHUB_ENV"
GITHUB_ENVに書いた値は、同じジョブの後続ステップで使用できます。信頼できない複数行の値を環境ファイルに書く際も、公式の構文に従って処理してください。