GCP - Cloudfunctions 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)
Більше інформації про Cloud Functions:
GCP - Cloud Functions Enumcloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Зловмисник з цими привілеями може створити нову Cloud Function з довільним (шкідливим) кодом і призначити їй обліковий запис служби. Потім, витягнути токен облікового запису служби з метаданих, щоб підвищити привілеї до нього. Можливо, знадобляться деякі привілеї для активації функції.
Скрипти експлуатації для цього методу можна знайти тут і тут, а попередньо зібраний .zip файл можна знайти тут.
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Зловмисник з цими привілеями може модифікувати код функції і навіть змінювати обліковий запис служби, що прикріплений з метою ексфільтрації токена.
Щоб розгорнути cloud functions, вам також знадобляться дозволи actAs над обліковим записом служби за замовчуванням або над обліковим записом служби, який використовується для створення образу.
Деякі додаткові привілеї, такі як дозвіл .call
для версії 1 cloudfunctions або роль role/run.invoker
для активації функції можуть бути необхідні.
Якщо ви отримали помилку Permission 'run.services.setIamPolicy' denied on resource...
, це означає, що ви використовуєте параметр --allow-unauthenticated
і у вас недостатньо прав для цього.
Скрипт експлуатації для цього методу можна знайти тут.
cloudfunctions.functions.sourceCodeSet
З цією дозволом ви можете отримати підписане URL для завантаження файлу в бакет функції (але код функції не буде змінено, вам все ще потрібно його оновити)
Не зовсім впевнений, наскільки корисним є лише цей дозвіл з точки зору атакуючого, але добре знати.
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
Надайте собі будь-які з попередніх .update
або .create
привілеїв для ескалації.
cloudfunctions.functions.update
Маючи лише cloudfunctions
дозволи, без iam.serviceAccounts.actAs
ви не зможете оновити функцію, ТОМУ ЦЕ НЕ Є ДІЙСНИМ ПРИВІЛЕЄМ.
Якщо у вас є доступ на читання та запис до бакету, ви можете моніторити зміни в коді, і коли відбувається оновлення в бакеті, ви можете оновити новий код своїм кодом, з яким нова версія Cloud Function буде запущена з поданим бекдором.
Ви можете дізнатися більше про атаку в:
GCP - Storage PrivescОднак ви не можете використовувати це для попереднього компрометації сторонніх Cloud Functions, тому що якщо ви створите бакет у своєму обліковому записі та надасте йому публічні дозволи, щоб зовнішній проект міг записувати в нього, ви отримаєте наступну помилку:
Однак це може бути використано для DoS-атак.
Коли створюється Cloud Function, новий образ docker завантажується до Artifact Registry проекту. Я намагався змінити образ на новий, і навіть видалити поточний образ (та образ cache
), і нічого не змінилося, cloud function продовжує працювати. Тому, можливо, можливо зловживати атакою Race Condition як з бакетом, щоб змінити контейнер docker, який буде запущено, але просто зміна збереженого образу не можлива для компрометації Cloud Function.
Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)