GCP - AppEngine Privesc

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

App Engine

Aby uzyskać więcej informacji na temat App Engine, sprawdź:

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

To są wymagane uprawnienia do wdrożenia aplikacji za pomocą gcloud cli. Być może uprawnienia get i list mogą być uniknięte.

Możesz znaleźć przykłady kodu w języku Python na stronie https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine

Domyślnie nazwa usługi aplikacji będzie default, i może istnieć tylko 1 instancja o tej samej nazwie. Aby to zmienić i utworzyć drugą aplikację, w pliku app.yaml, zmień wartość klucza głównego na coś w rodzaju service: my-second-app

cd python-docs-samples/appengine/flexible/hello_world
gcloud app deploy #Upload and start application inside the folder

Daj mu przynajmniej 10-15 minut, jeśli to nie zadziała, uruchom ponownie kilka razy i poczekaj kilka minut.

Można wskazać Konto Usługi do użycia, ale domyślnie używane jest domyślne Konto Usługi App Engine.

Adres URL aplikacji wygląda na coś w rodzaju https://<proj-name>.oa.r.appspot.com/ lub https://<service_name>-dot-<proj-name>.oa.r.appspot.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

Dzięki tym uprawnieniom jest możliwe zalogowanie się za pomocą ssh w instancjach App Engine typu flexible (nie standardowych). Niektóre uprawnienia list i get może nie być naprawdę konieczne.

gcloud app instances ssh --service <app-name> --version <version-id> <ID>

appengine.applications.update, appengine.operations.get

Myślę, że to po prostu zmienia tło SA, które Google będzie używać do konfiguracji aplikacji, więc nie sądzę, że można to wykorzystać do kradzieży konta usługi.

```bash gcloud app update --service-account= ``` ### `appengine.versions.getFileContents`, `appengine.versions.update`

Nie jestem pewien, jak korzystać z tych uprawnień ani czy są one przydatne (zauważ, że gdy zmieniasz kod, tworzona jest nowa wersja, więc nie wiem, czy można po prostu zaktualizować kod lub rolę IAM jednej, ale przypuszczam, że powinieneś móc, być może zmieniając kod wewnątrz kubełka??).

Dostęp do zapisu w kubełkach

Nawet mając dostęp do zapisu w kubełkach, w których znajduje się kod źródłowy NIE BYŁO możliwe wykonanie dowolnego kodu poprzez modyfikację kodu źródłowego i pliku manifest.json. Być może, jeśli monitorujesz kubełek i wykryjesz moment, w którym tworzona jest nowa wersja i przesyłany jest kod źródłowy i manifest, można byłoby zmienić je, aby nowa wersja korzystała z wersji z tylnymi drzwiami??

Wygląda również na to, że warstwy kontenera są przechowywane w kubełku, może warto je zmienić?

Last updated