GCP - AppEngine Privesc
Last updated
Last updated
Για περισσότερες πληροφορίες σχετικά με το 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
Από προεπιλογή, το όνομα της υπηρεσίας της εφαρμογής θα είναι default
, και μπορεί να υπάρχει μόνο 1 παράδειγμα με το ίδιο όνομα.
Για να το αλλάξετε και να δημιουργήσετε μια δεύτερη εφαρμογή, στο app.yaml
, αλλάξτε την τιμή του κύριου κλειδιού σε κάτι όπως service: my-second-app
Δώστε του τουλάχιστον 10-15 λεπτά, αν δεν λειτουργεί καλέστε αναπτύξτε άλλες φορές και περιμένετε λίγα λεπτά.
Είναι δυνατόν να υποδείξετε τον Λογαριασμό Υπηρεσίας που θα χρησιμοποιηθεί, αλλά από προεπιλογή χρησιμοποιείται ο προεπιλεγμένος Λογαριασμός Υπηρεσίας του App Engine.
Η διεύθυνση URL της εφαρμογής είναι κάτι σαν https://<proj-name>.oa.r.appspot.com/
ή https://<service_name>-dot-<proj-name>.oa.r.appspot.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 στις περιπτώσεις του App Engine τύπου ευέλικτο (όχι τυπικό). Ορισμένες από τις άδειες list
και get
μπορεί να μην είναι πραγματικά απαραίτητες.
appengine.applications.update
, appengine.operations.get
Νομίζω ότι αυτό απλά αλλάζει το υπόβαθρο του χρήστη υπηρεσίας που θα χρησιμοποιήσει η Google για να ρυθμίσει τις εφαρμογές, οπότε δεν νομίζω ότι μπορείς να καταχραστείς αυτό για να κλέψεις τον λογαριασμό υπηρεσίας.
appengine.versions.getFileContents
, appengine.versions.update
Δεν είμαι σίγουρος πώς να χρησιμοποιήσω αυτές τις άδειες ή αν είναι χρήσιμες (σημειώστε ότι όταν αλλάζετε τον κώδικα, δημιουργείται μια νέα έκδοση, οπότε δεν ξέρω αν μπορείτε απλά να ενημερώσετε τον κώδικα ή τον ρόλο IAM ενός, αλλά υποθέτω ότι θα πρέπει να μπορείτε, ίσως αλλάζοντας τον κώδικα μέσα στο κάδο;;).
Ακόμα και με εγγραφή πρόσβασης στους κάδους όπου βρίσκεται ο πηγαίος κώδικας, δεν ήταν δυνατή η εκτέλεση αυθαίρετου κώδικα τροποποιώντας τον πηγαίο κώδικα και το manifest.json
.
Ίσως αν παρακολουθείτε τον κάδο και ανιχνεύσετε τη στιγμή που δημιουργείται μια νέα έκδοση και ανεβαίνει ο πηγαίος κώδικας και το manifest, μπορεί να είναι δυνατή η αλλαγή τους έτσι ώστε η νέα έκδοση να χρησιμοποιεί τα προσβεβλημένα;;
Φαίνεται επίσης ότι οι στρώσεις του container αποθηκεύονται στον κάδο, ίσως να αλλάξετε αυτές;