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)
Kwa maelezo zaidi kuhusu App Engine angalia:
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
Hizi ndizo ruhusa zinazohitajika ili kupeleka App kwa kutumia gcloud
cli. Huenda get
na list
zinaweza kuepukwa.
Unaweza kupata mifano ya msimbo wa python katika https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
Kwa kawaida, jina la huduma ya App litakuwa default
, na kunaweza kuwa na instance 1 tu yenye jina sawa.
Ili kubadilisha na kuunda App ya pili, katika app.yaml
, badilisha thamani ya ufunguo wa mzizi kuwa kitu kama service: my-second-app
Give it at least 10-15min, if it doesn't work call deploy another of times and wait some minutes.
Ni uwezekano wa kuashiria Akaunti ya Huduma kutumia lakini kwa chaguo-msingi, SA ya App Engine ya chaguo-msingi inatumika.
The URL of the application is something like https://<proj-name>.oa.r.appspot.com/
or https://<service_name>-dot-<proj-name>.oa.r.appspot.com
Unaweza kuwa na ruhusa za kutosha kuboresha AppEngine lakini si kuunda mpya. Katika hali hiyo, hii ndiyo jinsi unavyoweza kuboresha App Engine ya sasa:
Ikiwa tayari umepata AppEngine na una ruhusa appengine.applications.update
na actAs juu ya akaunti ya huduma unayotumia, unaweza kubadilisha akaunti ya huduma inayotumiwa na AppEngine kwa:
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
Kwa ruhusa hizi, inawezekana kuingia kupitia ssh katika App Engine instances za aina flexible (sio standard). Baadhi ya ruhusa za list
na get
huenda zisihitajike kweli.
appengine.applications.update
, appengine.operations.get
Nadhani hii inabadilisha tu SA ya nyuma ambayo google itatumia kuweka mipango, hivyo sidhani unaweza kutumia hii kuiba akaunti ya huduma.
appengine.versions.getFileContents
, appengine.versions.update
Sijui jinsi ya kutumia ruhusa hizi au kama zinafaa (kumbuka kwamba unapobadilisha msimbo toleo jipya linaundwa hivyo sijui kama unaweza tu kuboresha msimbo au jukumu la IAM la moja, lakini nadhani unapaswa kuwa na uwezo wa kufanya hivyo, labda kubadilisha msimbo ndani ya bucket??).
Kama ilivyotajwa, toleo la appengine linaunda data fulani ndani ya bucket yenye muundo wa jina: staging.<project-id>.appspot.com
. Kumbuka kwamba haiwezekani kuchukua kabla bucket hii kwa sababu watumiaji wa GCP hawajaidhinishwa kuunda buckets kwa kutumia jina la kikoa appspot.com
.
Hata hivyo, kwa upatikanaji wa kusoma na kuandika juu ya bucket hii, inawezekana kupandisha ruhusa kwa SA iliyoambatanishwa na toleo la AppEngine kwa kufuatilia bucket na wakati wowote mabadiliko yanapofanywa, badilisha kwa haraka iwezekanavyo msimbo. Kwa njia hii, kontena linaloundwa kutoka kwa msimbo huu litafanya kodi ya nyuma.
Kwa maelezo zaidi na PoC angalia habari muhimu kutoka ukurasa huu:
GCP - Storage PrivescIngawa App Engine inaunda picha za docker ndani ya Usajili wa Vitu. Ilijaribiwa kwamba hata ukibadilisha picha ndani ya huduma hii na kuondoa mfano wa App Engine (hivyo mfano mpya unapelekwa) msimbo unaotekelezwa haubadiliki. Inaweza kuwa inawezekana kwamba kufanya shambulio la Race Condition kama ilivyo na buckets inaweza kuwa inawezekana kufuta msimbo unaotekelezwa, lakini hii haijajaribiwa.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)