GCP - local privilege escalation ssh pivoting

Wsparcie dla HackTricks

W tym scenariuszu zakładamy, że skomprowałeś konto bez uprawnień wewnątrz VM w projekcie Compute Engine.

Zadziwiająco, uprawnienia GCP dla silnika obliczeniowego, który skompromitowałeś, mogą pomóc ci w eskalacji uprawnień lokalnie wewnątrz maszyny. Nawet jeśli nie zawsze będzie to bardzo pomocne w środowisku chmurowym, dobrze wiedzieć, że jest to możliwe.

Przeczytaj skrypty

Instancje obliczeniowe prawdopodobnie są tam, aby wykonywać pewne skrypty w celu realizacji działań z ich kontami serwisowymi.

Ponieważ IAM jest bardzo szczegółowy, konto może mieć uprawnienia do odczytu/zapisu nad zasobem, ale brak uprawnień do listowania.

Świetnym hipotetycznym przykładem tego jest instancja obliczeniowa, która ma uprawnienia do odczytu/zapisu kopii zapasowych do koszyka pamięci o nazwie instance82736-long-term-xyz-archive-0332893.

Uruchomienie gsutil ls z wiersza poleceń nie zwraca nic, ponieważ konto serwisowe nie ma uprawnienia IAM storage.buckets.list. Jednak jeśli uruchomisz gsutil ls gs://instance82736-long-term-xyz-archive-0332893, możesz znaleźć kompletną kopię zapasową systemu plików, dając ci dostęp w postaci czystego tekstu do danych, do których twoje lokalne konto Linux nie ma dostępu.

Możesz być w stanie znaleźć tę nazwę koszyka w skrypcie (w bash, Python, Ruby...).

Niestandardowe metadane

Administratorzy mogą dodawać niestandardowe metadane na poziomie instancji i poziomie projektu. To po prostu sposób na przekazywanie dowolnych par klucz/wartość do instancji, i jest powszechnie używane do zmiennych środowiskowych oraz skryptów uruchamiania/zamykania.

Co więcej, możliwe jest dodanie userdata, co jest skryptem, który będzie wykonywany za każdym razem, gdy maszyna jest uruchamiana lub restartowana i który można uzyskać z punktu końcowego metadanych.

Aby uzyskać więcej informacji, sprawdź:

Wykorzystywanie uprawnień IAM

Większość z poniżej proponowanych uprawnień jest przyznawana domyślnemu SA Compute, jedynym problemem jest to, że domyślny zakres dostępu uniemożliwia SA ich użycie. Jednak jeśli zakres cloud-platform jest włączony lub tylko zakres compute jest włączony, będziesz mógł je wykorzystać.

Sprawdź następujące uprawnienia:

Szukaj kluczy w systemie plików

Sprawdź, czy inni użytkownicy zalogowali się do gcloud wewnątrz maszyny i zostawili swoje dane uwierzytelniające w systemie plików:

sudo find / -name "gcloud"

To są najciekawsze pliki:

  • ~/.config/gcloud/credentials.db

  • ~/.config/gcloud/legacy_credentials/[ACCOUNT]/adc.json

  • ~/.config/gcloud/legacy_credentials/[ACCOUNT]/.boto

  • ~/.credentials.json

Więcej wyrażeń regularnych dla kluczy API

TARGET_DIR="/path/to/whatever"

# Service account keys
grep -Pzr "(?s){[^{}]*?service_account[^{}]*?private_key.*?}" \
"$TARGET_DIR"

# Legacy GCP creds
grep -Pzr "(?s){[^{}]*?client_id[^{}]*?client_secret.*?}" \
"$TARGET_DIR"

# Google API keys
grep -Pr "AIza[a-zA-Z0-9\\-_]{35}" \
"$TARGET_DIR"

# Google OAuth tokens
grep -Pr "ya29\.[a-zA-Z0-9_-]{100,200}" \
"$TARGET_DIR"

# Generic SSH keys
grep -Pzr "(?s)-----BEGIN[ A-Z]*?PRIVATE KEY[a-zA-Z0-9/\+=\n-]*?END[ A-Z]*?PRIVATE KEY-----" \
"$TARGET_DIR"

# Signed storage URLs
grep -Pir "storage.googleapis.com.*?Goog-Signature=[a-f0-9]+" \
"$TARGET_DIR"

# Signed policy documents in HTML
grep -Pzr '(?s)<form action.*?googleapis.com.*?name="signature" value=".*?">' \
"$TARGET_DIR"

References

Wsparcie HackTricks

Last updated