Apache Airflow Security
Osnovne informacije
Apache Airflow služi kao platforma za orkestraciju i zakazivanje podatkovnih tokova ili radnih procesa. Pojam "orkestracija" u kontekstu podatkovnih tokova označava proces organizovanja, koordinacije i upravljanja složenim podatkovnim tokovima koji potiču iz različitih izvora. Osnovna svrha ovih orkestriranih podatkovnih tokova je da obezbede obrađene i upotrebljive skupove podataka. Ovi skupovi podataka se široko koriste u raznim aplikacijama, uključujući, ali ne ograničavajući se na alate za poslovnu inteligenciju, modele za nauku o podacima i mašinsko učenje, koji su osnovni za funkcionisanje aplikacija velikih podataka.
U osnovi, Apache Airflow će vam omogućiti da zakazujete izvršavanje koda kada se nešto (događaj, cron) desi.
Lokalni Lab
Docker-Compose
Možete koristiti konfiguracioni fajl docker-compose sa https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml da pokrenete kompletan Apache Airflow docker okruženje. (Ako koristite MacOS, obavezno dodelite barem 6GB RAM-a docker virtuelnoj mašini).
Minikube
Jedan jednostavan način da pokrenete Apache Airflow je da ga pokrenete sa Minikube-om:
Konfiguracija Airflow-a
Airflow može čuvati osetljive informacije u svojoj konfiguraciji ili možete pronaći slabe konfiguracije:
Airflow ConfigurationAirflow RBAC
Pre nego što počnete napadati Airflow, trebalo bi da razumete kako dozvole funkcionišu:
Airflow RBACNapadi
Enumeracija Web Konzole
Ako imate pristup web konzoli, možda ćete moći da pristupite nekim ili svim sledećim informacijama:
Promenljive (Ovde se možda čuvaju prilagođene osetljive informacije)
Konekcije (Ovde se možda čuvaju prilagođene osetljive informacije)
Pristupite im na
http://<airflow>/connection/list/
Konfiguracija (Osetljive informacije poput
secret_key
i lozinke mogu biti ovde sačuvane)Lista korisnika i uloga
Kod svakog DAG-a (koji može sadržati zanimljive informacije)
Dobijanje Vrednosti Promenljivih
Promenljive se mogu čuvati u Airflow-u tako da DAG-ovi mogu pristupiti njihovim vrednostima. Slično je tajnama drugih platformi. Ako imate dovoljno dozvola, možete im pristupiti u GUI-u na http://<airflow>/variable/list/
.
Airflow će podrazumevano prikazati vrednost promenljive u GUI-u, međutim, prema ovome, moguće je postaviti listu promenljivih čija će vrednost biti prikazana kao zvezdice u GUI-u.
Međutim, ove vrednosti i dalje mogu biti dobijene putem CLI-ja (morate imati pristup bazi podataka), proizvoljno izvršavanje DAG-a, API pristupanje tački promenljivih (API mora biti aktiviran) i čak sam GUI! Da biste pristupili tim vrednostima iz GUI-a, jednostavno izaberite promenljive do kojih želite da pristupite i kliknite na Akcije -> Izvoz. Još jedan način je izvršiti bruteforce na skrivenoj vrednosti koristeći pretragu filtriranja dok je ne dobijete:
Eskalacija Privilegija
Ako je konfiguracija expose_config
postavljena na True, od korisnika sa ulogom Korisnik i više mogu čitati konfiguraciju na webu. U ovoj konfiguraciji, secret_key
se pojavljuje, što znači da bilo koji korisnik sa ovim validnim ključem može napraviti svoj potpisani kolačić da se predstavi kao bilo koji drugi korisnički nalog.
DAG Backdoor (RCE u Airflow radniku)
Ako imate pristup za pisanje na mestu gde se DAG-ovi čuvaju, možete jednostavno napraviti jedan koji će vam poslati obrnutu ljusku. Imajte na umu da će se ova obrnuta ljuska izvršiti unutar kontejnera za radnike Airflow-a:
DAG Povratna vrata (RCE u Airflow planeru)
Ako postavite nešto da se izvrši u korenu koda, u trenutku pisanja ovog teksta, to će biti izvršeno od strane planera nakon nekoliko sekundi od postavljanja u fasciklu sa DAG-om.
Kreiranje DAG-a
Ukoliko uspete da kompromitujete mašinu unutar DAG klastera, možete kreirati nove DAG skripte u dags/
folderu i one će biti replikovane na ostalim mašinama unutar DAG klastera.
Umetanje Koda u DAG
Kada izvršite DAG iz GUI-ja, možete proslediti argumente. Stoga, ako DAG nije pravilno napisan, može biti ranjiv na Umetanje Komandi. To se desilo u ovom CVE-u: https://www.exploit-db.com/exploits/49927
Sve što treba da znate da biste počeli da tražite umetanja komandi u DAG-ovima jeste da se parametri pristupaju kodom dag_run.conf.get("ime_parametra")
.
Osim toga, ista ranjivost može se pojaviti i sa promenljivama (imajte na umu da sa dovoljno privilegija možete kontrolisati vrednost promenljivih u GUI-ju). Promenljive se pristupaju sa:
Ako se na primer koriste unutar bash komande, moguće je izvršiti ubacivanje komande.
Last updated