GCP - IAM, Principes & Enumération des Politiques d'Organisation
Reading time: 9 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Comptes de Service
Pour une introduction sur ce qu'est un compte de service, consultez :
Énumération
Un compte de service appartient toujours à un projet :
gcloud iam service-accounts list --project <project>
Utilisateurs & Groupes
Pour une introduction sur le fonctionnement des Utilisateurs & Groupes dans GCP, consultez :
Énumération
Avec les permissions serviceusage.services.enable
et serviceusage.services.use
, il est possible d'activer des services dans un projet et de les utiliser.
caution
Notez qu'en règle générale, les utilisateurs de Workspace se voient attribuer le rôle Créateur de Projet, leur donnant accès à créer de nouveaux projets. Lorsqu'un utilisateur crée un projet, il se voit attribuer le rôle owner
sur celui-ci. Ainsi, il pourrait activer ces services sur le projet pour pouvoir énumérer Workspace.
Cependant, notez qu'il est également nécessaire d'avoir suffisamment de permissions dans Workspace pour pouvoir appeler ces API.
Si vous pouvez activer le service admin
et si votre utilisateur a suffisamment de privilèges dans Workspace, vous pourriez énumérer tous les groupes & utilisateurs avec les lignes suivantes.
Même s'il est indiqué identity groups
, cela retourne également des utilisateurs sans aucun groupe :
# Enable admin
gcloud services enable admin.googleapis.com
gcloud services enable cloudidentity.googleapis.com
# Using admin.googleapis.com
## List all users
gcloud organizations list #The DIRECTORY_CUSTOMER_ID is the Workspace ID
gcloud beta identity groups preview --customer <workspace-id>
# Using cloudidentity.googleapis.com
## List groups of a user (you can list at least the groups you belong to)
gcloud identity groups memberships search-transitive-groups --member-email <email> --labels=cloudidentity.googleapis.com/groups.discussion_forum
## List Group Members (you can list at least the groups you belong to)
gcloud identity groups memberships list --group-email=<email>
### Make it transitive
gcloud identity groups memberships search-transitive-memberships --group-email=<email>
## Get a graph (if you have enough permissions)
gcloud identity groups memberships get-membership-graph --member-email=<email> --labels=cloudidentity.googleapis.com/groups.discussion_forum
tip
Dans les exemples précédents, le paramètre --labels
est requis, donc une valeur générique est utilisée (ce n'est pas requis si vous utilisez l'API directement comme PurplePanda le fait ici.
Même avec le service admin activé, il est possible que vous rencontriez une erreur lors de leur énumération car votre utilisateur de workspace compromis n'a pas suffisamment de permissions :
.png)
IAM
Consultez ceci pour des informations de base sur IAM.
Permissions par défaut
D'après les docs : Lorsqu'une ressource d'organisation est créée, tous les utilisateurs de votre domaine se voient accorder par défaut les rôles Créateur de compte de facturation et Créateur de projet. Ces rôles par défaut permettent à vos utilisateurs de commencer à utiliser Google Cloud immédiatement, mais ne sont pas destinés à être utilisés dans le fonctionnement régulier de votre ressource d'organisation.
Ces rôles accordent les permissions :
billing.accounts.create
etresourcemanager.organizations.get
resourcemanager.organizations.get
etresourcemanager.projects.create
De plus, lorsqu'un utilisateur crée un projet, il est automatiquement accordé propriétaire de ce projet selon les docs. Par conséquent, par défaut, un utilisateur pourra créer un projet et exécuter n'importe quel service dessus (mineurs ? énumération de Workspace ? ...)
caution
Le plus haut privilège dans une organisation GCP est le rôle Administrateur d'organisation.
set-iam-policy vs add-iam-policy-binding
Dans la plupart des services, vous pourrez modifier les permissions sur une ressource en utilisant la méthode add-iam-policy-binding
ou set-iam-policy
. La principale différence est que add-iam-policy-binding
ajoute un nouveau lien de rôle à la politique IAM existante tandis que set-iam-policy
va supprimer les permissions précédemment accordées et définir uniquement celles indiquées dans la commande.
Énumération
# Roles
## List roles
gcloud iam roles list --project $PROJECT_ID # List only custom roles
gcloud iam roles list --filter='etag:AA=='
## Get perms and description of role
gcloud iam roles describe roles/container.admin
gcloud iam roles describe --project <proj-name> <role-name>
# Policies
gcloud organizations get-iam-policy <org_id>
gcloud resource-manager folders get-iam-policy <folder-id>
gcloud projects get-iam-policy <project-id>
# MISC
## Testable permissions in resource
gcloud iam list-testable-permissions --filter "NOT apiDisabled: true" <resource>
## Grantable roles to a resource
gcloud iam list-grantable-roles <project URL>
cloudasset IAM Enumeration
Il existe différentes manières de vérifier toutes les autorisations d'un utilisateur dans différentes ressources (telles que des organisations, des dossiers, des projets...) en utilisant ce service.
- L'autorisation
cloudasset.assets.searchAllIamPolicies
peut demander toutes les politiques IAM à l'intérieur d'une ressource.
gcloud asset search-all-iam-policies #By default uses current configured project
gcloud asset search-all-iam-policies --scope folders/1234567
gcloud asset search-all-iam-policies --scope organizations/123456
gcloud asset search-all-iam-policies --scope projects/project-id-123123
- La permission
cloudasset.assets.analyzeIamPolicy
peut demander toutes les politiques iam d'un principal à l'intérieur d'une ressource.
# Needs perm "cloudasset.assets.analyzeIamPolicy" over the asset
gcloud asset analyze-iam-policy --organization=<org-id> \
--identity='user:email@hacktricks.xyz'
gcloud asset analyze-iam-policy --folder=<folder-id> \
--identity='user:email@hacktricks.xyz'
gcloud asset analyze-iam-policy --project=<project-name> \
--identity='user:email@hacktricks.xyz'
- La permission
cloudasset.assets.searchAllResources
permet de lister toutes les ressources d'une organisation, d'un dossier ou d'un projet. Les ressources liées à IAM (comme les rôles) sont incluses.
gcloud asset search-all-resources --scope projects/<proj-name>
gcloud asset search-all-resources --scope folders/1234567
gcloud asset search-all-resources --scope organizations/123456
- La permission
cloudasset.assets.analyzeMove
peut également être utile pour récupérer les politiques affectant une ressource comme un projet.
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
- Je suppose que la permission
cloudasset.assets.queryIamPolicy
pourrait également donner accès pour trouver les permissions des principaux.
# But, when running something like this
gcloud asset query --project=<proj> --statement='SELECT * FROM compute_googleapis_com_Instance'
# I get the error
ERROR: (gcloud.asset.query) UNAUTHENTICATED: QueryAssets API is only supported for SCC premium customers. See https://cloud.google.com/security-command-center/pricing
testIamPermissions enumeration
caution
Si vous ne pouvez pas accéder aux informations IAM en utilisant les méthodes précédentes et que vous êtes dans une Red Team. Vous pourriez utiliser l'outil https://github.com/carlospolop/bf_my_gcp_perms pour forcer vos permissions actuelles.
Cependant, notez que le service cloudresourcemanager.googleapis.com
doit être activé.
Privesc
Dans la page suivante, vous pouvez vérifier comment abuser des permissions IAM pour escalader les privilèges :
Unauthenticated Enum
GCP - IAM, Principals & Org Unauthenticated Enum
Post Exploitation
Persistence
Si vous avez des privilèges élevés, vous pourriez :
- Créer de nouveaux SAs (ou utilisateurs si dans Workspace)
- Donner aux principaux contrôlés par vous plus de permissions
- Donner plus de privilèges aux SAs vulnérables (SSRF dans vm, vuln Cloud Function…)
- …
Org Policies
Pour une introduction sur ce que sont les Org Policies, consultez :
Les politiques IAM indiquent les permissions que les principaux ont sur les ressources via des rôles, qui se voient attribuer des permissions granulaires. Les politiques d'organisation restreignent la manière dont ces services peuvent être utilisés ou quelles fonctionnalités sont désactivées. Cela aide à améliorer le principe du moindre privilège de chaque ressource dans l'environnement GCP.
gcloud resource-manager org-policies list --organization=ORGANIZATION_ID
gcloud resource-manager org-policies list --folder=FOLDER_ID
gcloud resource-manager org-policies list --project=PROJECT_ID
Privesc
Dans la page suivante, vous pouvez vérifier comment abuser des autorisations des politiques d'organisation pour élever les privilèges :
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.