GCP - IAM, Principals & Org Policies Enum

Reading time: 8 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Service Accounts

Za uvod o tome šta je servisni nalog, pogledajte:

GCP - Basic Information

Enumeration

Servisni nalog uvek pripada projektu:

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

Korisnici i Grupe

Za uvod o tome kako funkcionišu Korisnici i Grupe u GCP pogledajte:

GCP - Basic Information

Enumeracija

Sa dozvolama serviceusage.services.enable i serviceusage.services.use moguće je omogućiti usluge u projektu i koristiti ih.

caution

Imajte na umu da se po defaultu korisnicima Workspace dodeljuje uloga Kreator Projekta, što im omogućava da kreiraju nove projekte. Kada korisnik kreira projekat, dodeljuje mu se uloga owner. Tako da može omogućiti ove usluge nad projektom kako bi mogao da enumeriše Workspace.

Međutim, primetite da je takođe potrebno imati dovoljno dozvola u Workspace da bi mogli da pozovete ove API-je.

Ako možete omogućiti admin uslugu i ako vaš korisnik ima dovoljna prava u workspace, mogli biste enumerisati sve grupe i korisnike sa sledećim linijama.
Čak i ako se kaže identity groups, takođe vraća korisnike bez ikakvih grupa:

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

U prethodnim primerima parametar --labels je obavezan, tako da se koristi generička vrednost (nije obavezan ako koristite API direktno kao što PurplePanda radi ovde.

Čak i sa omogućenom admin uslugom, moguće je da dobijete grešku prilikom enumeracije jer vaš kompromitovani korisnik radnog prostora nema dovoljno dozvola:

IAM

Proverite ovo za osnovne informacije o IAM.

Podrazumevane Dozvole

Iz dokumentacije: Kada se kreira resurs organizacije, svim korisnicima u vašem domenu se podrazumevano dodeljuju uloge Kreator računa za naplatu i Kreator projekta. Ove podrazumevane uloge omogućavaju vašim korisnicima da odmah počnu da koriste Google Cloud, ali nisu namenjene za redovno korišćenje resursa vaše organizacije.

Ove uloge dodeljuju dozvole:

  • billing.accounts.create i resourcemanager.organizations.get
  • resourcemanager.organizations.get i resourcemanager.projects.create

Štaviše, kada korisnik kreira projekat, on je automatski dodeljen kao vlasnik tog projekta prema dokumentaciji. Stoga, podrazumevano, korisnik će moći da kreira projekat i pokrene bilo koju uslugu na njemu (rudari? enumeracija radnog prostora? ...)

caution

Najviša privilegija u GCP organizaciji je uloga Administrator organizacije.

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

U većini usluga moći ćete da promenite dozvole nad resursom koristeći metodu add-iam-policy-binding ili set-iam-policy. Glavna razlika je u tome što add-iam-policy-binding dodaje novo vezivanje uloge postojećoj IAM politici dok set-iam-policy briše prethodno dodeljene dozvole i postavlja samo one koje su naznačene u komandi.

Enumeration

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

Postoje različiti načini da se provere sve dozvole korisnika u različitim resursima (kao što su organizacije, fascikle, projekti...) koristeći ovu uslugu.

  • Dozvola cloudasset.assets.searchAllIamPolicies može zatražiti sve iam politike unutar resursa.
bash
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
  • Dozvola cloudasset.assets.analyzeIamPolicy može zatražiti sve iam politike jednog subjekta unutar resursa.
bash
# 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'
  • Dozvola cloudasset.assets.searchAllResources omogućava listanje svih resursa organizacije, fascikle ili projekta. Uključeni su resursi povezani sa IAM-om (kao što su uloge).
bash
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
  • Dozvola cloudasset.assets.analyzeMove može biti korisna i za preuzimanje politika koje utiču na resurs kao što je projekat.
bash
gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Pretpostavljam da bi dozvola cloudasset.assets.queryIamPolicy takođe mogla omogućiti pristup pronalaženju dozvola principala.
bash
# 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 enumeracija

caution

Ako ne možete pristupiti IAM informacijama koristeći prethodne metode i nalazite se u Red Team-u. Možete koristiti alat https://github.com/carlospolop/bf_my_gcp_perms da brute-force-ujete svoje trenutne dozvole.

Međutim, imajte na umu da servis cloudresourcemanager.googleapis.com treba biti omogućen.

Privesc

Na sledećoj stranici možete proveriti kako da zloupotrebite IAM dozvole za eskalaciju privilegija:

GCP - IAM Privesc

Neautentifikovana Enum

GCP - IAM, Principals & Org Unauthenticated Enum

Post Eksploatacija

GCP - IAM Post Exploitation

Persistencija

Ako imate visoke privilegije mogli biste:

  • Kreirati nove SAs (ili korisnike ako ste u Workspace)
  • Dati principima koje kontrolišete više dozvola
  • Dati više privilegija ranjivim SAs (SSRF u vm, ranjiva Cloud Function…)

Org Politike

Za uvod o tome šta su Org Politike proverite:

GCP - Basic Information

IAM politike ukazuju na dozvole koje principi imaju nad resursima putem uloga, koje dodeljuju granularne dozvole. Politike organizacije ograničavaju kako se ti servisi mogu koristiti ili koje funkcije su onemogućene. Ovo pomaže u poboljšanju minimalnih privilegija svakog resursa u GCP okruženju.

bash
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

Na sledećoj stranici možete proveriti kako da zloupotrebite dozvole org politika za eskalaciju privilegija:

GCP - Orgpolicy Privesc

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks