GCP - Storage Privesc
Skladištenje
Osnovne informacije:
pageGCP - Storage Enumstorage.objects.get
storage.objects.get
Ova dozvola vam omogućava da preuzimate fajlove koji su smešteni u Cloud Storage-u. Ovo potencijalno omogućava eskalaciju privilegija jer se u nekim slučajevima osetljive informacije čuvaju tamo. Osim toga, neke GCP usluge čuvaju svoje informacije u kantama:
GCP Composer: Kada kreirate Composer okruženje, kod svih DAG-ova će biti sačuvan u kanti. Ove zadatke mogu sadržati zanimljive informacije unutar svog koda.
GCR (Container Registry): Slika kontejnera se čuva u kantama, što znači da ako možete čitati kante, moći ćete preuzeti slike i tražiti curenja i/ili izvorni kod.
storage.objects.setIamPolicy
storage.objects.setIamPolicy
Možete sebi dati dozvolu da zloupotrebite bilo koji od prethodnih scenarija u ovoj sekciji.
storage.buckets.setIamPolicy
storage.buckets.setIamPolicy
Za primer kako da menjate dozvole sa ovom dozvolom, pogledajte ovu stranicu:
pageGCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
storage.hmacKeys.create
"Interoperabilna" funkcionalnost Cloud Storage-a, namenjena za interakcije između različitih oblaka kao što je AWS S3, uključuje kreiranje HMAC ključeva za servisne naloge i korisnike. Napadač može iskoristiti ovo tako što će generisati HMAC ključ za servisni nalog sa povišenim privilegijama, čime će povećati privilegije unutar Cloud Storage-a. Dok se HMAC ključevi povezani sa korisnicima mogu dobiti samo putem veb konzole, pristupni i tajni ključevi ostaju uvek dostupni, što omogućava potencijalni pristup rezervnom skladištu. Sa druge strane, HMAC ključevi povezani sa servisnim nalozima su dostupni putem API-ja, ali njihovi pristupni i tajni ključevi nisu dostupni nakon kreiranja, što dodaje složenost za kontinuirani pristup.
Još jedan skript za iskorišćavanje ove metode može se pronaći ovde.
storage.objects.create
, storage.objects.delete
= Dozvole za pisanje u skladištu
storage.objects.create
, storage.objects.delete
= Dozvole za pisanje u skladištuDa biste kreirali novi objekat unutar kante, potrebne su vam dozvole storage.objects.create
, a prema dokumentaciji, takođe vam je potrebna dozvola storage.objects.delete
da biste izmenili postojeći objekat.
Veoma uobičajena eksploatacija kanti u kojima možete pisati u oblaku je u slučaju kada kanta čuva fajlove veb servera, možda ćete moći da sačuvate novi kod koji će biti korišćen od strane veb aplikacije.
Composer
Composer je Apache Airflow koji se upravlja unutar GCP-a. Ima nekoliko interesantnih funkcionalnosti:
Pokreće se unutar GKE klastera, tako da je SA koji klaster koristi dostupan kod koji se izvršava unutar Composera
Čuva kod u kanti, stoga će svako ko ima pristup za pisanje nad tom kantom moći da promeni/doda DGA kod (kod koji će Apache Airflow izvršiti) Dakle, ako imate pristup za pisanje nad kantom koju Composer koristi za čuvanje koda, možete privesc na SA koji se izvršava u GKE klasteru.
Cloud Functions
Kod Cloud Functions-a se čuva u Skladištu, pa je moguće izvršiti proizvoljni kod preko njega.
App Engine
Izvorni kod App Engine-a se čuva u kantama, prepisivanjem koda moguće je izvršiti proizvoljni kod. OVO NIJE MOGUĆE
Izgleda da su slojevi kontejnera smešteni u kanti, možda ih je moguće promeniti?
GCR
Google Container Registry čuva slike unutar kanti, ako možete pisati u tim kantama, možda ćete moći da lateralno pređete na mesto gde se te kante izvršavaju.
Kanta koju koristi GCR ima URL sličan
gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
(Najviši nivo poddomena je naveden ovde).
Reference
Last updated