GCP - Storage Privesc
Skladištenje
Osnovne informacije:
GCP - Storage Enumstorage.objects.get
storage.objects.get
Ova dozvola vam omogućava da preuzimate fajlove smeštene unutar Cloud Storage-a. Ovo potencijalno može omogućiti eskalaciju privilegija jer se u nekim situacijama osetljive informacije čuvaju tamo. Osim toga, neke GCP usluge čuvaju svoje informacije u kantama (buckets):
GCP Composer: Kada kreirate Composer okruženje, kod svih DAG-ova će biti sačuvan unutar kante. Ovi zadaci mogu sadržati zanimljive informacije unutar svog koda.
GCR (Container Registry): Slika kontejnera se čuva unutar kanti, što znači da ako možete čitati kante, moći ćete da preuzmete slike i tražite 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 modifikujete dozvole sa ovom dozvolom pogledajte ovu stranicu:
GCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
storage.hmacKeys.create
"Interoperabilnost" funkcija Cloud Storage-a, dizajnirana za interakcije između oblaka kao što je sa 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 escalira privilegije unutar Cloud Storage-a. Dok su HMAC ključevi povezani sa korisnicima dostupni samo putem web konzole, kako pristupni tako i tajni ključevi ostaju zauvek dostupni, omogućavajući potencijalni pristup rezervnom skladištu. S druge strane, HMAC ključevi povezani sa Servisnim Nalogom su dostupni putem API-ja, ali njihovi pristupni i tajni ključevi nisu dostupni nakon kreiranja, dodajući sloj kompleksnosti za kontinuirani pristup.
Drugi skript za eksploataciju ovog metoda 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, potrebno je da imate storage.objects.create
, a prema dokumentaciji, takođe je potrebno imati storage.objects.delete
da biste modifikovali postojeći objekat.
Veoma česta 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 upravljan unutar GCP. Ima nekoliko interesantnih funkcija:
Pokreće se unutar GKE klastera, tako da je SA koji klaster koristi dostupan kodu koji se izvršava unutar Composera
Čuva kod u kanti, stoga, svako sa dozvolom za pisanje nad tom kantom će moći da promeni/doda DGA kod (kod koji će Apache Airflow izvršiti) Zatim, ako imate dozvolu 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, tako da je moguće izvršiti proizvoljan kod preko prepisivanja.
App Engine
Izvorni kod App Engine-a se čuva u kantama, prepisanjem koda moguće je izvršiti proizvoljan kod. OVO NIJE MOGUĆE
Izgleda da su slojevi kontejnera čuvani u kanti, možda promenom tih?
GCR
Google Container Registry čuva slike unutar kanti, ako možete pisati u tim kantama možda ćete moći da lateralno pređete tamo gde se te kante izvršavaju.
Kanta koju koristi GCR će imati URL sličan
gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
(Nivo poddomena je naveden ovde).
Reference
Last updated