GCP - Storage Privesc

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Storage

Podstawowe informacje:

pageGCP - Storage Enum

storage.objects.get

To uprawnienie umożliwia pobieranie plików przechowywanych w Cloud Storage. Może to potencjalnie umożliwić eskalację uprawnień, ponieważ w niektórych przypadkach wrażliwe informacje są tam przechowywane. Ponadto, niektóre usługi GCP przechowują swoje informacje w kubełkach:

  • GCP Composer: Podczas tworzenia środowiska Composer kod wszystkich DAG-ów zostanie zapisany w kubełku. Te zadania mogą zawierać interesujące informacje w swoim kodzie.

  • GCR (Container Registry): Obrazy kontenerów są przechowywane w kubełkach, co oznacza, że jeśli możesz odczytać kubełki, będziesz mógł pobrać obrazy i szukać wycieków i/lub kodu źródłowego.

storage.objects.setIamPolicy

Możesz nadać sobie uprawnienia do wykorzystania dowolnego z wcześniejszych scenariuszy z tej sekcji.

storage.buckets.setIamPolicy

Przykład modyfikacji uprawnień za pomocą tego uprawnienia znajdziesz na tej stronie:

pageGCP - Public Buckets Privilege Escalation

storage.hmacKeys.create

Funkcja "interoperacyjności" Cloud Storage, przeznaczona do międzychmurowych interakcji, takich jak z AWS S3, obejmuje tworzenie kluczy HMAC dla kont usług i użytkowników. Atakujący może wykorzystać to, generując klucz HMAC dla konta usługi z podwyższonymi uprawnieniami, co umożliwia eskalację uprawnień w Cloud Storage. Podczas gdy klucze HMAC powiązane z użytkownikiem można uzyskać tylko za pomocą konsoli internetowej, zarówno klucze dostępu, jak i tajne pozostają trwale dostępne, umożliwiając potencjalne tworzenie kopii zapasowych dostępu do przechowywania. Z kolei klucze HMAC powiązane z kontem usługi są dostępne za pośrednictwem interfejsu API, ale ich klucze dostępu i tajne nie są dostępne po utworzeniu, co dodaje warstwę złożoności dla ciągłego dostępu.

# Create key
gsutil hmac create <sa-email>

# Configure gsutil to use it
gsutil config -a

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

Inny skrypt wykorzystujący tę metodę można znaleźć tutaj.

storage.objects.create, storage.objects.delete = Uprawnienia do zapisu w Storage

Aby utworzyć nowy obiekt wewnątrz kubełka, potrzebujesz uprawnienia storage.objects.create i, zgodnie z dokumentacją, potrzebujesz również uprawnienia storage.objects.delete, aby zmodyfikować istniejący obiekt.

Bardzo częstym wykorzystaniem kubełków, w których można zapisywać w chmurze, jest przypadek, gdy kubełek zapisuje pliki serwera sieciowego, możesz być w stanie przechowywać nowy kod, który będzie używany przez aplikację internetową.

Composer

Composer to Apache Airflow zarządzany w GCP. Ma kilka interesujących funkcji:

  • Działa wewnątrz klastra GKE, więc SA używane przez klaster jest dostępne dla kodu działającego wewnątrz Composera.

  • Przechowuje kod w kubełku, dlatego każdy z uprawnieniami do zapisu w tym kubełku będzie mógł zmienić/dodać kod DGA (kod, który Apache Airflow będzie wykonywał). Jeśli masz uprawnienia do zapisu w kubełku, którego używa Composer do przechowywania kodu, możesz przywilejować się do SA działającego w klastrze GKE.

Cloud Functions

  • Kod Cloud Functions jest przechowywany w Storage, więc nadpisując go, można wykonać dowolny kod.

App Engine

  • Kod źródłowy App Engine jest przechowywany w kubełkach, nadpisując kod, można wykonać dowolny kod. TO NIE JEST MOŻLIWE

  • Wygląda na to, że warstwy kontenerów są przechowywane w kubełku, może zmieniając je?

GCR

  • Google Container Registry przechowuje obrazy wewnątrz kubełków, jeśli masz uprawnienia do zapisu w tych kubełkach, możesz być w stanie przejść lateralnie do miejsca, gdzie te kubełki są uruchamiane.

  • Kubełek używany przez GCR będzie miał adres URL podobny do gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com (Najwyższe subdomeny są określone tutaj).

Referencje

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated