GCP - Storage 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)
Osnovne informacije:
GCP - Storage Enumstorage.objects.get
Ova dozvola vam omogućava da preuzmete datoteke smeštene unutar Cloud Storage. Ovo potencijalno može omogućiti eskalaciju privilegija jer se u nekim slučajevima osetljive informacije čuvaju tamo. Štaviše, neke GCP usluge čuvaju svoje informacije u kanticama:
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 da čitate kante, moći ćete da preuzmete slike i tražite curenja i/ili izvorni kod.
storage.objects.setIamPolicy
Možete sebi dati dozvolu da zloupotrebljavate bilo koji od prethodnih scenarija u ovoj sekciji.
storage.buckets.setIamPolicy
Za primer kako da modifikujete dozvole sa ovom dozvolom, proverite ovu stranicu:
GCP - Public Buckets Privilege Escalationstorage.hmacKeys.create
Funkcija "interoperabilnosti" Cloud Storage-a, dizajnirana za interakcije između različitih cloud-a 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 se escalira privilegije unutar Cloud Storage-a. Dok su HMAC ključevi povezani sa korisnicima dostupni samo putem web konzole, i pristupni i tajni ključevi ostaju večno dostupni, omogućavajući potencijalni pristup skladištu za rezervne kopije. S 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, dodajući sloj složenosti za kontinuirani pristup.
Još jedan exploit skript za ovu metodu može se naći ovde.
storage.objects.create
, storage.objects.delete
= Dozvole za pisanje u skladištuDa biste napravili novi objekat unutar bucket-a, potrebna vam je storage.objects.create
i, prema dokumentaciji, takođe vam je potrebna storage.objects.delete
da biste izmenili postojeći objekat.
Veoma česta eksploatacija bucket-a u kojima možete pisati u cloud je u slučaju kada bucket čuva datoteke web servera, možda ćete moći da sačuvate novi kod koji će se koristiti u web aplikaciji.
Composer je Apache Airflow koji se upravlja unutar GCP-a. Ima nekoliko zanimljivih karakteristika:
Pokreće se unutar GKE klastera, tako da je SA koji klaster koristi dostupan kodu koji se izvršava unutar Composera
Svi komponenti okruženja Composera (kod DAG-ova, dodaci i podaci) se čuvaju unutar GCP bucket-a. Ako napadač ima dozvole za čitanje i pisanje nad njim, mogao bi da prati bucket i kada god se DAG kreira ili ažurira, pošalje verziju sa backdoor-om tako da okruženje Composera preuzme verziju sa backdoor-om iz skladišta.
Možete pronaći PoC ovog napada u repozitorijumu: https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs
Kod Cloud Functions se čuva u Storage-u i kada se kreira nova verzija, kod se šalje u bucket, a zatim se novi kontejner gradi iz ovog koda. Stoga, prepisivanje koda pre nego što se nova verzija izgradi omogućava izvršavanje proizvoljnog koda u cloud funkciji.
Možete pronaći PoC ovog napada u repozitorijumu: https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions
Verzije AppEngine-a generišu neke podatke unutar bucket-a u formatu imena: staging.<project-id>.appspot.com
. Unutar ovog bucket-a, moguće je pronaći folder pod nazivom ae
koji će sadržati folder po verziji AppEngine aplikacije, a unutar ovih foldera biće moguće pronaći datoteku manifest.json
. Ova datoteka sadrži json sa svim datotekama koje moraju biti korišćene za kreiranje specifične verzije. Štaviše, moguće je pronaći prava imena datoteka, URL do njih unutar GCP bucket-a (datoteke unutar bucket-a su promenile svoje ime u njihov sha1 hash) i sha1 hash svake datoteke.
Napomena: nije moguće unapred preuzeti ovaj bucket jer GCP korisnici nisu ovlašćeni da generišu buckete koristeći naziv domena appspot.com.
Međutim, sa pristupom za čitanje i pisanje nad ovim bucket-om, moguće je eskalirati privilegije na SA vezanu za verziju App Engine-a praćenjem bucket-a i svaki put kada se izvrši promena (nova verzija), izmeniti novu verziju što je brže moguće. Na ovaj način, kontejner koji se kreira iz ovog koda će izvršiti kod sa backdoor-om.
Pomenuti napad može se izvesti na mnogo različitih načina, svi počinju praćenjem staging.<project-id>.appspot.com
bucket-a:
Učitajte kompletan novi kod verzije AppEngine-a u drugi i dostupni bucket i pripremite manifest.json
datoteku sa novim imenom bucket-a i sha1 hash-evima. Zatim, kada se nova verzija kreira unutar bucket-a, samo treba da izmenite manifest.json
datoteku i učitate zlonamernu.
Učitajte izmenjenu verziju requirements.txt
koja će koristiti kod zlonamernih zavisnosti i ažurirati manifest.json
datoteku sa novim imenom datoteke, URL-om i hash-om.
Učitajte izmenjenu main.py
ili app.yaml
datoteku koja će izvršiti zlonamerni kod i ažurirati manifest.json
datoteku sa novim imenom datoteke, URL-om i hash-om.
Možete pronaći PoC ovog napada u repozitorijumu: https://github.com/carlospolop/Monitor-Backdoor-AppEngine
Google Container Registry čuva slike unutar bucket-a, ako možete pisati u te buckete, možda ćete moći da napravite lateralni pomak do mesta gde se ti bucketi koriste.
Bucket koji koristi GCR će imati URL sličan gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com
(Najviši nivo poddomena je specificiran ovde).
Ova usluga je ukinuta, tako da ovaj napad više nije koristan. Štaviše, Artifact Registry, usluga koja zamenjuje ovu, ne čuva slike u bucket-ima.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)