GCP - AppEngine Privesc
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
App Engine
Pour plus dâinformations sur App Engine, consultez :
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
Ce sont les permissions nĂ©cessaires pour dĂ©ployer une App en utilisant la CLI gcloud. Peut-ĂȘtre que les permissions get et list pourraient ĂȘtre Ă©vitĂ©es.
Vous pouvez trouver des exemples de code python dans https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
Par dĂ©faut, le nom du service App sera default, et il ne peut y avoir quâune seule instance portant ce nom.
Pour le changer et créer une seconde App, dans app.yaml, changez la valeur de la clé racine en quelque chose comme service: my-second-app
Déployer une application App Engine
```bash cd python-docs-samples/appengine/flexible/hello_world gcloud app deploy #Upload and start application inside the folder ```Attendez au moins 10â15 minutes. Si cela ne fonctionne pas, relancez un dĂ©ploiement plusieurs fois et attendez quelques minutes.
Note
Il est possible dâindiquer le Service Account Ă utiliser mais par dĂ©faut, le SA par dĂ©faut dâApp Engine est utilisĂ©.
LâURL de lâapplication ressemble Ă https://<proj-name>.oa.r.appspot.com/ ou https://<service_name>-dot-<proj-name>.oa.r.appspot.com
Mettre à jour les permissions équivalentes
Vous pourriez avoir suffisamment de permissions pour mettre Ă jour un App Engine mais pas pour en crĂ©er un nouveau. Dans ce cas, voici comment vous pourriez mettre Ă jour lâApp Engine actuel :
Mettre Ă jour l'application App Engine existante
```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>
Si vous avez déjà compromis une application AppEngine et que vous disposez de l'autorisation **`appengine.applications.update`** et de **actAs** sur le compte de service à utiliser, vous pouvez modifier le compte de service utilisé par AppEngine avec :
<details>
<summary>Mettre Ă jour le compte de service App Engine</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
Avec ces permissions, il est possible de se connecter via ssh sur des instances App Engine de type flexible (pas standard). Certaines des permissions list et get pourraient ne pas ĂȘtre rĂ©ellement nĂ©cessaires.
Se connecter en SSH Ă une instance App Engine
```bash gcloud app instances ssh --serviceappengine.applications.update, appengine.operations.get
Je pense que cela se contente de changer le SA en arriĂšre-plan que google utilisera pour configurer les applications, donc je ne pense pas que vous puissiez abuser de cela pour voler le service account.
Mettre Ă jour le service account de l'application
```bash gcloud app update --service-account=appengine.versions.getFileContents, appengine.versions.update
Je ne suis pas sĂ»r de la façon dâutiliser ces permissions ni de leur utilitĂ© (notez que lorsque vous changez le code une nouvelle version est créée, donc je ne sais pas si vous pouvez simplement mettre Ă jour le code ou le rĂŽle IAM dâune version, mais jâimagine que vous devriez pouvoir le faire, peutâĂȘtre en changeant le code Ă lâintĂ©rieur du bucket ?).
AccÚs en écriture aux buckets
Comme mentionnĂ©, les versions dâappengine gĂ©nĂšrent des donnĂ©es dans un bucket au nom formatĂ© : staging.<project-id>.appspot.com. Notez quâil nâest pas possible de prĂ©-saisir ce bucket car les utilisateurs GCP ne sont pas autorisĂ©s Ă crĂ©er des buckets utilisant le domaine appspot.com.
Cependant, avec un accĂšs lecture & Ă©criture sur ce bucket, il est possible dâescalader les privilĂšges vers le SA attachĂ© Ă la version AppEngine en surveillant le bucket et, dĂšs quâun changement est effectuĂ©, en modifiant le code aussi rapidement que possible. Ainsi, le conteneur créé Ă partir de ce code exĂ©cutera le backdoored code.
Pour plus dâinformations et une PoC, consultez les informations pertinentes de cette page :
AccÚs en écriture à Artifact Registry
MĂȘme si App Engine crĂ©e des images docker dans Artifact Registry, il a Ă©tĂ© vĂ©rifiĂ© que mĂȘme si vous modifiez lâimage dans ce service et supprimez lâinstance App Engine (de sorte quâune nouvelle soit dĂ©ployĂ©e), le code exĂ©cutĂ© ne change pas.
Il est possible que, en menant une Race Condition attack comme avec les buckets, il soit possible dâĂ©craser le code exĂ©cutĂ©, mais cela nâa pas Ă©tĂ© testĂ©.
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

