GCP - IAM, Principals & Org Policies Enum

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Contas de Serviço

Para uma introdução sobre o que é uma conta de serviço, verifique:

pageGCP - Basic Information

Enumeração

Uma conta de serviço sempre pertence a um projeto:

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

Usuários e Grupos

Para uma introdução sobre como Usuários e Grupos funcionam no GCP, confira:

pageGCP - Basic Information

Enumeração

Com as permissões serviceusage.services.enable e serviceusage.services.use é possível ativar serviços em um projeto e utilizá-los.

Observe que por padrão, os usuários do Workspace recebem a função de Criador de Projeto, dando a eles acesso para criar novos projetos. Quando um usuário cria um projeto, ele recebe a função de owner sobre ele. Portanto, ele poderia ativar esses serviços no projeto para poder enumerar o Workspace.

No entanto, observe que também é necessário ter permissões suficientes no Workspace para poder chamar essas APIs.

Se você puder ativar o serviço admin e se seu usuário tiver privilégios suficientes no workspace, você poderia enumerar todos os grupos e usuários com as seguintes linhas. Mesmo que diga identity groups, também retorna usuários sem nenhum grupo:

# 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

Nos exemplos anteriores, o parâmetro --labels é necessário, então um valor genérico é usado (não é necessário se você usar a API diretamente como o PurplePanda faz aqui.

Mesmo com o serviço de administrador habilitado, é possível que você receba um erro ao enumerá-los porque seu usuário comprometido no workspace não tem permissões suficientes:

IAM

Verifique isso para informações básicas sobre IAM.

Permissões Padrão

Dos documentos: Quando um recurso da organização é criado, todos os usuários em seu domínio recebem automaticamente as funções de Criador de Conta de Faturamento e Criador de Projeto por padrão. Essas funções padrão permitem que seus usuários comecem a usar o Google Cloud imediatamente, mas não são destinadas ao uso regular do recurso da organização.

Essas funções concedem as permissões:

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

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

Além disso, quando um usuário cria um projeto, ele é automaticamente concedido proprietário daquele projeto de acordo com a documentação. Portanto, por padrão, um usuário poderá criar um projeto e executar qualquer serviço nele (mineradores? Enumeração do Workspace? ...)

O maior privilégio em uma Organização GCP é a função de Administrador da Organização.

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

Na maioria dos serviços, você poderá alterar as permissões sobre um recurso usando o método add-iam-policy-binding ou set-iam-policy. A principal diferença é que add-iam-policy-binding adiciona uma nova vinculação de função à política IAM existente, enquanto set-iam-policy irá excluir as permissões anteriormente concedidas e definir apenas as indicadas no comando.

Enumeração

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

Enumeração IAM do cloudasset

Existem diferentes maneiras de verificar todas as permissões de um usuário em diferentes recursos (como organizações, pastas, projetos...) usando este serviço.

  • A permissão cloudasset.assets.searchAllIamPolicies pode solicitar todas as políticas iam dentro de um recurso.

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
  • A permissão cloudasset.assets.analyzeIamPolicy pode solicitar todas as políticas do IAM de um principal dentro de um recurso.

# 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'
  • A permissão cloudasset.assets.searchAllResources permite listar todos os recursos de uma organização, pasta ou projeto. Recursos relacionados ao IAM (como funções) estão incluídos.

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
  • A permissão cloudasset.assets.analyzeMove pode ser útil para também recuperar políticas que afetam um recurso como um projeto

gcloud asset analyze-move --project=<proj-name> \
--destination-organization=609216679593
  • Eu suponho que a permissão cloudasset.assets.queryIamPolicy também poderia fornecer acesso para encontrar permissões de princípios

# 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

Enumeração de testIamPermissions

Se você não consegue acessar informações do IAM usando os métodos anteriores e está em uma Equipe Vermelha. Você poderia usar a ferramenta https://github.com/carlospolop/bf_my_gcp_perms para forçar suas permissões atuais.

No entanto, observe que o serviço cloudresourcemanager.googleapis.com precisa estar habilitado.

Privesc

Na página a seguir, você pode verificar como abusar das permissões do IAM para escalar privilégios:

pageGCP - IAM Privesc

Enumeração não autenticada

pageGCP - IAM, Principals & Org Unauthenticated Enum

Pós-Exploração

pageGCP - IAM Post Exploitation

Persistência

Se você tiver altos privilégios, você poderia:

  • Criar novas SAs (ou usuários se estiver no Workspace)

  • Dar a princípios controlados por você mais permissões

  • Dar mais privilégios a SAs vulneráveis (SSRF em vm, Cloud Function vulnerável...)

  • ...

Políticas da Organização

Para uma introdução sobre o que são as Políticas da Organização, confira:

pageGCP - Basic Information

As políticas do IAM indicam as permissões que os princípios têm sobre recursos por meio de funções, que são atribuídas permissões granulares. As políticas da organização restringem como esses serviços podem ser usados ou quais recursos estão desativados. Isso ajuda a melhorar o princípio do menor privilégio de cada recurso no ambiente do 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

Elevação de Privilégios

Na página a seguir, você pode verificar como abusar das permissões das políticas da organização para elevar privilégios:

pageGCP - Orgpolicy Privesc

Última actualización