🔄

AWSのサポートにCodeBuildのセキュリティ上の問題を報告したらすぐに修正してくれた話

2023/07/17に公開

こんにちは、株式会社スマートラウンドSREの@shonansurvivorsです。

当社はCDパイプラインにCodePipelineとCodeBuildを使用しており、CodeBuildではコンテナイメージのビルドやDBマイグレーション、ECSへのデプロイなどを行っています。

先日、CodeBuildの機能にアップデートがあり、そこで発見したセキュリティに関する事項を共有します。

CodeBuildからGitHub Actionsのアクションを呼び出した時の問題(現在は修正済み)

2023年7月8日に発表があり、CodeBuildからGitHub Actionsのアクション[1]を呼び出せるようになりました。

https://aws.amazon.com/jp/about-aws/whats-new/2023/07/aws-codebuild-github-actions/

早速、とあるアクション(名前はfoo/exampleとします)をCodeBuildから呼び出してみました。

buildspec.ymlの内容は以下となります。

buildspec.yml
version: 0.2

env:
  shell: bash

phases:
  build:
    steps:
      - uses: foo/example@v1

アクションを使う場合のbuildspec.ymlの構文は、

  • phases.<phase_name>.commands

ではなく、

  • phases.<phase_name>.steps[*].run

  • phases.<phase_name>.steps[*].uses

のようにGitHub Actionsのjobと似た形式となるのがポイントです。

このbuildspec.ymlを使ったCodeBuildを起動したところ、無事にアクションを呼び出せたのですが、CodeBuildのログを見た時にあることに気付きました。

CodeBuildのログ
[Container] 2023/07/08 06:04:52 Run foo/example@v1
[Container] 2023/07/08 06:04:52 with:
[Container] 2023/07/08 06:04:52   github-token: 012345789abcdef.........................
# 略
[Container] 2023/07/08 06:04:52 env:
[Container] 2023/07/08 06:04:52   github_token: 012345789abcdef.........................

何やらトークンの値がマスクされずにログに出ている...

ここで、このアクションfoo/exampleの処理内容を見てみます。

foo/example/action.yml
inputs:
  github-token:
    description: "Access token for using the GitHub API"
    required: false
    default: ${{ github.token }}
runs:
  using: "composite"
  steps:
    - shell: bash
      env:
        github_token: ${{ inputs.github-token }}
      run: |
        # GitHubのAPIを使った処理

このアクションではGitHubのAPIを使用しています。

そのため、APIを使うためのトークンをinputとして渡せる仕様となっているのですが、デフォルトではgithub.tokenを使用しています。

foo/example/action.yml
inputs:
  github-token:
    # 略
    default: ${{ github.token }}

このgithub.tokenの値はsecrets.GITHUB_TOKENと同じです。GitHubのAPIを操作するための一時的なクレデンシャルとなっています。

https://docs.github.com/ja/actions/security-guides/automatic-token-authentication

そして、GitHub Actionsではsecretsの値はログには出力されない仕様となっています。

実際、先ほどのfoo/exampleをCodeBuildではなくGitHub Actionsで呼び出すと以下のようにログがマスクされて出力されます。

GitHub Actionsでのログ
Run foo/example@v1
  with:
    github-token: ***
  # 略
  env:
    github_token: ***

AWSのサポートに報告

せっかくCodeBuildからアクションを呼び出せるようになったのに、このままではGITHUB_TOKENを使うような一部のアクションを使うことが難しくなってしまうので、AWSのサポートに報告をしました。

その後数回に渡って丁寧な回答があり、

  • 事象の再現を確認できた
  • 製品開発担当部署にフィードバックした

とのことで、問い合わせとしてはクローズしました。

その後

いつ修正が完了したのかはわかりませんが、数日経過後の2023年7月16日時点ではトークンの値がマスクして表示されるようになっていました!

CodeBuildのログ
[Container] 2023/07/16 13:47:24 Run foo/example@v1
[Container] 2023/07/16 13:47:24 with:
[Container] 2023/07/16 13:47:24   github-token: ***
# 略
[Container] 2023/07/16 13:47:24 env:
[Container] 2023/07/16 13:47:24   github_token: ***

これで安心してCodeBuildからアクションを使えます。

終わりに

以上、AWSのサポートにセキュリティ上の問題を報告したら、すぐに修正してくれた話でした。

何かAWSのサービスで「おや?」と思われる点を発見したら、サポートに報告していくのが良いですね。

脚注
  1. GitHubのマーケットプレイスで公開されているようなカスタムアクションのこと。actions/setup-nodeなど。 ↩︎

スマートラウンド テックブログ

Discussion