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

App Engine

Pour plus d’informations sur App Engine, consultez :

GCP - 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

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 ls

Download 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=@$PROJECT_ID.iam.gserviceaccount.com

</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 --service --version ```

appengine.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 :

GCP - Storage Privesc

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