Skip to content

GitHub Actionsでスクリプトインジェクション攻撃を防ぐ

GitHub Actionsでは inputs として入力を扱うことができる。${{ var }} はYAMLからみると、ただの文字列として扱われる。そのため、この inputsrun にそのまま渡してはいけない。

inputs:
version:
required: true
runs:
using: composite
steps:
- run: ls ${{ inputs.version }} # version="a; cat /etc/passwd" で壊れる

この場合、環境変数に入れて使えばいい。環境変数に入れることで、ただの文字列ではなくシェルの変数として解釈される。

inputs:
version:
required: true
runs:
using: composite
steps:
- run: ls "$INPUT_VERSION"
env:
INPUT_VERSION: ${{ inputs.version }}

より安全のために環境変数をクオートしておくといいが、シェル変数をクオートしない場合は単語分割とパターン展開されるので、この2つが必要ならクオートしなくてもいい。

おそらくリポジトリにCodeQLを設定すると検出してくれるんじゃないか。