Apache Airflow Security
Apprenez et pratiquez le piratage AWS :Formation HackTricks AWS Red Team Expert (ARTE)
Apprenez et pratiquez le piratage GCP :
Formation HackTricks GCP Red Team Expert (GRTE)
Informations de base
Apache Airflow sert de plateforme pour orchestrer et planifier des pipelines ou des workflows de données. Le terme "orchestration" dans le contexte des pipelines de données signifie le processus d'organisation, de coordination et de gestion de workflows de données complexes provenant de différentes sources. Le but principal de ces pipelines de données orchestrés est de fournir des ensembles de données traitées et exploitables. Ces ensembles de données sont largement utilisés par une multitude d'applications, y compris mais sans s'y limiter, des outils de business intelligence, des modèles de data science et d'apprentissage automatique, tous étant fondamentaux pour le fonctionnement des applications de big data.
Fondamentalement, Apache Airflow vous permettra de planifier l'exécution de code lorsque quelque chose (événement, cron) se produit.
Laboratoire Local
Docker-Compose
Vous pouvez utiliser le fichier de configuration docker-compose depuis https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml pour lancer un environnement docker apache airflow complet. (Si vous êtes sur MacOS, assurez-vous de donner au moins 6 Go de RAM à la machine virtuelle docker).
Minikube
Une façon simple de faire fonctionner apache airflow est de le faire avec minikube :
Configuration Airflow
Airflow pourrait stocker des informations sensibles dans sa configuration ou vous pouvez trouver des configurations faibles en place:
Airflow ConfigurationAirflow RBAC
Avant de commencer à attaquer Airflow, vous devez comprendre comment fonctionnent les autorisations:
Airflow RBACAttaques
Énumération de la console Web
Si vous avez accès à la console Web, vous pourriez être en mesure d'accéder à certaines ou à l'ensemble des informations suivantes:
Variables (Des informations sensibles personnalisées pourraient être stockées ici)
Connexions (Des informations sensibles personnalisées pourraient être stockées ici)
Accédez à celles-ci dans
http://<airflow>/connection/list/
Configuration (Des informations sensibles comme la
secret_key
et les mots de passe pourraient être stockées ici)Liste des utilisateurs et rôles
Code de chaque DAG (qui pourrait contenir des informations intéressantes)
Récupération des valeurs des variables
Les variables peuvent être stockées dans Airflow afin que les DAGs puissent accéder à leurs valeurs. C'est similaire aux secrets d'autres plateformes. Si vous avez suffisamment d'autorisations, vous pouvez y accéder dans l'interface graphique à http://<airflow>/variable/list/
.
Par défaut, Airflow affichera la valeur de la variable dans l'interface graphique, cependit, selon ceci, il est possible de définir une liste de variables dont la valeur apparaîtra comme des astérisques dans l'interface graphique.
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2597608130-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F0fTBDNDP65sXMI73beHl%252Fuploads%252Fgit-blob-7462a230b733e1127b27872a2087cdf10e486c4b%252Fimage%2520%28164%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=16d421ac&sv=1)
Cependant, ces valeurs peuvent toujours être récupérées via CLI (vous devez avoir accès à la base de données), une exécution de DAG arbitraire, une API accédant au point de terminaison des variables (l'API doit être activée), et même l'interface graphique elle-même! Pour accéder à ces valeurs depuis l'interface graphique, il suffit de sélectionner les variables que vous souhaitez accéder et de cliquer sur Actions -> Export. Une autre façon est de réaliser une attaque par force brute sur la valeur cachée en utilisant le filtrage de recherche jusqu'à ce que vous l'obteniez:
![](https://cloud.hacktricks.xyz/~gitbook/image?url=https%3A%2F%2F2597608130-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F0fTBDNDP65sXMI73beHl%252Fuploads%252Fgit-blob-39c9e07d5759f1fcd65a647f646f578c0f10427a%252Fimage%2520%28152%29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=8ca3d71a&sv=1)
Élévation de privilèges
Si la configuration expose_config
est définie sur True, à partir du rôle Utilisateur et au-dessus peuvent lire la configuration sur le web. Dans cette configuration, la secret_key
apparaît, ce qui signifie que tout utilisateur avec cette clé valide peut créer son propre cookie signé pour se faire passer pour n'importe quel autre compte utilisateur.
Porte dérobée DAG (RCE dans le worker Airflow)
Si vous avez un accès en écriture à l'endroit où les DAG sont sauvegardés, vous pouvez simplement en créer un qui vous enverra un shell inversé. Notez que ce shell inversé sera exécuté à l'intérieur d'un conteneur worker Airflow:
Porte dérobée DAG (RCE dans le planificateur Airflow)
Si vous configurez quelque chose à être exécuté à la racine du code, au moment de la rédaction de cet article, il sera exécuté par le planificateur quelques secondes après l'avoir placé dans le dossier du DAG.
Création de DAG
Si vous parvenez à compromettre une machine à l'intérieur du cluster DAG, vous pouvez créer de nouveaux scripts DAG dans le dossier dags/
et ils seront répliqués dans le reste des machines à l'intérieur du cluster DAG.
Injection de Code DAG
Lorsque vous exécutez un DAG depuis l'interface graphique, vous pouvez transmettre des arguments. Par conséquent, si le DAG n'est pas correctement codé, il pourrait être vulnérable à l'injection de commandes. C'est ce qui s'est passé dans ce CVE : https://www.exploit-db.com/exploits/49927
Tout ce que vous devez savoir pour commencer à rechercher des injections de commandes dans les DAG est que les paramètres sont accédés avec le code dag_run.conf.get("nom_param")
.
De plus, la même vulnérabilité pourrait se produire avec les variables (notez qu'avec suffisamment de privilèges, vous pourriez contrôler la valeur des variables dans l'interface graphique). Les variables sont accédées avec:
Si elles sont utilisées par exemple à l'intérieur d'une commande bash, vous pourriez effectuer une injection de commande.
Apprenez et pratiquez le piratage AWS :Formation HackTricks AWS Red Team Expert (ARTE)
Apprenez et pratiquez le piratage GCP :
Formation HackTricks GCP Red Team Expert (GRTE)
Last updated