GCP - AppEngine Privesc
App Engine
Per maggiori informazioni su App Engine controlla:
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
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
Questi sono i permessi necessari per distribuire un'App usando gcloud
cli. Forse i permessi get
e list
potrebbero essere evitati.
Puoi trovare esempi di codice python su https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
Per impostazione predefinita, il nome del servizio App sarà default
, e può esserci solo 1 istanza con lo stesso nome.
Per cambiarlo e creare una seconda App, in app.yaml
, cambia il valore della chiave radice in qualcosa come service: my-second-app
Dagli almeno 10-15 minuti, se non funziona chiama deploy another of times e aspetta qualche minuto.
È possibile indicare il Service Account da utilizzare ma per impostazione predefinita viene utilizzato il SA predefinito di App Engine.
L'URL dell'applicazione è qualcosa come https://<proj-name>.oa.r.appspot.com/
o https://<service_name>-dot-<proj-name>.oa.r.appspot.com
Aggiornare i permessi equivalenti
Potresti avere abbastanza permessi per aggiornare un AppEngine ma non per crearne uno nuovo. In tal caso, ecco come potresti aggiornare l'App Engine corrente:
Se hai già compromesso un AppEngine e hai il permesso appengine.applications.update
e actAs sul service account da utilizzare, potresti modificare il service account utilizzato da AppEngine con:
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
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
Con questi permessi, è possibile accedere via ssh nelle istanze di App Engine di tipo flessibile (non standard). Alcuni dei permessi list
e get
potrebbero non essere realmente necessari.
appengine.applications.update
, appengine.operations.get
appengine.applications.update
, appengine.operations.get
Penso che questo cambi solo il SA di background che Google utilizzerà per configurare le applicazioni, quindi non credo che tu possa abusarne per rubare il service account.
appengine.versions.getFileContents
, appengine.versions.update
appengine.versions.getFileContents
, appengine.versions.update
Non sono sicuro di come utilizzare questi permessi o se sono utili (nota che quando cambi il codice viene creata una nuova versione, quindi non so se puoi semplicemente aggiornare il codice o il ruolo IAM di uno, ma suppongo che dovresti essere in grado di farlo, forse cambiando il codice all'interno del bucket??).
Accesso in scrittura sui bucket
Anche con accesso in scrittura sui bucket dove si trova il codice sorgente NON è stato possibile eseguire codice arbitrario modificando il codice sorgente e il manifest.json
.
Forse se stai monitorando il bucket e rilevi il momento in cui viene creata una nuova versione e il codice sorgente e il manifest vengono caricati, potrebbe essere possibile cambiarli in modo che la nuova versione utilizzi quelli con backdoor??
Sembra anche che i layer dei container siano memorizzati nel bucket, forse cambiando quelli?
Last updated