GCP - AppEngine Privesc
App Engine
App Engine hakkında daha fazla bilgi için:
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
Bunlar, gcloud
cli kullanarak bir Uygulama dağıtmak için gereken izinlerdir. Belki get
ve list
olanlar önlenilebilir.
Python kod örneklerini https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine adresinde bulabilirsiniz.
Varsayılan olarak, Uygulama hizmetinin adı default
olacak ve aynı ada sahip sadece 1 örnek olabilir.
Bunu değiştirmek ve ikinci bir Uygulama oluşturmak için app.yaml
içinde, kök anahtarının değerini service: my-second-app
gibi bir şeye değiştirin.
En az 10-15 dakika bekleyin, eğer işe yaramazsa birkaç kez yeniden dağıtın ve birkaç dakika bekleyin.
Kullanılacak Hizmet Hesabını belirtmek mümkündür, ancak varsayılan olarak App Engine varsayılan SA kullanılır.
Uygulamanın URL'si https://<proj-adı>.oa.r.appspot.com/
veya https://<service_adı>-dot-<proj-adı>.oa.r.appspot.com
gibi bir şeydir.
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
Bu izinlerle, esnek (standart olmayan) türdeki App Engine örneklerine ssh üzerinden giriş yapmak mümkündür. list
ve get
izinlerinin bazıları gerçekten gerekli olmayabilir.
appengine.applications.update
, appengine.operations.get
appengine.applications.update
, appengine.operations.get
Bu, uygulamaları kurmak için Google'ın arka planda kullanacağı SA'nın değiştirilmesini sağlar, bu nedenle hizmet hesabını çalmak için bunu kötüye kullanamazsınız.
appengine.versions.getFileContents
, appengine.versions.update
appengine.versions.getFileContents
, appengine.versions.update
Bu izinleri nasıl kullanacağınızdan veya bunların faydalı olup olmadığından emin değilim (kod değiştirildiğinde yeni bir sürüm oluşturulduğu için kodu veya bir IAM rolünü güncelleyebileceğinizi bilmiyorum, ancak sanırım bunu yapabilirsiniz, belki kovada kodu değiştirerek??).
Kovalar üzerinde yazma erişimi
Kaynak kodunun bulunduğu kovalara yazma erişimi olsa bile, kaynak kodunu ve manifest.json
'ı değiştirerek keyfi kodu yürütmek MÜMKÜN DEĞİLDİR.
Belki yeni bir sürümün oluşturulduğu ve kaynak kodunun ve manifestin yüklendiği anı izliyorsanız, bunları değiştirerek yeni sürümün backdoored olanları kullanmasını sağlamak mümkün olabilir mi??
Ayrıca, konteyner katmanlarının kovada depolandığı görünüyor, belki onları değiştirmek?
Last updated