AWS Codebuild - Token Leakage
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: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トークンを漏洩させることができます。
攻撃者は、環境変数http_proxyとhttps_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の基本的な例を実行します。
最後に、プロジェクトをビルドをクリックすると、認証情報が平文(base64)でmitmポートに送信されます:
今、攻撃者は自分のマシンからトークンを使用し、それが持つすべての権限をリストし、CodeBuildサービスを直接使用するよりも簡単に(悪用)できます。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)