Gh Actions - Context Script Injections

AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をご覧ください!

HackTricksをサポートする他の方法:

基本情報

PRを作成するユーザーによって制御される値を持つ特定のgithubコンテキストがあることに注意してください。githubアクションがそのデータを実行に使用している場合任意のコード実行につながる可能性があります。これらのコンテキストは通常、bodydefault_branchemailhead_reflabelmessagenamepage_namereftitleで終わります。例えば(このライトアップからのリスト):

  • 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 コマンドを実行することを可能にします。

AWSハッキングをゼロからヒーローまで学ぶには htARTE (HackTricks AWS Red Team Expert)をチェックしてください!

HackTricksをサポートする他の方法:

最終更新