Gh Actions - Context Script Injections
基本情報
PRを作成するユーザーによって制御される値を持つ特定のgithubコンテキストがあることに注意してください。githubアクションがそのデータを実行に使用している場合、任意のコード実行につながる可能性があります。これらのコンテキストは通常、body
、default_branch
、email
、head_ref
、label
、message
、name
、page_name
、ref
、title
で終わります。例えば(このライトアップからのリスト):
github.event.comment.body
github.event.issue.body
github.event.issue.title
github.head_ref
github.pull_request.*
github.*.*.authors.name
github.*.*.authors.email
ここでは、ブランチ名やメールアドレスなど、あまり明白でない潜在的に信頼できない入力のソースもあることに注意してください。これらは許可される内容の面でかなり柔軟です。例えば、zzz";echo${IFS}"hello";#
は有効なブランチ名であり、ターゲットリポジトリに対する攻撃ベクトルになり得ます。
スクリプトインジェクション攻撃の例
スクリプトインジェクション攻撃は、ワークフローのインラインスクリプト内で直接発生することがあります。次の例では、アクションがプルリクエストのタイトルの妥当性をテストするための式を使用していますが、スクリプトインジェクションのリスクも追加しています:
シェルスクリプトが実行される前に、${{ }}
内の式が評価され、その結果の値に置き換えられます。これにより、シェルコマンドインジェクションの脆弱性を引き起こす可能性があります。
攻撃者がこのワークフローにコマンドを注入するには、タイトルが a"; ls $GITHUB_WORKSPACE"
のプルリクエストを作成することができます。
この例では、"
文字を使用して title=
"${{ github.event.pull_request.title }}"
ステートメントを中断し、ランナー上で ls
コマンドを実行することを可能にします。
Last updated