GCP - IAM, Principals & Org Policies Enum

Impara l'hacking su AWS da zero a esperto con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Account del Servizio

Per una introduzione su cosa sia un account del servizio, controlla:

pageGCP - Basic Information

Enumerazione

Un account del servizio appartiene sempre a un progetto:

gcloud iam service-accounts list --project <project>

Utenti e Gruppi

Per una panoramica su come funzionano Utenti e Gruppi in GCP, controlla:

pageGCP - Basic Information

Enumerazione

Con i permessi serviceusage.services.enable e serviceusage.services.use è possibile abilitare servizi in un progetto e utilizzarli.

Nota che di default, agli utenti di Workspace viene assegnato il ruolo Project Creator, che concede loro l'accesso per creare nuovi progetti. Quando un utente crea un progetto, gli viene assegnato il ruolo owner su di esso. Quindi, potrebbe abilitare questi servizi sul progetto per poter enumerare Workspace.

Tuttavia, è importante notare che è necessario avere abbastanza permessi in Workspace per poter chiamare queste API.

Se puoi abilitare il servizio admin e se il tuo utente ha abbastanza privilegi in workspace, potresti enumerare tutti i gruppi e utenti con le seguenti righe. Anche se si parla di gruppi di identità, restituisce anche utenti senza gruppi:

# 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

Nei precedenti esempi il parametro --labels è richiesto, quindi viene utilizzato un valore generico (non è richiesto se si utilizza l'API direttamente come fa PurplePanda qui.

Anche con il servizio admin abilitato, è possibile che si verifichi un errore nell'enumerarli perché l'utente del tuo spazio di lavoro compromesso non ha abbastanza autorizzazioni:

IAM

Controlla questo per informazioni di base su IAM.

Autorizzazioni predefinite

Dai documenti: Quando viene creato un'organizzazione, tutti gli utenti nel tuo dominio ricevono automaticamente i ruoli Billing Account Creator e Project Creator per impostazione predefinita. Questi ruoli predefiniti consentono ai tuoi utenti di iniziare a utilizzare Google Cloud immediatamente, ma non sono destinati all'uso regolare delle risorse dell'organizzazione.

Questi ruoli concedono le autorizzazioni:

  • billing.accounts.create e resourcemanager.organizations.get

  • resourcemanager.organizations.get e resourcemanager.projects.create

Inoltre, quando un utente crea un progetto, viene automaticamente assegnato come proprietario di quel progetto secondo i documenti. Pertanto, per impostazione predefinita, un utente sarà in grado di creare un progetto ed eseguire qualsiasi servizio su di esso (minatori? Enumerazione di Workspace? ...)

Il privilegio più elevato in un'Organizzazione GCP è il ruolo di Amministratore dell'Organizzazione.

set-iam-policy vs add-iam-policy-binding

Nella maggior parte dei servizi sarà possibile modificare le autorizzazioni su una risorsa utilizzando il metodo add-iam-policy-binding o set-iam-policy. La differenza principale è che add-iam-policy-binding aggiunge un nuovo ruolo di associazione alla policy IAM esistente mentre set-iam-policy eliminerà le autorizzazioni precedentemente concesse e imposterà solo quelle indicate nel comando.

Enumerazione

# 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>

Enumerazione IAM di cloudasset

Ci sono diversi modi per verificare tutti i permessi di un utente in risorse diverse (come organizzazioni, cartelle, progetti...) utilizzando questo servizio.

  • Il permesso cloudasset.assets.searchAllIamPolicies può richiedere tutte le policy iam all'interno di una risorsa.

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
  • Il permesso cloudasset.assets.analyzeIamPolicy può richiedere tutte le policy iam di un principale all'interno di una risorsa.

# 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'
  • Il permesso cloudasset.assets.searchAllResources consente di elencare tutte le risorse di un'organizzazione, cartella o progetto. Risorse correlate a IAM (come ruoli) incluse.

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
  • Il permesso cloudasset.assets.analyzeMove potrebbe essere utile anche per recuperare le policy che influenzano una risorsa come un progetto

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Suppongo che il permesso cloudasset.assets.queryIamPolicy potrebbe anche consentire di trovare i permessi dei principali

# 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

Enumerazione delle autorizzazioni testIamPermissions

Se non è possibile accedere alle informazioni IAM utilizzando i metodi precedenti e si è in un Red Team. Si potrebbe utilizzare lo strumento https://github.com/carlospolop/bf_my_gcp_perms per forzare le proprie autorizzazioni attuali.

Tuttavia, nota che il servizio cloudresourcemanager.googleapis.com deve essere abilitato.

Privesc

Nella pagina seguente puoi verificare come abusare delle autorizzazioni IAM per elevare i privilegi:

pageGCP - IAM Privesc

Enumerazione non autenticata

pageGCP - IAM, Principals & Org Unauthenticated Enum

Post Esploitation

pageGCP - IAM Post Exploitation

Persistenza

Se si hanno privilegi elevati si potrebbe:

  • Creare nuovi SA (o utenti se in Workspace)

  • Dare ai principali controllati da sé stessi più autorizzazioni

  • Concedere più privilegi a SA vulnerabili (SSRF in vm, Cloud Function vulnerabile...)

  • ...

Politiche dell'Organizzazione

Per una introduzione su cosa sono le Politiche dell'Organizzazione controlla:

pageGCP - Basic Information

Le politiche IAM indicano le autorizzazioni che i principali hanno sui servizi tramite ruoli, ai quali sono assegnate autorizzazioni granulari. Le politiche dell'organizzazione limitano come quei servizi possono essere utilizzati o quali funzionalità sono disabilitate. Questo aiuta a migliorare il principio del privilegio minimo di ciascuna risorsa nell'ambiente 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

Privilegi di Escalation

Nella seguente pagina puoi verificare come abusare dei permessi delle policy dell'organizzazione per ottenere privilegi di escalation:

pageGCP - Orgpolicy Privesc

Last updated