GCP - Cloudfunctions Privesc
cloudfunctions
Більше інформації про Cloud Functions:
GCP - Cloud Functions Enumcloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
cloudfunctions.functions.create
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
Зловмисник з цими привілеями може створити нову Cloud Function з довільним (шкідливим) кодом і призначити їй обліковий запис служби. Потім, витягнути токен облікового запису служби з метаданих, щоб підвищити привілеї до нього. Можливо, знадобляться деякі привілеї для активації функції.
Скрипти експлуатації для цього методу можна знайти тут і тут, а попередньо зібраний .zip файл можна знайти тут.
cloudfunctions.functions.update
, cloudfunctions.functions.sourceCodeSet
, iam.serviceAccounts.actAs
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
cloudfunctions.functions.sourceCodeSet
З цією дозволом ви можете отримати підписане URL, щоб завантажити файл до функціонального бакету (але код функції не буде змінено, вам все ще потрібно його оновити)
Не зовсім впевнений, наскільки корисним є лише цей дозвіл з точки зору атакуючого, але добре знати.
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
cloudfunctions.functions.setIamPolicy
, iam.serviceAccounts.actAs
Надайте собі будь-які з попередніх .update
або .create
привілеїв для ескалації.
cloudfunctions.functions.update
cloudfunctions.functions.update
Маючи лише cloudfunctions
дозволи, без iam.serviceAccounts.actAs
ви не зможете оновити функцію, ТОМУ ЦЕ НЕ Є ДІЙСНОЮ ЕСКАЛАЦІЄЮ ПРИВІЛЕЇВ.
Дозволи на запис у бакет
Ви можете подумати, що атакуючий з дозволами на запис у бакет, де зберігається код Cloud Functions, зможе змінити код, перезаписуючи function_code.zip
, а потім змусити функцію виконати довільний код.
Однак це не так, просто перезапис коду всередині бакету не змінить код, що виконується.
Посилання
Last updated