GCP - Storage Privesc

Support HackTricks

Storage

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

GCP - Storage Enum

storage.objects.get

Цей дозвіл дозволяє вам завантажувати файли, збережені в Cloud Storage. Це потенційно дозволить вам підвищити привілеї, оскільки в деяких випадках чутлива інформація зберігається там. Більше того, деякі сервіси GCP зберігають свою інформацію в бакетах:

  • GCP Composer: Коли ви створюєте середовище Composer, код усіх DAG буде збережено в бакеті. Ці завдання можуть містити цікаву інформацію в своєму коді.

  • GCR (Container Registry): Зображення контейнерів зберігаються в бакетах, що означає, що якщо ви можете читати бакети, ви зможете завантажити зображення та шукати витоки та/або вихідний код.

storage.objects.setIamPolicy

Ви можете надати собі дозвіл на зловживання будь-яким з попередніх сценаріїв цього розділу.

storage.buckets.setIamPolicy

Для прикладу, як змінити дозволи за допомогою цього дозволу, перегляньте цю сторінку:

GCP - Public Buckets Privilege Escalation

storage.hmacKeys.create

Функція "інтероперабельності" Cloud Storage, розроблена для крос-клаудових взаємодій з AWS S3, передбачає створення HMAC-ключів для облікових записів сервісів та користувачів. Зловмисник може скористатися цим, генеруючи HMAC-ключ для облікового запису сервісу з підвищеними привілеями, таким чином підвищуючи привілеї в Cloud Storage. Хоча HMAC-ключі, пов'язані з користувачами, можна отримати лише через веб-консоль, як доступні, так і секретні ключі залишаються постійно доступними, що дозволяє потенційно отримати резервний доступ до сховища. У свою чергу, HMAC-ключі, пов'язані з обліковими записами сервісів, доступні через API, але їх доступні та секретні ключі не можна отримати після створення, що додає рівень складності для безперервного доступу.

# Create key
gsutil hmac create <sa-email> # You might need to execute this inside a VM instance

## If you have TROUBLES creating the HMAC key this was you can also do it contacting the API directly:
PROJECT_ID = '$PROJECT_ID'
TARGET_SERVICE_ACCOUNT = f"exam-storage-sa-read-flag-3@{PROJECT_ID}.iam.gserviceaccount.com"
ACCESS_TOKEN = "$CLOUDSDK_AUTH_ACCESS_TOKEN"
import requests
import json
key = requests.post(
f'https://www.googleapis.com/storage/v1/projects/{PROJECT_ID}/hmacKeys',
params={'access_token': ACCESS_TOKEN, 'serviceAccountEmail': TARGET_SERVICE_ACCOUNT}
).json()
#print(json.dumps(key, indent=4))
print(f'ID: {key["metadata"]["accessId"]}')
print(f'Secret: {key["secret"]}')


# Configure gsutil to use the HMAC key
gcloud config set pass_credentials_to_gsutil false
gsutil config -a

# Use it
gsutil ls gs://[BUCKET_NAME]

# Restore
gcloud config set pass_credentials_to_gsutil true

Ще один експлойт-скрипт для цього методу можна знайти тут.

storage.objects.create, storage.objects.delete = Права на запис у сховище

Щоб створити новий об'єкт у бакеті, вам потрібні storage.objects.create, а відповідно до документації, вам також потрібні storage.objects.delete, щоб модифікувати існуючий об'єкт.

Дуже поширене експлуатування бакетів, в які можна записувати в хмарі, відбувається у випадку, якщо бакет зберігає файли веб-сервера, ви можете бути в змозі зберегти новий код, який буде використовуватися веб-додатком.

Composer

Composer - це Apache Airflow, керований у GCP. Він має кілька цікавих функцій:

  • Він працює всередині GKE кластера, тому SA, який використовує кластер, доступний коду, що виконується всередині Composer

  • Він зберігає код у бакеті, отже, будь-хто з правами на запис у цей бакет зможе змінити/додати код DGA (код, який виконає Apache Airflow) Тоді, якщо у вас є права на запис у бакет, який використовує Composer для зберігання коду, ви можете привести до ескалації прав до SA, що працює в GKE кластері.

Cloud Functions

  • Код Cloud Functions зберігається у Storage, тому перезаписуючи його, можна виконати довільний код.

App Engine

  • Джерельний код App Engine зберігається у бакетах, перезаписуючи код, може бути можливим виконати довільний код. ЦЕ НЕ МОЖЛИВО

  • Схоже, що шари контейнерів зберігаються у бакеті, можливо, змінивши їх?

GCR

  • Google Container Registry зберігає зображення у бакетах, якщо ви можете записувати в ці бакети, ви можете бути в змозі переміститися вбік до того, де ці бакети виконуються.

  • Бакет, що використовується GCR, матиме URL, подібний до gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com (Верхні піддомени вказані тут).

Посилання

Підтримати HackTricks

Last updated