AWS Codebuild - Token Leakage
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
まず、漏洩できるソース認証情報が設定されているか確認してください:
もし、例えばGithubへの認証がアカウントに設定されていることがわかった場合、Codebuildを使ってプロジェクトのビルドを実行するために特定のdockerイメージを使用させることで、そのアクセス(GHトークンまたはOAuthトークン)を抽出することができます。
この目的のために、新しいCodebuildプロジェクトを作成するか、既存のものの環境を変更してDockerイメージを設定することができます。
使用できるDockerイメージはhttps://github.com/carlospolop/docker-mitmです。これは、env変数https_proxy
、http_proxy
、および**SSL_CERT_FILE
を設定する非常に基本的なDockerイメージです。これにより、https_proxy
およびhttp_proxy
で指定されたホストのほとんどのトラフィックを傍受し、SSL_CERT_FILE
**で指定されたSSL CERTを信頼することができます。
自分のDocker MitMイメージを作成してアップロード
リポジトリの指示に従って、プロキシIPアドレスを設定し、SSL証明書を設定してdockerイメージをビルドします。
http_proxy
を設定しないでくださいメタデータエンドポイントへのリクエストを傍受しないようにするためです。
**ngrok
**を使用して、ngrok tcp 4444
のようにプロキシをホストに設定できます。
Dockerイメージがビルドされたら、パブリックリポジトリにアップロードします(Dockerhub、ECR...)。
環境を設定
新しいCodebuildプロジェクトを作成するか、既存のものの環境を変更します。
プロジェクトを以前に生成したDockerイメージを使用するように設定します。
ホストにMitMプロキシを設定
Githubリポジトリに示されているように、次のようなものを使用できます:
使用されたmitmproxyのバージョンは9.0.1であり、バージョン10ではこれが機能しない可能性が報告されています。
ビルドを実行し、資格情報をキャプチャする
Authorizationヘッダーにトークンが表示されます:
これは、aws cliを使用して次のように行うこともできます
Codebuild プロジェクトには、ウェブ上では隠されている insecureSsl
という設定があり、APIからのみ変更できます。
これを有効にすると、Codebuildはプラットフォームが提供する証明書を 確認せずに リポジトリに接続できるようになります。
最初に、次のようなもので現在の設定を列挙する必要があります:
その後、収集した情報を使用してプロジェクト設定の insecureSsl
を True
に更新できます。以下は私がプロジェクトを更新した例で、最後に insecureSsl=True
があることに注意してください(これは収集した設定から変更する必要がある唯一の項目です)。
さらに、env 変数 http_proxy と https_proxy も追加し、tcp ngrok を指すようにします:
次に、プロキシ変数(http_proxyおよびhttps_proxy)で指摘されたポートでhttps://github.com/synchronizing/mitmの基本的な例を実行します。
最後に、プロジェクトをビルドをクリックすると、認証情報が平文(base64)でmitmポートに送信されます:
この脆弱性は2023年2月20日の週のある時点でAWSによって修正されました(おそらく金曜日)。したがって、攻撃者はもはやこれを悪用できません :)
CodeBuildでの権限が昇格された攻撃者は、設定されたGithub/Bitbucketトークンを漏洩させることができます。または、OAuth経由で権限が設定されている場合、コードにアクセスするために使用される一時的なOAuthトークンを漏洩させることができます。
攻撃者は、CodeBuildプロジェクトにhttp_proxyおよびhttps_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の基本的な例を実行します。
最後に、プロジェクトをビルドをクリックすると、認証情報が平文(base64)でmitmポートに送信されます:
これで攻撃者は自分のマシンからトークンを使用し、持っているすべての権限をリストし、CodeBuildサービスを直接使用するよりも簡単に(悪用)できるようになります。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)