GCP - AppEngine Privesc
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
App Engine
Για περισσότερες πληροφορίες σχετικά με το App Engine, δείτε:
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
Αυτά είναι τα απαιτούμενα δικαιώματα για να αναπτύξετε μια εφαρμογή χρησιμοποιώντας το gcloud cli. Ίσως τα get και list να μπορούν να αποφευχθούν.
Μπορείτε να βρείτε παραδείγματα κώδικα python στο https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
Εξ ορισμού, το όνομα της υπηρεσίας App θα είναι default, και μπορεί να υπάρχει μόνο 1 instance με το ίδιο όνομα.
Για να το αλλάξετε και να δημιουργήσετε μια δεύτερη εφαρμογή, στο app.yaml, αλλάξτε την τιμή του root key σε κάτι σαν service: my-second-app
Ανάπτυξη εφαρμογής App Engine
```bash cd python-docs-samples/appengine/flexible/hello_world gcloud app deploy #Upload and start application inside the folder ```Δώστε του τουλάχιστον 10-15min, αν δεν λειτουργήσει κάντε κλήση deploy another of times και περιμένετε λίγα λεπτά.
Note
Είναι δυνατό να υποδείξετε ποιο Service Account θα χρησιμοποιηθεί αλλά εξ ορισμού χρησιμοποιείται το App Engine default SA.
Η διεύθυνση URL της εφαρμογής είναι κάτι σαν https://<proj-name>.oa.r.appspot.com/ ή https://<service_name>-dot-<proj-name>.oa.r.appspot.com
Ενημέρωση αντίστοιχων δικαιωμάτων
Μπορεί να έχετε επαρκή δικαιώματα για να ενημερώσετε ένα AppEngine αλλά όχι για να δημιουργήσετε νέο. Σε αυτήν την περίπτωση, έτσι μπορείτε να ενημερώσετε το τρέχον App Engine:
Ενημέρωση υπάρχουσας εφαρμογής App Engine
```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>
Αν έχετε **ήδη παραβιάσει ένα AppEngine** και έχετε την άδεια **`appengine.applications.update`** και **actAs** πάνω στον service account που θα χρησιμοποιήσετε, μπορείτε να τροποποιήσετε τον service account που χρησιμοποιεί το AppEngine με:
<details>
<summary>Ενημέρωση AppEngine service account</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
Με αυτά τα δικαιώματα, είναι δυνατό να συνδεθείτε μέσω ssh σε instances του App Engine τύπου flexible (όχι standard). Κάποια από τα list και get δικαιώματα ενδέχεται να μην είναι πραγματικά απαραίτητα.
SSH into App Engine instance
```bash gcloud app instances ssh --serviceappengine.applications.update, appengine.operations.get
Νομίζω ότι αυτό απλώς αλλάζει το background SA που θα χρησιμοποιήσει η google για να ρυθμίσει τις εφαρμογές, οπότε δεν νομίζω ότι μπορείς να το καταχραστείς για να κλέψεις το service account.
Update application service account
```bash gcloud app update --service-account=appengine.versions.getFileContents, appengine.versions.update
Δεν είμαι σίγουρος πώς να χρησιμοποιήσω αυτά τα permissions ή αν είναι χρήσιμα (σημειώστε ότι όταν αλλάζετε τον code δημιουργείται μια νέα έκδοση, οπότε δεν ξέρω αν μπορείτε απλά να ενημερώσετε τον code ή τον IAM role μιας έκδοσης, αλλά υποθέτω ότι θα πρέπει να μπορείτε, ίσως αλλάζοντας τον code μέσα στο bucket).
Write Access over the buckets
Όπως αναφέρθηκε οι appengine versions δημιουργούν κάποια δεδομένα μέσα σε ένα bucket με όνομα στη μορφή: staging.<project-id>.appspot.com. Σημειώστε ότι δεν είναι δυνατό να αναληφθεί προ-emptively αυτό το bucket επειδή οι χρήστες GCP δεν έχουν εξουσιοδότηση να δημιουργούν buckets χρησιμοποιώντας το domain appspot.com.
Ωστόσο, με read & write access σε αυτό το bucket, είναι δυνατό να αναβαθμίσετε προνόμια στο SA που είναι συνδεδεμένο με την AppEngine version παρακολουθώντας το bucket και κάθε φορά που γίνεται κάποια αλλαγή, να τροποποιείτε όσο το δυνατόν πιο γρήγορα τον code. Έτσι, το container που δημιουργείται από αυτόν τον code θα execute the backdoored code.
For more information and a PoC check the relevant information from this page:
Write Access over the Artifact Registry
Παρόλο που το App Engine δημιουργεί docker images μέσα στο Artifact Registry. Δοκιμάστηκε ότι even if you modify the image inside this service και καταργήσετε το App Engine instance (οπότε αναπτύσσεται ένα καινούργιο) ο code executed doesn’t change.
Μπορεί να είναι πιθανό ότι εκτελώντας μια Race Condition attack όπως με τα buckets μπορεί να είναι δυνατό να αντικαταστήσετε τον εκτελούμενο code, αλλά αυτό δεν δοκιμάστηκε.
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

