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
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
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 :
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=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 :
.png)
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
- 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
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
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

