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