GCP - AppEngine Privesc
App Engine
Для отримання додаткової інформації про App Engine перегляньте:
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
Це необхідні дозволи для розгортання додатку за допомогою gcloud
cli. Можливо, дозволи get
та list
можна уникнути.
Ви можете знайти приклади коду на Python за посиланням https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/appengine
За замовчуванням, назва служби додатку буде default
, і може бути лише 1 екземпляр з такою ж назвою.
Щоб змінити це та створити другий додаток, в app.yaml
, змініть значення кореневого ключа на щось на зразок service: my-second-app
Дайте їй принаймні 10-15 хвилин, якщо це не працює, викличте розгортання ще кілька разів і зачекайте кілька хвилин.
Можливо вказати Обліковий запис служби для використання, але за замовчуванням використовується обліковий запис SA за замовчуванням App Engine.
URL-адреса програми є щось на зразок https://<proj-name>.oa.r.appspot.com/
або 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
З цими дозволами можливо увійти через ssh в екземпляри App Engine типу гнучкий (не стандартний). Деякі дозволи list
та get
можуть не бути дійсно необхідними.
appengine.applications.update
, appengine.operations.get
appengine.applications.update
, appengine.operations.get
Я думаю, що це просто змінює фоновий SA, який Google використовуватиме для налаштування додатків, тому я не думаю, що ви можете зловживати цим, щоб вкрасти обліковий запис служби.
appengine.versions.getFileContents
, appengine.versions.update
appengine.versions.getFileContents
, appengine.versions.update
Не впевнений, як використовувати ці дозволи або чи вони корисні (зверніть увагу, що при зміні коду створюється нова версія, тому я не знаю, чи можна просто оновити код або роль IAM одного, але, мабуть, ви повинні мати можливість, можливо, змінюючи код всередині відра??).
Доступ на запис до відра
Навіть з доступом на запис до відра, де знаходиться вихідний код, не вдалося виконати довільний код, змінивши вихідний код та manifest.json
.
Можливо, якщо ви моніторите відро і виявляєте момент, коли створюється нова версія і відбувається завантаження вихідного коду та маніфесту, можливо, змінити їх, щоб нова версія використовувала ті, що мають підтримку??
Здається, що шари контейнера зберігаються в відрі, можливо, змінюючи їх?
Last updated