GCP - AppEngine Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Для отримання додаткової інформації про App Engine перегляньте:
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
За замовчуванням ім'я сервісу App буде default
, і може бути лише 1 екземпляр з таким же ім'ям.
Щоб змінити його та створити другий додаток, у 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
З цими дозволами можливо увійти через ssh в екземпляри App Engine типу flexible (не стандартний). Деякі з дозволів list
і get
можуть бути насправді непотрібні.
appengine.applications.update
, appengine.operations.get
Я думаю, що це просто змінює фоновий SA, який Google буде використовувати для налаштування додатків, тому я не думаю, що ви можете зловживати цим, щоб вкрасти обліковий запис служби.
appengine.versions.getFileContents
, appengine.versions.update
Не впевнений, як використовувати ці дозволи або чи є вони корисними (зауважте, що коли ви змінюєте код, створюється нова версія, тому я не знаю, чи можна просто оновити код або IAM роль одного, але я гадаю, що ви повинні мати можливість це зробити, можливо, змінивши код всередині бакету??).
Як вже згадувалося, версії appengine генерують деякі дані всередині бакету з форматом імені: staging.<project-id>.appspot.com
. Зверніть увагу, що неможливо попередньо захопити цей бакет, оскільки користувачі GCP не мають права генерувати бакети, використовуючи доменне ім'я appspot.com
.
Однак, з доступом на читання та запис до цього бакету, можливо підвищити привілеї до SA, прикріпленого до версії AppEngine, шляхом моніторингу бакету і в будь-який час, коли виконується зміна, якомога швидше змінити код. Таким чином, контейнер, який створюється з цього коду, виконає зламаний код.
Для отримання додаткової інформації та PoC перевірте відповідну інформацію з цієї сторінки:
Навіть якщо App Engine створює образи docker всередині Artifact Registry. Було протестовано, що навіть якщо ви зміните образ всередині цього сервісу і видалите екземпляр App Engine (щоб був розгорнутий новий), виконуваний код не змінюється. Можливо, що виконання атаки Race Condition, як з бакетами, може дозволити перезаписати виконуваний код, але це не було протестовано.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)