GCP - AppEngine Privesc
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
App Engine
Für weitere Informationen über App Engine siehe:
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
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 benötigten Berechtigungen, um eine App mit gcloud
CLI zu deployen. Vielleicht könnten die get
und list
Berechtigungen vermieden werden.
Python-Codebeispiele findest du 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 eine Instanz mit demselben Namen geben.
Um dies zu ändern und eine zweite App zu erstellen, ändere im app.yaml
den Wert des Root-Schlüssels zu etwas wie service: my-second-app
Gib ihm mindestens 10-15 Minuten, wenn es nicht funktioniert, rufe deploy another of times auf und warte einige Minuten.
Es ist möglich, das zu verwendende Service Account anzugeben, aber standardmäßig wird das App Engine Standard-SA verwendet.
Die URL der Anwendung ist etwa https://<proj-name>.oa.r.appspot.com/
oder https://<service_name>-dot-<proj-name>.oa.r.appspot.com
Äquivalente Berechtigungen aktualisieren
Du könntest genügend Berechtigungen haben, um eine AppEngine zu aktualisieren, aber nicht, um eine neue zu erstellen. In diesem Fall kannst du die aktuelle App Engine wie folgt aktualisieren:
Wenn du bereits eine AppEngine kompromittiert hast und die Berechtigung appengine.applications.update
sowie actAs über das zu verwendende Servicekonto hast, könntest du das von AppEngine verwendete Servicekonto ändern mit:
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
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 per SSH in App Engine-Instanzen des Typs flexible (nicht standard) einzuloggen. Einige der list
- und get
-Berechtigungen könnten nicht wirklich benötigt werden.
appengine.applications.update
, appengine.operations.get
appengine.applications.update
, appengine.operations.get
Ich denke, dies ändert nur den Hintergrund-SA, den Google zur Einrichtung der Anwendungen verwendet, daher glaube ich nicht, dass man dies missbrauchen kann, um das Servicekonto zu stehlen.
appengine.versions.getFileContents
, appengine.versions.update
appengine.versions.getFileContents
, appengine.versions.update
Nicht sicher, wie man diese Berechtigungen verwendet oder ob sie nützlich sind (beachten Sie, dass bei einer Codeänderung eine neue Version erstellt wird, daher weiß ich nicht, ob Sie den Code oder die IAM-Rolle einer Version einfach aktualisieren können, aber ich denke, Sie sollten in der Lage sein, vielleicht den Code im Bucket zu ändern??).
Schreibzugriff auf die Buckets
Selbst mit Schreibzugriff auf die Buckets, in denen sich der Quellcode befindet, WAR es NICHT möglich, beliebigen Code durch Ändern des Quellcodes und der manifest.json
auszuführen.
Vielleicht, wenn Sie den Bucket überwachen und den Moment erkennen, in dem eine neue Version erstellt und der Quellcode und das Manifest hochgeladen werden, könnte es möglich sein, diese zu ändern, sodass die neue Version die mit einer Hintertür versehenen verwendet??
Es sieht auch so aus, als ob Container-Schichten im Bucket gespeichert werden, vielleicht diese ändern?
Lernen & üben AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Last updated