GCP - AppEngine Privesc
Tip
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)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
App Engine
Za više informacija o App Engine pogledajte:
appengine.applications.get, appengine.instances.get, appengine.instances.list, appengine.operations.get, appengine.operations.list, appengine.services.get, appengine.services.list, appengine.versions.create, appengine.versions.get, appengine.versions.list, cloudbuild.builds.get,iam.serviceAccounts.actAs, resourcemanager.projects.get, storage.objects.create, storage.objects.list
Ovo su potrebne dozvole za postavljanje aplikacije korišćenjem gcloud CLI. Možda se get i list dozvole mogu izbeći.
Možete pronaći Python primere koda na https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
Po defaultu, ime App servisa biće default, i može postojati samo jedna instanca sa istim imenom.
Da biste to promenili i kreirali drugu aplikaciju, u app.yaml promenite vrednost root ključa u nešto poput service: my-second-app
Postavljanje App Engine aplikacije
```bash cd python-docs-samples/appengine/flexible/hello_world gcloud app deploy #Upload and start application inside the folder ```Sačekajte najmanje 10–15 minuta; ako ne uspe, pokušajte ponovo sa deploy another of times i sačekajte još nekoliko minuta.
Note
Moguće je naznačiti Service Account koji će se koristiti, ali po defaultu se koristi App Engine default SA.
URL aplikacije izgleda otprilike kao https://<proj-name>.oa.r.appspot.com/ ili https://<service_name>-dot-<proj-name>.oa.r.appspot.com
Ažuriranje ekvivalentnih dozvola
Možda imate dovoljno dozvola da ažurirate AppEngine, ali ne i da kreirate novi. U tom slučaju, ovako možete ažurirati trenutni App Engine:
Ažurirajte postojeću App Engine aplikaciju
```bash # Find the code of the App Engine in the buckets gsutil lsDownload code
mkdir /tmp/appengine2 cd /tmp/appengine2
In this case it was found in this custom bucket but you could also use the
buckets generated when the App Engine is created
gsutil cp gs://appengine-lab-1-gcp-labs-4t04m0i6-3a97003354979ef6/labs_appengine_1_premissions_privesc.zip . unzip labs_appengine_1_premissions_privesc.zip
Now modify the code..
If you don’t have an app.yaml, create one like:
cat >> app.yaml <<EOF runtime: python312
entrypoint: gunicorn -b :$PORT main:app
env_variables: A_VARIABLE: “value” EOF
Deploy the changes
gcloud app deploy
Update the SA if you need it (and if you have actas permissions)
gcloud app update –service-account=
</details>
Ako ste već kompromitovali AppEngine i imate dozvolu **`appengine.applications.update`** i **actAs** nad servisnim nalogom koji želite da koristite, možete izmeniti servisni nalog koji AppEngine koristi pomoću:
<details>
<summary>Ažurirajte App Engine servisni nalog</summary>
```bash
gcloud app update --service-account=<sa>@$PROJECT_ID.iam.gserviceaccount.com
appengine.instances.enableDebug, appengine.instances.get, appengine.instances.list, appengine.operations.get, appengine.services.get, appengine.services.list, appengine.versions.get, appengine.versions.list, compute.projects.get
Sa ovim dozvolama moguće je prijaviti se putem ssh-a na App Engine instance tipa flexible (ne standard). Neke od list i get dozvola moguće da nisu zaista potrebne.
SSH u App Engine instancu
```bash gcloud app instances ssh --serviceappengine.applications.update, appengine.operations.get
Mislim da ovo samo menja pozadinski servisni nalog (SA) koji će Google koristiti za podešavanje aplikacija, tako da ne verujem da se ovim možeš zloupotrebiti da ukradeš servisni nalog.
Ažuriraj servisni nalog aplikacije
```bash gcloud app update --service-account=appengine.versions.getFileContents, appengine.versions.update
Nisam siguran kako koristiti ove permisije ili da li su korisne (imajte na umu da kada promenite kod kreira se nova verzija, tako da ne znam da li možete jednostavno ažurirati kod ili IAM rolu postojeće verzije, ali pretpostavljam da bi trebalo da bude moguće — možda menjanjem koda unutar bucketa??).
Pristup za pisanje nad bucket-ovima
Kao što je pomenuto, appengine verzije generišu neke podatke unutar bucketa sa imenom u formatu: staging.<project-id>.appspot.com. Imajte na umu da nije moguće preuzeti ovaj bucket unapred jer GCP korisnici nisu ovlašćeni da kreiraju buckete koristeći domen appspot.com.
Međutim, sa pristupom za čitanje i pisanje nad ovim bucket-om, moguće je eskalirati privilegije na SA pridružen AppEngine verziji nadgledanjem bucketa i svaki put kada se izvrši izmena, što brže izmeniti kod. Na ovaj način, kontejner koji se kreira iz tog koda će execute the backdoored code.
Za više informacija i a PoC pogledajte relevantne informacije na ovoj stranici:
Pristup za pisanje u Artifact Registry
Iako App Engine kreira docker images u Artifact Registry, testirano je da čak i ako izmenite image unutar ove usluge i uklonite App Engine instance (tako da se rasporedi nova), izvršeni kod se ne menja.
Moguće je da izvođenjem Race Condition attack (kao kod bucketa) može biti moguće prepisati izvršeni kod, ali ovo nije testirano.
Tip
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)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks Cloud

