GCP <â> Workspace Pivoting
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.
De GCP Ă GWS
Notions de base sur la dĂ©lĂ©gation Ă lâĂ©chelle du domaine
La dĂ©lĂ©gation Ă lâĂ©chelle du domaine de Google Workspace permet Ă un objet dâidentitĂ©, soit une application externe du Google Workspace Marketplace, soit un compte de service GCP interne, dâaccĂ©der aux donnĂ©es Ă travers le Workspace au nom des utilisateurs.
Note
Cela signifie essentiellement que les comptes de service Ă lâintĂ©rieur des projets GCP dâune organisation pourraient ĂȘtre capables dâimiter les utilisateurs de Workspace de la mĂȘme organisation (ou mĂȘme dâune diffĂ©rente).
Pour plus dâinformations sur le fonctionnement exact de cela, consultez :
GCP - Understanding Domain-Wide Delegation
Compromettre une délégation existante
Si un attaquant compromet un accĂšs sur GCP et connaĂźt un email dâutilisateur Workspace valide (de prĂ©fĂ©rence super admin) de lâentreprise, il pourrait Ă©numĂ©rer tous les projets auxquels il a accĂšs, Ă©numĂ©rer tous les SA des projets, vĂ©rifier Ă quels comptes de service il a accĂšs, et rĂ©pĂ©ter toutes ces Ă©tapes avec chaque SA quâil peut imiter.
Avec une liste de tous les comptes de service auxquels il a accĂšs et la liste des emails Workspace, lâattaquant pourrait essayer dâimiter lâutilisateur avec chaque compte de service.
Caution
Notez que lors de la configuration de la dĂ©lĂ©gation Ă lâĂ©chelle du domaine, aucun utilisateur Workspace nâest nĂ©cessaire, donc il suffit de connaĂźtre un valide pour lâimitation.
Cependant, les privilĂšges de lâutilisateur imitĂ© seront utilisĂ©s, donc sâil sâagit dâun Super Admin, vous pourrez accĂ©der Ă tout. Sâil nâa aucun accĂšs, cela sera inutile.
GCP Générer un jeton de délégation
Ce script simple va gĂ©nĂ©rer un jeton OAuth en tant quâutilisateur dĂ©lĂ©guĂ© que vous pouvez ensuite utiliser pour accĂ©der Ă dâautres API Google avec ou sans gcloud:
# Impersonate indicated user
python3 gen_delegation_token.py --user-email <user-email> --key-file <path-to-key-file>
# Impersonate indicated user and add additional scopes
python3 gen_delegation_token.py --user-email <user-email> --key-file <path-to-key-file> --scopes "https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://mail.google.com/, https://www.googleapis.com/auth/drive, openid"
DelePwn
BasĂ© sur lâoutil DeleFriend suivant, mais avec quelques ajouts comme la capacitĂ© dâĂ©numĂ©rer le domaine, le drive, gmail, le calendrier et dâeffectuer dâautres opĂ©rations.
DeleFriend
Câest un outil qui peut effectuer lâattaque en suivant ces Ă©tapes :
- ĂnumĂ©rer les projets GCP en utilisant lâAPI Resource Manager.
- ItĂ©rer sur chaque ressource de projet, et Ă©numĂ©rer les ressources de compte de service GCP auxquelles lâutilisateur IAM initial a accĂšs en utilisant GetIAMPolicy.
- ItĂ©rer sur chaque rĂŽle de compte de service, et trouver les rĂŽles intĂ©grĂ©s, de base et personnalisĂ©s avec la permission serviceAccountKeys.create sur la ressource de compte de service cible. Il convient de noter que le rĂŽle dâĂ©diteur possĂšde intrinsĂšquement cette permission.
- Créer une nouvelle clé privée
KEY_ALG_RSA_2048pour chaque ressource de compte de service qui est trouvée avec la permission pertinente dans la politique IAM. - Itérer sur chaque nouveau compte de service et créer un objet
JWTpour celui-ci qui est composĂ© des informations dâidentification de la clĂ© privĂ©e SA et dâun scope OAuth. Le processus de crĂ©ation dâun nouvel objet JWT itĂ©rera sur toutes les combinaisons existantes de scopes OAuth de la liste oauth_scopes.txt, afin de trouver toutes les possibilitĂ©s de dĂ©lĂ©gation. La liste oauth_scopes.txt est mise Ă jour avec tous les scopes OAuth que nous avons trouvĂ©s pertinents pour abuser des identitĂ©s Workspace. - La mĂ©thode
_make_authorization_grant_assertionrĂ©vĂšle la nĂ©cessitĂ© de dĂ©clarer un utilisateur de workspace cible, appelĂ© subject, pour gĂ©nĂ©rer des JWT sous DWD. Bien que cela puisse sembler nĂ©cessiter un utilisateur spĂ©cifique, il est important de rĂ©aliser que DWD influence chaque identitĂ© au sein dâun domaine. Par consĂ©quent, crĂ©er un JWT pour tout utilisateur de domaine affecte toutes les identitĂ©s dans ce domaine, conformĂ©ment Ă notre vĂ©rification dâĂ©numĂ©ration de combinaison. En dâautres termes, un utilisateur valide de Workspace est suffisant pour avancer.
Cet utilisateur peut ĂȘtre dĂ©fini dans le fichier config.yaml de DeleFriend. Si un utilisateur de workspace cible nâest pas dĂ©jĂ connu, lâoutil facilite lâidentification automatique des utilisateurs de workspace valides en scannant les utilisateurs de domaine avec des rĂŽles sur les projets GCP. Il est essentiel de noter (encore une fois) que les JWT sont spĂ©cifiques au domaine et ne sont pas gĂ©nĂ©rĂ©s pour chaque utilisateur ; par consĂ©quent, le processus automatique cible une seule identitĂ© unique par domaine. - ĂnumĂ©rer et crĂ©er un nouveau jeton dâaccĂšs bearer pour chaque JWT et valider le jeton contre lâAPI tokeninfo.
Script Python de Gitlab
Gitlab a créé ce script Python qui peut faire deux choses - lister le rĂ©pertoire des utilisateurs et crĂ©er un nouveau compte administratif tout en indiquant un json avec les informations dâidentification SA et lâutilisateur Ă usurper. Voici comment vous lâutiliseriez :
# Install requirements
pip install --upgrade --user oauth2client
# Validate access only
./gcp_delegation.py --keyfile ./credentials.json \
--impersonate steve.admin@target-org.com \
--domain target-org.com
# List the directory
./gcp_delegation.py --keyfile ./credentials.json \
--impersonate steve.admin@target-org.com \
--domain target-org.com \
--list
# Create a new admin account
./gcp_delegation.py --keyfile ./credentials.json \
--impersonate steve.admin@target-org.com \
--domain target-org.com \
--account pwned
Créer une nouvelle délégation (Persistance)
Il est possible de vĂ©rifier les dĂ©lĂ©gations Ă lâĂ©chelle du domaine dans https://admin.google.com/u/1/ac/owl/domainwidedelegation.
Un attaquant ayant la capacitĂ© de crĂ©er des comptes de service dans un projet GCP et des privilĂšges de super administrateur sur GWS pourrait crĂ©er une nouvelle dĂ©lĂ©gation permettant aux SAs dâusurper lâidentitĂ© de certains utilisateurs de GWS :
- GĂ©nĂ©ration dâun nouveau compte de service et dâune paire de clĂ©s correspondante : Sur GCP, de nouvelles ressources de compte de service peuvent ĂȘtre produites soit de maniĂšre interactive via la console, soit de maniĂšre programmatique en utilisant des appels API directs et des outils CLI. Cela nĂ©cessite le rĂŽle
iam.serviceAccountAdminou tout rĂŽle personnalisĂ© Ă©quipĂ© de la permissioniam.serviceAccounts.create. Une fois le compte de service créé, nous procĂ©derons Ă la gĂ©nĂ©ration dâune paire de clĂ©s associĂ©e (permissioniam.serviceAccountKeys.create). - CrĂ©ation dâune nouvelle dĂ©lĂ©gation : Il est important de comprendre que seul le rĂŽle de Super Administrateur possĂšde la capacitĂ© de configurer une dĂ©lĂ©gation Ă lâĂ©chelle du domaine dans Google Workspace et que la dĂ©lĂ©gation Ă lâĂ©chelle du domaine ne peut pas ĂȘtre configurĂ©e de maniĂšre programmatique. Elle ne peut ĂȘtre créée et ajustĂ©e manuellement via la console de Google Workspace.
- La crĂ©ation de la rĂšgle peut ĂȘtre trouvĂ©e sous la page ContrĂŽles API â GĂ©rer la dĂ©lĂ©gation Ă lâĂ©chelle du domaine dans la console dâadministration de Google Workspace.
- Attacher les privilĂšges des portĂ©es OAuth : Lors de la configuration dâune nouvelle dĂ©lĂ©gation, Google exige seulement 2 paramĂštres, lâID client, qui est lâID OAuth de la ressource de compte de service GCP, et les portĂ©es OAuth qui dĂ©finissent quels appels API la dĂ©lĂ©gation nĂ©cessite.
- La liste complĂšte des portĂ©es OAuth peut ĂȘtre trouvĂ©e ici, mais voici une recommandation :
https://www.googleapis.com/auth/userinfo.email, https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/admin.directory.group, https://www.googleapis.com/auth/admin.directory.user, https://www.googleapis.com/auth/admin.directory.domain, https://mail.google.com/, https://www.googleapis.com/auth/drive, openid
- Agir au nom de lâidentitĂ© cible : Ă ce stade, nous avons un objet dĂ©lĂ©guĂ© fonctionnel dans GWS. Maintenant, en utilisant la clĂ© privĂ©e du compte de service GCP, nous pouvons effectuer des appels API (dans la portĂ©e dĂ©finie dans le paramĂštre de portĂ©e OAuth) pour le dĂ©clencher et agir au nom de toute identitĂ© existant dans Google Workspace. Comme nous lâavons appris, le compte de service gĂ©nĂ©rera des jetons dâaccĂšs selon ses besoins et en fonction des permissions quâil a pour les applications REST API.
- Consultez la section prĂ©cĂ©dente pour quelques outils permettant dâutiliser cette dĂ©lĂ©gation.
Délégation inter-organisationnelle
LâID SA OAuth est global et peut ĂȘtre utilisĂ© pour la dĂ©lĂ©gation inter-organisationnelle. Aucune restriction nâa Ă©tĂ© mise en place pour empĂȘcher la dĂ©lĂ©gation inter-groupe. En termes simples, les comptes de service de diffĂ©rentes organisations GCP peuvent ĂȘtre utilisĂ©s pour configurer une dĂ©lĂ©gation Ă lâĂ©chelle du domaine sur dâautres organisations Workspace. Cela signifierait quâil suffit dâun accĂšs de Super Administrateur Ă Workspace, et non dâun accĂšs au mĂȘme compte GCP, car lâadversaire peut crĂ©er des comptes de service et des clĂ©s privĂ©es sur son compte GCP personnel.
CrĂ©ation dâun projet pour Ă©numĂ©rer Workspace
Par dĂ©faut, les utilisateurs de Workspace ont la permission de crĂ©er de nouveaux projets, et lorsquâun nouveau projet est créé, le crĂ©ateur obtient le rĂŽle de PropriĂ©taire sur celui-ci.
Par consĂ©quent, un utilisateur peut crĂ©er un projet, activer les API pour Ă©numĂ©rer Workspace dans son nouveau projet et essayer de lâĂ©numĂ©rer.
Caution
Afin quâun utilisateur puisse Ă©numĂ©rer Workspace, il a Ă©galement besoin de suffisamment de permissions Workspace (tous les utilisateurs ne pourront pas Ă©numĂ©rer le rĂ©pertoire).
# Create project
gcloud projects create <uniq-projec-name> --name=proj-name
# Set project
gcloud config set project <uniq-projec-name>
# Enable svcs
gcloud services enable admin.googleapis.com
gcloud services enable cloudidentity.googleapis.com
# Get org ID
gcloud organizations list
# Get currents email user groups (at least you can check the groups and members of the groups you belong to)
gcloud identity groups memberships search-transitive-groups --member-email <email> --labels=cloudidentity.googleapis.com/groups.discussion_forum
gcloud identity groups memberships list --group-email=g<group-email>
# FROM HERE THE USER NEEDS TO HAVE ENOUGH WORKSPACE ACCESS
gcloud beta identity groups preview --customer <org-cust-id>
VĂ©rifiez plus dâĂ©numĂ©ration dans :
GCP - IAM, Principals & Org Policies Enum
Abus des identifiants Gcloud
Vous pouvez trouver plus dâinformations sur le flux gcloud pour se connecter Ă :
Comme expliquĂ© lĂ -bas, gcloud peut demander la portĂ©e https://www.googleapis.com/auth/drive qui permettrait Ă un utilisateur dâaccĂ©der au drive de lâutilisateur.
En tant quâattaquant, si vous avez compromis physiquement lâordinateur dâun utilisateur et que lâutilisateur est toujours connectĂ© avec son compte, vous pourriez vous connecter en gĂ©nĂ©rant un jeton avec accĂšs au drive en utilisant :
gcloud auth login --enable-gdrive-access
Si un attaquant compromet lâordinateur dâun utilisateur, il pourrait Ă©galement modifier le fichier google-cloud-sdk/lib/googlecloudsdk/core/config.py et ajouter dans le CLOUDSDK_SCOPES la portĂ©e 'https://www.googleapis.com/auth/drive' :
.png)
Warning
Par consĂ©quent, la prochaine fois que lâutilisateur se connectera, il crĂ©era un token avec accĂšs Ă drive que lâattaquant pourrait abuser pour accĂ©der au drive. Ăvidemment, le navigateur indiquera que le token gĂ©nĂ©rĂ© aura accĂšs Ă drive, mais comme lâutilisateur se connectera lui-mĂȘme avec
gcloud auth login, il ne soupçonnera probablement rien.Pour lister les fichiers drive :
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://www.googleapis.com/drive/v3/files"
De GWS Ă GCP
Accéder aux utilisateurs privilégiés de GCP
Si un attaquant a un accĂšs complet Ă GWS, il pourra accĂ©der Ă des groupes avec un accĂšs privilĂ©giĂ© Ă GCP ou mĂȘme Ă des utilisateurs, donc passer de GWS Ă GCP est gĂ©nĂ©ralement plus âsimpleâ simplement parce que les utilisateurs dans GWS ont des privilĂšges Ă©levĂ©s sur GCP.
Escalade de privilĂšges Google Groups
Par dĂ©faut, les utilisateurs peuvent rejoindre librement les groupes Workspace de lâOrganisation et ces groupes peuvent avoir des permissions GCP assignĂ©es (vĂ©rifiez vos groupes sur https://groups.google.com/).
En abusant de la privesc des groupes google, vous pourriez ĂȘtre en mesure dâescalader vers un groupe avec un certain type dâaccĂšs privilĂ©giĂ© Ă GCP.
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
- 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

