Gh Actions - Context Script Injections

Support HackTricks

基本情報

特定のgithubコンテキストの値は、PRを作成するユーザーによって制御されていることに注意してください。githubアクションがそのデータを使用して何かを実行する場合、任意のコード実行につながる可能性があります。これらのコンテキストは通常、bodydefault_branchemailhead_reflabelmessagenamepage_nameref、および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";#は有効なブランチ名であり、ターゲットリポジトリに対する攻撃ベクターとなる可能性があります。

スクリプトインジェクション攻撃の例

スクリプトインジェクション攻撃は、ワークフローのインラインスクリプト内で直接発生する可能性があります。以下の例では、アクションがプルリクエストのタイトルの有効性をテストするための式を使用していますが、スクリプトインジェクションのリスクも追加しています:

- name: Check PR title
run: |
title="${{ github.event.pull_request.title }}"
if [[ $title =~ ^octocat ]]; then
echo "PR title starts with 'octocat'"
exit 0
else
echo "PR title did not start with 'octocat'"
exit 1
fi

シェルスクリプトが実行される前に、${{ }}内の式は評価され、その結果の値に置き換えられます。これにより、シェルコマンドインジェクションに対して脆弱になる可能性があります。

このワークフローにコマンドを注入するために、攻撃者は**a"; ls $GITHUB_WORKSPACE"**というタイトルのプルリクエストを作成することができます。

この例では、**"文字がtitle="${{ github.event.pull_request.title }}"**ステートメントを中断するために使用され、lsコマンドがランナー上で実行されることを可能にします。

Support HackTricks

Last updated