GCP - AppEngine Privesc
Last updated
Last updated
Za više informacija o App Engine-u pogledajte:
appengine.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 implementaciju aplikacije korišćenjem gcloud
cli-a. Možda se get
i list
mogu izbeći.
Možete pronaći primere Python koda na https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
Podrazumevano, ime usluge aplikacije će biti default
, i može postojati samo 1 instanca sa istim imenom.
Da biste promenili to i kreirali drugu aplikaciju, u app.yaml
, promenite vrednost ključa na nešto poput service: my-second-app
Sačekajte barem 10-15 minuta, ako ne uspe, pozovite ponovno izvršavanje još nekoliko puta i sačekajte nekoliko minuta.
Moguće je naznačiti Servisni nalog koji će se koristiti, ali se podrazumevano koristi podrazumevani SA za App Engine.
URL aplikacije je nešto poput https://<ime-projekta>.oa.r.appspot.com/
ili https://<ime-servisa>-dot-<ime-projekta>.oa.r.appspot.com
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 na instance App Engine tipa fleksibilne (ne standardne). Neki od dozvola list
i get
možda nisu zaista potrebni.
appengine.applications.update
, appengine.operations.get
Mislim da ovo samo menja pozadinski SA koji će Google koristiti za postavljanje aplikacija, tako da ne mislim da možete zloupotrebiti ovo da biste ukrali nalog za usluge.
appengine.versions.getFileContents
, appengine.versions.update
Nisam siguran kako koristiti ove dozvole ili da li su korisne (napomena da kada promenite kod, nova verzija se kreira pa ne znam da li možete jednostavno ažurirati kod ili IAM ulogu jednog, ali pretpostavljam da biste trebali moći, možda menjajući kod unutar bucket-a??).
Čak i sa pristupom za pisanje preko bucket-a gde se nalazi izvorni kod NIJE BILO moguće izvršiti proizvoljni kod modifikujući izvorni kod i manifest.json
.
Možda ako pratite bucket i otkrijete trenutak kada se kreira nova verzija i kada se izvorni kod i manifest otpremaju, možda biste mogli da ih promenite tako da nova verzija koristi one sa zadnjim vratima??
Izgleda da su slojevi kontejnera takođe smešteni u bucket-u, možda ih menjajući?