GCP - AppEngine Privesc
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
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 et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks Cloud

