GCP - AppEngine Privesc

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

App Engine

Für weitere Informationen zu App Engine siehe:

pageGCP - App Engine Enum

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

Dies sind die erforderlichen Berechtigungen, um eine App mit dem gcloud-CLI bereitzustellen. Möglicherweise können die Berechtigungen get und list vermieden werden.

Sie finden Python-Codebeispiele unter https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine

Standardmäßig wird der Name des App-Dienstes default sein, und es kann nur 1 Instanz mit demselben Namen geben. Um dies zu ändern und eine zweite App zu erstellen, ändern Sie in app.yaml den Wert des Wurzelschlüssels auf etwas wie service: my-second-app

cd python-docs-samples/appengine/flexible/hello_world
gcloud app deploy #Upload and start application inside the folder

Geben Sie ihm mindestens 10-15 Minuten, wenn es nicht funktioniert, rufen Sie ein weiteres Mal bereitstellen auf und warten Sie einige Minuten.

Es ist möglich, den zu verwendenden Dienstkontos anzugeben, aber standardmäßig wird das Standard-SA von App Engine verwendet.

Die URL der Anwendung lautet etwas wie https://<proj-name>.oa.r.appspot.com/ oder 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

Mit diesen Berechtigungen ist es möglich, sich über SSH bei App Engine-Instanzen des Typs flexible (nicht Standard) anzumelden. Einige der Berechtigungen für list und get sind möglicherweise nicht wirklich erforderlich.

gcloud app instances ssh --service <app-name> --version <version-id> <ID>

appengine.applications.update, appengine.operations.get

Ich denke, dies ändert nur den Hintergrunddienst, den Google zur Einrichtung der Anwendungen verwenden wird, daher glaube ich nicht, dass Sie dies missbrauchen können, um das Dienstkontos zu stehlen.

gcloud app update --service-account=<sa_email>

appengine.versions.getFileContents, appengine.versions.update

Es ist nicht klar, wie man diese Berechtigungen verwendet oder ob sie nützlich sind (beachten Sie, dass beim Ändern des Codes eine neue Version erstellt wird, daher weiß ich nicht, ob Sie einfach den Code oder die IAM-Rolle eines, aber ich denke, Sie sollten in der Lage sein, möglicherweise den Code innerhalb des Buckets zu ändern??).

Schreibzugriff auf die Buckets

Auch mit Schreibzugriff auf die Buckets, in denen sich der Quellcode befindet, war es NICHT möglich, beliebigen Code auszuführen, indem der Quellcode und die manifest.json geändert wurden. Vielleicht ist es möglich, sie zu ändern, damit die neue Version die manipulierten verwendet, wenn Sie den Bucket überwachen und den Zeitpunkt erkennen, an dem eine neue Version erstellt und der Quellcode und das Manifest hochgeladen werden??

Es scheint auch, dass Container-Layer im Bucket gespeichert sind, vielleicht diese ändern?

Last updated