Apache Airflow Security
Last updated
Last updated
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apache Airflow funge da piattaforma per orchestrare e pianificare pipeline di dati o flussi di lavoro. Il termine "orchestrazione" nel contesto delle pipeline di dati indica il processo di organizzazione, coordinamento e gestione di flussi di lavoro complessi di dati provenienti da varie fonti. Lo scopo principale di queste pipeline di dati orchestrate è fornire set di dati elaborati e utilizzabili. Questi set di dati sono ampiamente utilizzati da una miriade di applicazioni, tra cui, ma non solo, strumenti di business intelligence, modelli di data science e machine learning, tutti fondamentali per il funzionamento delle applicazioni di big data.
Fondamentalmente, Apache Airflow ti permetterà di pianificare l'esecuzione di codice quando qualcosa (evento, cron) accade.
Puoi utilizzare il file di configurazione docker-compose da https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml per avviare un ambiente docker completo di apache airflow. (Se sei su MacOS assicurati di dare almeno 6GB di RAM alla VM docker).
Un modo semplice per eseguire apache airflow è farlo con minikube:
Airflow potrebbe memorizzare informazioni sensibili nella sua configurazione o potresti trovare configurazioni deboli in atto:
Airflow ConfigurationPrima di iniziare ad attaccare Airflow, dovresti comprendere come funzionano i permessi:
Airflow RBACSe hai accesso alla console web, potresti essere in grado di accedere ad alcune o a tutte le seguenti informazioni:
Variabili (Informazioni sensibili personalizzate potrebbero essere memorizzate qui)
Connessioni (Informazioni sensibili personalizzate potrebbero essere memorizzate qui)
Accedile in http://<airflow>/connection/list/
Configurazione (Informazioni sensibili come il secret_key
e le password potrebbero essere memorizzate qui)
Elenca utenti e ruoli
Codice di ogni DAG (che potrebbe contenere informazioni interessanti)
Le variabili possono essere memorizzate in Airflow in modo che i DAG possano accedere ai loro valori. È simile ai segreti di altre piattaforme. Se hai sufficienti permessi, puoi accedervi nella GUI in http://<airflow>/variable/list/
.
Airflow per impostazione predefinita mostrerà il valore della variabile nella GUI, tuttavia, secondo questo, è possibile impostare un elenco di variabili il cui valore apparirà come asterischi nella GUI.
Tuttavia, questi valori possono ancora essere recuperati tramite CLI (è necessario avere accesso al DB), esecuzione di DAG arbitrari, API che accede all'endpoint delle variabili (l'API deve essere attivata) e anche la GUI stessa! Per accedere a quei valori dalla GUI, basta selezionare le variabili che desideri accedere e cliccare su Azioni -> Esporta. Un altro modo è eseguire un bruteforce sul valore nascosto utilizzando il filtro di ricerca fino a ottenerlo:
Se la configurazione expose_config
è impostata su True, dal ruolo Utente e superiore possono leggere la configurazione nel web. In questa configurazione, appare il secret_key
, il che significa che qualsiasi utente con questo valido può creare il proprio cookie firmato per impersonare qualsiasi altro account utente.
Se hai accesso in scrittura al luogo in cui i DAG vengono salvati, puoi semplicemente crearne uno che ti invierà una reverse shell. Nota che questa reverse shell verrà eseguita all'interno di un contenitore worker di airflow:
Se imposti qualcosa per essere eseguito nella radice del codice, al momento della scrittura di questo documento, verrà eseguito dallo scheduler dopo un paio di secondi dalla sua collocazione all'interno della cartella del DAG.
Se riesci a compromettere una macchina all'interno del cluster DAG, puoi creare nuovi script DAG nella cartella dags/
e verranno replicati nel resto delle macchine all'interno del cluster DAG.
Quando esegui un DAG dalla GUI puoi passare argomenti ad esso. Pertanto, se il DAG non è codificato correttamente potrebbe essere vulnerabile all'Iniezione di Comandi. Questo è ciò che è accaduto in questo CVE: https://www.exploit-db.com/exploits/49927
Tutto ciò che devi sapere per iniziare a cercare iniezioni di comandi nei DAG è che i parametri sono accessibili con il codice dag_run.conf.get("param_name")
.
Inoltre, la stessa vulnerabilità potrebbe verificarsi con variabili (nota che con privilegi sufficienti potresti controllare il valore delle variabili nella GUI). Le variabili sono accessibili con:
Se vengono utilizzati, ad esempio, all'interno di un comando bash, potresti eseguire un'iniezione di comandi.
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)