GCP - AppEngine 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)
Για περισσότερες πληροφορίες σχετικά με το App Engine, ελέγξτε:
GCP - App Engine Enumappengine.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
, αλλάξτε την τιμή του ριζικού κλειδιού σε κάτι όπως service: my-second-app
Δώστε του τουλάχιστον 10-15 λεπτά, αν δεν λειτουργήσει καλέστε deploy another of times και περιμένετε μερικά λεπτά.
Είναι δυνατό να υποδείξετε τον Λογαριασμό Υπηρεσίας που θα χρησιμοποιηθεί αλλά από προεπιλογή, χρησιμοποιείται ο προεπιλεγμένος SA του App Engine.
Η διεύθυνση URL της εφαρμογής είναι κάτι σαν https://<proj-name>.oa.r.appspot.com/
ή https://<service_name>-dot-<proj-name>.oa.r.appspot.com
Μπορεί να έχετε αρκετά δικαιώματα για να ενημερώσετε ένα AppEngine αλλά όχι για να δημιουργήσετε ένα νέο. Σε αυτή την περίπτωση, αυτός είναι ο τρόπος που μπορείτε να ενημερώσετε το τρέχον App Engine:
Αν έχετε ήδη παραβιάσει ένα AppEngine και έχετε την άδεια appengine.applications.update
και actAs πάνω στον λογαριασμό υπηρεσίας που χρησιμοποιείτε, μπορείτε να τροποποιήσετε τον λογαριασμό υπηρεσίας που χρησιμοποιείται από το AppEngine με:
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 σε App Engine instances τύπου flexible (όχι standard). Ορισμένες από τις list
και get
άδειες μπορεί να μην είναι πραγματικά απαραίτητες.
appengine.applications.update
, appengine.operations.get
Νομίζω ότι αυτό απλώς αλλάζει το background SA που θα χρησιμοποιήσει η Google για να ρυθμίσει τις εφαρμογές, οπότε δεν νομίζω ότι μπορείτε να το εκμεταλλευτείτε για να κλέψετε τον λογαριασμό υπηρεσίας.
appengine.versions.getFileContents
, appengine.versions.update
Δεν είμαι σίγουρος πώς να χρησιμοποιήσω αυτές τις άδειες ή αν είναι χρήσιμες (σημειώστε ότι όταν αλλάξετε τον κώδικα δημιουργείται μια νέα έκδοση, οπότε δεν ξέρω αν μπορείτε απλώς να ενημερώσετε τον κώδικα ή τον ρόλο IAM ενός, αλλά υποθέτω ότι θα πρέπει να μπορείτε, ίσως αλλάζοντας τον κώδικα μέσα στον κάδο??).
Όπως αναφέρθηκε, οι εκδόσεις appengine δημιουργούν κάποια δεδομένα μέσα σε έναν κάδο με τη μορφή ονόματος: staging.<project-id>.appspot.com
. Σημειώστε ότι δεν είναι δυνατή η προ-κατάληψη αυτού του κάδου επειδή οι χρήστες GCP δεν είναι εξουσιοδοτημένοι να δημιουργούν κάδους χρησιμοποιώντας το όνομα τομέα appspot.com
.
Ωστόσο, με πρόσβαση ανάγνωσης και εγγραφής σε αυτόν τον κάδο, είναι δυνατή η κλιμάκωση των δικαιωμάτων στον SA που είναι συνδεδεμένος με την έκδοση AppEngine παρακολουθώντας τον κάδο και κάθε φορά που γίνεται μια αλλαγή, να τροποποιείτε όσο το δυνατόν πιο γρήγορα τον κώδικα. Με αυτόν τον τρόπο, το κοντέινερ που δημιουργείται από αυτόν τον κώδικα θα εκτελεί τον κώδικα με backdoor.
Για περισσότερες πληροφορίες και μια PoC ελέγξτε τις σχετικές πληροφορίες από αυτή τη σελίδα:
GCP - Storage PrivescΑκόμα και αν το App Engine δημιουργεί εικόνες docker μέσα στο Artifact Registry. Δοκιμάστηκε ότι ακόμα και αν τροποποιήσετε την εικόνα μέσα σε αυτή την υπηρεσία και αφαιρέσετε την παρουσία App Engine (έτσι αναπτύσσεται μια νέα) ο εκτελούμενος κώδικας δεν αλλάζει. Είναι πιθανό ότι εκτελώντας μια επίθεση Race Condition όπως με τους κάδους μπορεί να είναι δυνατή η αντικατάσταση του εκτελούμενου κώδικα, αλλά αυτό δεν δοκιμάστηκε.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)