GCP - AppEngine Privesc
App Engine
Aby uzyskać więcej informacji na temat App Engine, sprawdź:
pageGCP - App Engine Enumappengine.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
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
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
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.
appengine.applications.update
, appengine.operations.get
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