GCP - AppEngine Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Za više informacija o App Engine, pogledajte:
GCP - App Engine Enumappengine.applications.get
, appengine.instances.get
, appengine.instances.list
, appengine.operations.get
, appengine.operations.list
, appengine.services.get
, appengine.services.list
, appengine.versions.create
, appengine.versions.get
, appengine.versions.list
, cloudbuild.builds.get
,iam.serviceAccounts.actAs
, resourcemanager.projects.get
, storage.objects.create
, storage.objects.list
To su potrebne dozvole za deploy an App using gcloud
cli. Možda se get
i list
dozvole mogu izbeći.
Možete pronaći primere python koda na https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
Podrazumevano, naziv App servisa će biti default
, i može postojati samo 1 instanca sa istim imenom.
Da biste ga promenili i kreirali drugu App, u app.yaml
, promenite vrednost korenskog ključa na nešto poput service: my-second-app
Dajte mu najmanje 10-15 minuta, ako ne uspe, pozovite deploy another of times i sačekajte nekoliko minuta.
Moguće je naznačiti Service Account koji će se koristiti ali se po defaultu koristi App Engine podrazumevajući SA.
URL aplikacije je nešto poput https://<proj-name>.oa.r.appspot.com/
ili https://<service_name>-dot-<proj-name>.oa.r.appspot.com
Možda imate dovoljno dozvola da ažurirate AppEngine, ali ne i da kreirate novi. U tom slučaju, ovako možete ažurirati trenutni App Engine:
Ako ste već kompromitovali AppEngine i imate dozvolu appengine.applications.update
i actAs nad servisnim nalogom koji možete koristiti, mogli biste da modifikujete servisni nalog koji koristi AppEngine sa:
appengine.instances.enableDebug
, appengine.instances.get
, appengine.instances.list
, appengine.operations.get
, appengine.services.get
, appengine.services.list
, appengine.versions.get
, appengine.versions.list
, compute.projects.get
Sa ovim dozvolama, moguće je prijaviti se putem ssh u App Engine instancama tipa flexible (ne standardne). Neke od list
i get
dozvola možda nisu zaista potrebne.
appengine.applications.update
, appengine.operations.get
Mislim da ovo samo menja pozadinsku SA koju će Google koristiti za postavljanje aplikacija, tako da ne mislim da možete iskoristiti ovo da ukradete servisni nalog.
appengine.versions.getFileContents
, appengine.versions.update
Nisam siguran kako da koristim ove dozvole ili da li su korisne (napominjem da kada promenite kod, nova verzija se kreira, tako da ne znam da li možete samo da ažurirate kod ili IAM ulogu jednog, ali pretpostavljam da biste trebali moći, možda menjajući kod unutar bucket-a??).
Kao što je pomenuto, appengine verzije generišu neke podatke unutar bucket-a sa formatom imena: staging.<project-id>.appspot.com
. Napominjem da nije moguće unapred preuzeti ovaj bucket jer GCP korisnici nisu ovlašćeni da generišu bucket-e koristeći naziv domena appspot.com
.
Međutim, sa pristupom za čitanje i pisanje preko ovog bucket-a, moguće je eskalirati privilegije na SA vezanu za AppEngine verziju praćenjem bucket-a i svaki put kada se izvrši promena, što je brže moguće modifikovati kod. Na ovaj način, kontejner koji se kreira iz ovog koda će izvršiti backdoor-ovani kod.
Za više informacija i PoC proverite relevantne informacije sa ove stranice:
GCP - Storage PrivescIako App Engine kreira docker slike unutar Artifact Registry. Testirano je da čak i ako modifikujete sliku unutar ove usluge i uklonite App Engine instancu (tako da se nova implementira) izvršeni kod se ne menja. Moguće je da izvođenjem napada Race Condition kao sa bucket-ima može biti moguće prepisati izvršeni kod, ali ovo nije testirano.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)