GCP - local privilege escalation ssh pivoting

Wesprzyj HackTricks

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

Niesamowicie, uprawnienia GPC maszyny Compute Engine, którą skompromitowałeś, mogą pomóc ci eskalować uprawnienia 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 wykonywania działań za pomocą swoich kont usług.

Ponieważ IAM jest bardzo szczegółowe, konto może mieć uprawnienia do odczytu/zapisu zasobu, ale bez uprawnień do listowania.

Świetnym hipotetycznym przykładem jest Instancja Obliczeniowa, która ma uprawnienie do odczytu/zapisu kopii zapasowych w kubełku magazynu o nazwie instance82736-long-term-xyz-archive-0332893.

Uruchomienie polecenia gsutil ls z wiersza poleceń nie zwraca nic, ponieważ konto usługi nie ma uprawnienia IAM storage.buckets.list. Jednakże, 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 do danych w postaci tekstu jawnego, do których twoje lokalne konto Linux nie ma dostępu.

Możesz znaleźć nazwę tego kubełka wewnątrz skryptu (w bashu, Pythonie, Ruby...).

Niestandardowe metadane

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

Co więcej, można dodać dane użytkownika, które są skryptem, który będzie wykonywany za każdym razem, gdy maszyna zostanie uruchomiona lub zrestartowana i który może być uzyskany również z punktu końcowego metadanych.

Aby uzyskać więcej informacji, sprawdź:

Wykorzystywanie uprawnień IAM

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

Sprawdź następujące uprawnienia:

Sprawdź, czy w systemie plików są klucze

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

sudo find / -name "gcloud"

Oto najbardziej interesujące pliki:

  • ~/.config/gcloud/credentials.db

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

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

  • ~/.credentials.json

Więcej wyrażeń regularnych 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"

Odnośniki

Wesprzyj HackTricks

Last updated