Apache Airflow Security
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Basic Information
Apache Airflow služi kao platforma za orchestraciju i zakazivanje podataka ili radnih tokova. Termin "orchestracija" u kontekstu podataka označava proces organizovanja, koordinacije i upravljanja složenim radnim tokovima podataka koji potiču iz različitih izvora. Primarna svrha ovih orkestriranih radnih tokova podataka je da obezbede obrađene i upotrebljive skupove podataka. Ovi skupovi podataka se široko koriste u mnogim aplikacijama, uključujući, ali ne ograničavajući se na alate za poslovnu inteligenciju, modele podataka i mašinskog učenja, koji su svi osnovni za funkcionisanje aplikacija velikih podataka.
U suštini, Apache Airflow će vam omogućiti da zakazujete izvršenje koda kada se nešto (događaj, cron) dogodi.
Local Lab
Docker-Compose
Možete koristiti docker-compose konfiguracioni fajl sa https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml da pokrenete kompletnu apache airflow docker sredinu. (Ako ste na MacOS-u, obavezno dodelite najmanje 6GB RAM-a docker VM-u).
Minikube
Jedan jednostavan način da pokrenete apache airflow je da ga pokrenete sa minikube:
Airflow Configuration
Airflow može čuvati osetljive informacije u svojoj konfiguraciji ili možete pronaći slabe konfiguracije:
Airflow ConfigurationAirflow RBAC
Pre nego što počnete da napadate Airflow, trebali biste razumeti kako funkcionišu dozvole:
Airflow RBACAttacks
Web Console Enumeration
Ako imate pristup web konzoli, možda ćete moći da pristupite nekim ili svim sledećim informacijama:
Varijable (Prilagođene osetljive informacije mogu biti sačuvane ovde)
Konekcije (Prilagođene osetljive informacije mogu biti sačuvane ovde)
Pristupite im na
http://<airflow>/connection/list/
Konfiguracija (Osetljive informacije kao što su
secret_key
i lozinke mogu biti sačuvane ovde)Lista korisnika i uloga
Kod svakog DAG-a (koji može sadržati zanimljive informacije)
Retrieve Variables Values
Varijable 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 po defaultu prikazuje vrednost varijable u GUI-u, međutim, prema ovome, moguće je postaviti listu varijabli čija će se vrednost pojaviti kao zvezdice u GUI-u.
Međutim, ove vrednosti se i dalje mogu pribaviti putem CLI (morate imati pristup bazi podataka), izvršavanjem proizvoljnog DAG-a, API pristupom tački varijabli (API mora biti aktiviran), i čak i samim GUI-em! Da biste pristupili tim vrednostima iz GUI-a, jednostavno izaberite varijable kojima želite da pristupite i kliknite na Akcije -> Izvezi. Drugi način je da izvršite bruteforce na skrivenoj vrednosti koristeći filtriranje pretrage dok je ne dobijete:
Privilege Escalation
Ako je konfiguracija expose_config
postavljena na True, iz uloge Korisnik i naviše mogu čitati konfiguraciju na web-u. U ovoj konfiguraciji se pojavljuje secret_key
, što znači da svaki korisnik sa ovim važećim može napraviti svoj potpisani kolačić da bi se pretvarao da je 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 obrnuti shell. Imajte na umu da će ovaj obrnuti shell biti izvršen unutar airflow radničkog kontejnera:
DAG Backdoor (RCE u Airflow scheduler-u)
Ako postavite nešto da bude izvršeno u korenu koda, u trenutku pisanja ovog teksta, biće izvršeno od strane scheduler-a nakon nekoliko sekundi nakon što ga stavite unutar DAG-ove fascikle.
Kreiranje DAG-a
Ako uspete da kompromitujete mašinu unutar DAG klastera, možete kreirati nove DAG skripte u dags/
folderu i one će biti replicirane na ostalim mašinama unutar DAG klastera.
Injekcija koda u DAG
Kada izvršavate DAG iz GUI-a, možete proslediti argumente njemu. Stoga, ako DAG nije pravilno kodiran, mogao bi biti ranjiv na Injekciju Komandi. To se desilo u ovom CVE: https://www.exploit-db.com/exploits/49927
Sve što treba da znate da počnete da tražite injekcije komandi u DAG-ovima je da se parametri pristupaju sa kodom dag_run.conf.get("param_name")
.
Štaviše, ista ranjivost može se javiti sa varijablama (imajte na umu da sa dovoljno privilegija možete kontrolisati vrednost varijabli u GUI-u). Varijable se pristupaju sa:
Ako se koriste, na primer, unutar bash komande, mogli biste izvršiti injekciju komande.
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Last updated