Apache Airflow Security
Informazioni di Base
Apache Airflow funge da piattaforma per orchestrare e pianificare i data pipeline o i flussi di lavoro. Il termine "orchestrazione" nel contesto dei data pipeline significa il processo di organizzare, coordinare e gestire flussi di lavoro dati complessi provenienti da varie fonti. Lo scopo principale di questi data pipeline orchestrati è fornire set di dati elaborati e consumabili. Questi set di dati sono ampiamente utilizzati da una miriade di applicazioni, tra cui ma non limitate a strumenti di business intelligence, modelli di data science e machine learning, tutti fondamentali per il funzionamento delle applicazioni big data.
In sostanza, Apache Airflow ti permetterà di programmare l'esecuzione del codice quando accade qualcosa (evento, cron).
Laboratorio Locale
Docker-Compose
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 di Docker).
Minikube
Un modo semplice per eseguire Apache Airflow è farlo con minikube:
Configurazione di Airflow
Airflow potrebbe memorizzare informazioni sensibili nella sua configurazione o potresti trovare configurazioni deboli in atto:
pageAirflow ConfigurationRBAC di Airflow
Prima di iniziare ad attaccare Airflow, dovresti capire come funzionano le autorizzazioni:
pageAirflow RBACAttacchi
Enumerazione della Console Web
Se hai accesso alla console web, potresti essere in grado di accedere a 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 la
secret_key
e le password potrebbero essere memorizzate qui)Elenca utenti e ruoli
Codice di ciascun DAG (che potrebbe contenere informazioni interessanti)
Recupero dei Valori delle Variabili
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 autorizzazioni sufficienti, puoi accedervi nell'interfaccia grafica in http://<airflow>/variable/list/
.
Di default, Airflow mostrerà il valore della variabile nell'interfaccia grafica, tuttavia, secondo questo è possibile impostare un elenco di variabili il cui valore apparirà come asterischi nell'interfaccia grafica.
Tuttavia, questi valori possono ancora essere recuperati tramite CLI (è necessario avere accesso al DB), esecuzione di DAG arbitrari, API che accedono il punto finale delle variabili (l'API deve essere attivata) e anche l'interfaccia grafica stessa! Per accedere a quei valori dall'interfaccia grafica, basta selezionare le variabili a cui si desidera accedere e fare clic su Azioni -> Esporta. Un altro modo è eseguire un bruteforce al valore nascosto utilizzando il filtro di ricerca finché non lo si ottiene:
Escalation dei Privilegi
Se la configurazione expose_config
è impostata su True, dal ruolo Utente e in su possono leggere la configurazione nel web. In questa configurazione, compare la secret_key
, il che significa che qualsiasi utente con questa chiave valida può creare il proprio cookie firmato per impersonare qualsiasi altro account utente.
Backdoor del DAG (RCE nel worker di Airflow)
Se hai accesso in scrittura al luogo dove sono salvati i DAG, puoi semplicemente creare uno che ti invierà una shell inversa. Nota che questa shell inversa verrà eseguita all'interno di un container worker di Airflow:
Backdoor del DAG (RCE nel pianificatore di Airflow)
Se si imposta qualcosa da eseguire nella radice del codice, al momento della stesura di questo testo, verrà eseguito dal pianificatore dopo un paio di secondi dopo averlo inserito nella cartella del DAG.
Creazione 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.
Iniezione Codice DAG
Quando esegui un DAG dall'interfaccia grafica, puoi passargli argomenti. Pertanto, se il DAG non è codificato correttamente, potrebbe essere vulnerabile all'Injection di Comandi. Questo è ciò che è successo 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 acceduti con il codice dag_run.conf.get("nome_parametro")
.
Inoltre, la stessa vulnerabilità potrebbe verificarsi con le variabili (nota che con sufficienti privilegi potresti controllare il valore delle variabili nell'interfaccia grafica). Le variabili sono accedute con:
Se vengono utilizzati ad esempio all'interno di un comando bash, potresti eseguire un'iniezione di comandi.
Last updated