GCP - Token Persistence
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
Authenticated User Tokens
Aby uzyskać current token użytkownika możesz uruchomić:
Pobierz access token z bazy SQLite
```bash sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='Sprawdź na tej stronie, jak bezpośrednio użyć tego tokena za pomocą gcloud:
Aby uzyskać szczegóły potrzebne do wygenerowania nowego access tokena uruchom:
Pobierz refresh token z bazy danych SQLite
```bash sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='Można także znaleźć refresh tokens w $HOME/.config/gcloud/application_default_credentials.json oraz w $HOME/.config/gcloud/legacy_credentials/*/adc.json.
Aby uzyskać nowy, odświeżony access token przy użyciu refresh token, client ID i client secret, uruchom:
Uzyskaj nowy access token przy użyciu refresh token
```bash curl -s --data client_id=Ważność refresh tokenów można zarządzać w Admin > Security > Google Cloud session control, a domyślnie jest ustawiona na 16h, chociaż można ustawić, by nigdy nie wygasały:
.png)
Przepływ uwierzytelniania
Proces uwierzytelniania przy użyciu np. gcloud auth login otworzy monit w przeglądarce, a po zaakceptowaniu wszystkich zakresów przeglądarka wyśle żądanie takie jak poniższe do portu http otwartego przez narzędzie:
/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1
Następnie gcloud użyje parametrów state i code wraz z twardo zakodowanym client_id (32555940559.apps.googleusercontent.com) i client_secret (ZmssLNjJy2998hD4CTg2ejr2) aby pobrać ostateczne dane refresh tokena.
Caution
Zwróć uwagę, że komunikacja z localhost odbywa się przez HTTP, więc możliwe jest przechwycenie danych w celu zdobycia refresh tokena; jednak dane te są ważne tylko jednorazowo, więc byłoby to bezużyteczne — łatwiej po prostu odczytać refresh token z pliku.
OAuth Scopes
Wszystkie scope’y Google znajdziesz na https://developers.google.com/identity/protocols/oauth2/scopes lub możesz je uzyskać, wykonując:
Pobierz wszystkie zakresy OAuth dla Google
```bash curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u ```Dzięki temu skryptowi można sprawdzić, jakie zakresy może obsługiwać aplikacja, której gcloud używa do uwierzytelniania:
Przetestuj obsługiwane zakresy dla gcloud
```bash curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do echo -ne "Testing $scope \r" if ! curl -v "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+$scope+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=AjvFqBW5XNIw3VADagy5pvUSPraLQu&access_type=offline&code_challenge=IOk5F08WLn5xYPGRAHP9CTGHbLFDUElsP551ni2leN4&code_challenge_method=S256" 2>&1 | grep -q "error"; then echo "" echo $scope fi done ```Po jego uruchomieniu sprawdzono, że ta aplikacja obsługuje następujące zakresy:
https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
Interesujące jest zobaczyć, że ta aplikacja obsługuje zakres drive, co mogłoby pozwolić użytkownikowi na eskalację z GCP do Workspace, jeśli atakujący zmusi użytkownika do wygenerowania tokena z tym zakresem.
Zobacz jak wykorzystać to tutaj.
Konta usługowe
Podobnie jak w przypadku uwierzytelnionych użytkowników, jeśli uda Ci się skompromisować plik klucza prywatnego konta usługowego, będziesz mógł uzyskać do niego dostęp zwykle tak długo, jak zechcesz.
Jednak jeśli ukradniesz OAuth token konta usługowego, może to być jeszcze ciekawsze, ponieważ nawet jeśli domyślnie te tokeny są użyteczne tylko przez godzinę, jeśli ofiara usunie prywatny api key, OAuth token nadal będzie ważny aż do wygaśnięcia.
Metadane
Oczywiście — dopóki jesteś wewnątrz maszyny działającej w środowisku GCP — będziesz mógł uzyskać dostęp do konta usługowego przypisanego do tej maszyny, kontaktując się z metadata endpoint (uwaga: OAuth tokeny, które możesz uzyskać przez ten endpoint, są zazwyczaj ograniczone przez scopes).
Remediacje
Niektóre środki zaradcze dla tych technik są opisane w https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
Źródła
- https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-1
- https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2
Tip
Ucz się & ćwicz AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Wspieraj HackTricks
- Sprawdź subscription plans!
- Dołącz do 💬 Discord group lub telegram group lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się hacking tricks, zgłaszając PRy do HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

