GCP - Storage Privesc
Storage
Основна інформація:
GCP - Storage Enumstorage.objects.get
storage.objects.get
Цей дозвіл дозволяє вам завантажувати файли, збережені в Cloud Storage. Це потенційно дозволить вам підвищити привілеї, оскільки в деяких випадках чутлива інформація зберігається там. Більше того, деякі сервіси GCP зберігають свою інформацію в бакетах:
GCP Composer: Коли ви створюєте середовище Composer, код усіх DAG буде збережено в бакеті. Ці завдання можуть містити цікаву інформацію в своєму коді.
GCR (Container Registry): Зображення контейнерів зберігаються в бакетах, що означає, що якщо ви можете читати бакети, ви зможете завантажити зображення та шукати витоки та/або вихідний код.
storage.objects.setIamPolicy
storage.objects.setIamPolicy
Ви можете надати собі дозвіл на зловживання будь-яким з попередніх сценаріїв цього розділу.
storage.buckets.setIamPolicy
storage.buckets.setIamPolicy
Для прикладу, як змінити дозволи за допомогою цього дозволу, перегляньте цю сторінку:
GCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
storage.hmacKeys.create
Функція "інтероперабельності" Cloud Storage, розроблена для крос-клаудових взаємодій з AWS S3, передбачає створення HMAC-ключів для облікових записів сервісів та користувачів. Зловмисник може скористатися цим, генеруючи HMAC-ключ для облікового запису сервісу з підвищеними привілеями, таким чином підвищуючи привілеї в Cloud Storage. Хоча HMAC-ключі, пов'язані з користувачами, можна отримати лише через веб-консоль, як доступні, так і секретні ключі залишаються постійно доступними, що дозволяє потенційно отримати резервний доступ до сховища. У свою чергу, HMAC-ключі, пов'язані з обліковими записами сервісів, доступні через API, але їх доступні та секретні ключі не можна отримати після створення, що додає рівень складності для безперервного доступу.
Ще один експлойт-скрипт для цього методу можна знайти тут.
storage.objects.create
, storage.objects.delete
= Права на запис у сховище
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
(Верхні піддомени вказані тут).
Посилання
Last updated