GCP - Storage Privesc
Storage
Basic Information:
GCP - Storage Enumstorage.objects.get
storage.objects.get
Ruhusa hii inakuruhusu kupakua faili zilizohifadhiwa ndani ya Cloud Storage. Hii inaweza kukuruhusu kupandisha mamlaka kwa sababu katika baadhi ya matukio taarifa nyeti huhifadhiwa hapo. Zaidi ya hayo, baadhi ya huduma za GCP huhifadhi taarifa zao katika mifuko:
GCP Composer: Unapounda Mazingira ya Composer, kanuni za DAG zote zitahifadhiwa ndani ya mfuko. Kazi hizi zinaweza kuwa na taarifa za kuvutia ndani ya kanuni zao.
GCR (Container Registry): Picha za kontena huhifadhiwa ndani ya mifuko, ambayo ina maana kwamba ikiwa unaweza kusoma mifuko hiyo utaweza kupakua picha na kutafuta leaks na/au kanuni ya chanzo.
storage.objects.setIamPolicy
storage.objects.setIamPolicy
Unaweza kujipa ruhusa ya kutumia moja ya matukio ya awali ya sehemu hii.
storage.buckets.setIamPolicy
storage.buckets.setIamPolicy
Kwa mfano wa jinsi ya kubadilisha ruhusa kwa kutumia ruhusa hii angalia ukurasa huu:
GCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
storage.hmacKeys.create
Kipengele cha "interoperability" cha Cloud Storage, kilichoundwa kwa ajili ya mawasiliano ya msalaba wa wingu kama na AWS S3, kinahusisha kuunda funguo za HMAC kwa Akaunti za Huduma na watumiaji. Mshambuliaji anaweza kutumia hii kwa kuunda funguo za HMAC kwa Akaunti ya Huduma yenye mamlaka ya juu, hivyo kupandisha mamlaka ndani ya Cloud Storage. Ingawa funguo za HMAC zinazohusishwa na watumiaji zinaweza kupatikana tu kupitia console ya wavuti, funguo za ufikiaji na siri zinabaki kupatikana milele, zikiwa na uwezo wa kuhifadhi upatikanaji wa akiba. Kwa upande mwingine, funguo za HMAC zinazohusishwa na Akaunti za Huduma zinapatikana kupitia API, lakini funguo zao za ufikiaji na siri hazipatikani baada ya kuundwa, kuongeza tabaka la ugumu kwa upatikanaji wa kudumu.
Scripti nyingine ya kutekeleza mbinu hii inaweza kupatikana hapa.
storage.objects.create
, storage.objects.delete
= Ruhusa za Kuandika Hifadhi
storage.objects.create
, storage.objects.delete
= Ruhusa za Kuandika HifadhiIli kuunda kitu kipya ndani ya bucket unahitaji storage.objects.create
na, kulingana na nyaraka, unahitaji pia storage.objects.delete
ili kubadilisha kitu kilichopo.
Kuvunja kwa kawaida kwa buckets ambapo unaweza kuandika kwenye cloud ni katika kesi ambapo bucket inahifadhi faili za seva za wavuti, unaweza kuwa na uwezo wa kuhifadhi msimbo mpya ambao utatumika na programu ya wavuti.
Composer
Composer ni Apache Airflow inayosimamiwa ndani ya GCP. Ina vipengele kadhaa vya kuvutia:
Inafanya kazi ndani ya GKE cluster, hivyo SA ambayo cluster inatumia inapatikana na msimbo unaotembea ndani ya Composer
Vipengele vyote vya mazingira ya composer (msimbo wa DAGs, plugins na data) vinahifadhiwa ndani ya bucket ya GCP. Ikiwa mshambuliaji ana ruhusa za kusoma na kuandika juu yake, anaweza kufuatilia bucket na wakati wowote DAG inaundwa au kusasishwa, kuwasilisha toleo lililo na backdoor ili mazingira ya composer yapate toleo lililo na backdoor kutoka hifadhi.
Unaweza kupata PoC ya shambulio hili kwenye repo: https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs
Cloud Functions
Msimbo wa Cloud Functions unahifadhiwa katika Hifadhi na wakati toleo jipya linaundwa msimbo unasukumwa kwenye bucket na kisha kontena jipya linajengwa kutoka kwa msimbo huu. Hivyo, kuandika upya msimbo kabla ya toleo jipya kujengwa kunawezekana kufanya kazi ya cloud ifanye msimbo usio na mipaka.
Unaweza kupata PoC ya shambulio hili kwenye repo: https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions
App Engine
Toleo za AppEngine zinaunda data ndani ya bucket kwa muundo wa jina: staging.<project-id>.appspot.com
. Ndani ya bucket hii, inawezekana kupata folda inayoitwa ae
ambayo itakuwa na folda kwa kila toleo la programu ya AppEngine na ndani ya folda hizi itawezekana kupata faili ya manifest.json
. Faili hii ina json yenye faili zote ambazo zinapaswa kutumika kuunda toleo maalum. Zaidi ya hayo, inawezekana kupata majina halisi ya faili, URL zao ndani ya bucket ya GCP (faili ndani ya bucket zilibadilisha majina yao kwa hash yao ya sha1) na hash ya sha1 ya kila faili.
Kumbuka kwamba haiwezekani kuchukua kabla ya bucket hii kwa sababu watumiaji wa GCP hawana mamlaka ya kuunda buckets wakitumia jina la kikoa appspot.com.
Hata hivyo, kwa ruhusa za kusoma na kuandika juu ya bucket hii, inawezekana kupandisha mamlaka kwa SA iliyoambatanishwa na toleo la App Engine kwa kufuatilia bucket na wakati wowote mabadiliko yanapofanywa (toleo jipya), kubadilisha toleo jipya haraka iwezekanavyo. Kwa njia hii, kontena linaloundwa kutoka kwa msimbo huu litatekeleza msimbo wa backdoored.
Shambulio lililotajwa linaweza kufanywa kwa njia nyingi tofauti, zote huanza kwa kufuatilia bucket ya staging.<project-id>.appspot.com
:
Pakia msimbo mpya kamili wa toleo la AppEngine kwenye bucket tofauti na inayopatikana na kuandaa faili ya
manifest.json
yenye jina jipya la bucket na hash za sha1 za hizo. Kisha, wakati toleo jipya linaundwa ndani ya bucket, unahitaji tu kubadilisha faili yamanifest.json
na kupakia ile mbaya.Pakia toleo lililobadilishwa la
requirements.txt
ambalo litatumia msimbo wa utegemezi mbaya na kusasisha faili yamanifest.json
na jina jipya la faili, URL na hash yake.Pakia faili iliyobadilishwa ya
main.py
auapp.yaml
ambayo itatekeleza msimbo mbaya na kusasisha faili yamanifest.json
na jina jipya la faili, URL na hash yake.
Unaweza kupata PoC ya shambulio hili kwenye repo: https://github.com/carlospolop/Monitor-Backdoor-AppEngine
GCR
Google Container Registry inahifadhi picha ndani ya buckets, ikiwa unaweza kuandika hizo buckets unaweza kuwa na uwezo wa kuhamasisha kwa upande ambapo hizo buckets zinatumika.
Bucket inayotumiwa na GCR itakuwa na URL inayofanana na
gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
(Subdomains za kiwango cha juu zimeelezwa hapa).
Huduma hii imeondolewa hivyo shambulio hili halifai tena. Zaidi ya hayo, Katalogi ya Vitu, huduma inayochukua nafasi hii, haihifadhi picha katika buckets.
Marejeo
Last updated