GCP - AppEngine Privesc
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
App Engine
Für mehr Informationen über App Engine siehe:
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
Das sind die benötigten Berechtigungen, um eine App mit dem gcloud CLI bereitzustellen. Möglicherweise können die get- und list-Berechtigungen entfallen.
Sie finden Python-Codebeispiele unter https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
Standardmäßig ist der Name des App-Services default, und es kann nur 1 Instanz mit demselben Namen geben.
Um ihn zu ändern und eine zweite App zu erstellen, ändern Sie in app.yaml den Wert des Root-Schlüssels zu etwas wie service: my-second-app
App Engine-Anwendung bereitstellen
```bash cd python-docs-samples/appengine/flexible/hello_world gcloud app deploy #Upload and start application inside the folder ```Gib ihm mindestens 10–15 Minuten; wenn es nicht funktioniert, rufe deploy another of times auf und warte einige Minuten.
Note
Es ist möglich, das zu verwendende Service Account anzugeben, aber standardmäßig wird das App Engine default 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
Entsprechende Berechtigungen aktualisieren
Möglicherweise hast du genügend Berechtigungen, um eine AppEngine zu aktualisieren, aber nicht, um eine neue zu erstellen. In diesem Fall kannst du das aktuelle App Engine wie folgt aktualisieren:
Bestehende App Engine-Anwendung aktualisieren
```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>
Wenn Sie bereits eine AppEngine kompromittiert haben und die Berechtigung **`appengine.applications.update`** sowie **actAs** für das zu verwendende Servicekonto besitzen, können Sie das von AppEngine verwendete Servicekonto wie folgt ändern:
<details>
<summary>App Engine-Servicekonto aktualisieren</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
Mit diesen Berechtigungen ist es möglich, sich per ssh in App Engine instances einzuloggen vom Typ flexible (nicht standard). Einige der list und get Berechtigungen könnten nicht wirklich benötigt werden.
SSH into App Engine instance
```bash gcloud app instances ssh --serviceappengine.applications.update, appengine.operations.get
Ich denke, das ändert nur das Hintergrund-SA, das google zum Einrichten der Anwendungen verwenden wird; daher glaube ich nicht, dass man das missbrauchen kann, um das Service Account zu stehlen.
Service Account der Anwendung aktualisieren
```bash gcloud app update --service-account=appengine.versions.getFileContents, appengine.versions.update
Ich bin mir nicht sicher, wie man diese Berechtigungen verwendet oder ob sie nützlich sind (beachte, dass beim Ändern des Codes eine neue Version erstellt wird, daher weiß ich nicht, ob man einfach den Code oder die IAM-Rolle einer Version aktualisieren kann, aber ich nehme an, dass das möglich sein sollte — vielleicht durch Ändern des Codes im Bucket??).
Write Access over the buckets
Wie erwähnt erzeugen die appengine versions einige Daten in einem Bucket mit dem Format: staging.<project-id>.appspot.com. Beachte, dass es nicht möglich ist, diesen Bucket im Voraus zu übernehmen, da GCP-Benutzer nicht berechtigt sind, Buckets mit dem Domainnamen appspot.com zu erstellen.
Mit Lese- und Schreibzugriff auf diesen Bucket ist es jedoch möglich, Rechte auf das an die AppEngine-Version angehängte SA zu eskalieren, indem man den Bucket überwacht und bei jeder Änderung den Code so schnell wie möglich anpasst. Auf diese Weise wird der Container, der aus diesem Code erstellt wird, execute the backdoored code.
Für mehr Informationen und einen PoC siehe die relevanten Informationen auf dieser Seite:
Write Access over the Artifact Registry
Obwohl App Engine docker images in der Artifact Registry erstellt, wurde getestet, dass selbst wenn du das Image in diesem Service veränderst und die App Engine-Instanz entfernst (wodurch eine neue bereitgestellt wird), sich der ausgeführte Code nicht ändert.
Es könnte möglich sein, dass durch eine Race Condition attack wie bei den Buckets der ausgeführte Code überschrieben werden kann, aber das wurde nicht getestet.
Tip
Lernen & üben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
HackTricks Cloud

