Apache Airflow Security
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apache Airflow dien as 'n platform vir die orkestrering en skedulering van datapipelines of werksvloei. Die term "orkestrering" in die konteks van datapipelines dui op die proses van rangskikking, koördinering en bestuur van komplekse dataverwerkingsvloei wat uit verskeie bronne ontstaan. Die primêre doel van hierdie georkestreerde datapipelines is om verwerkte en verbruikbare datastelle te verskaf. Hierdie datastelle word wyd gebruik deur 'n menigte toepassings, insluitend maar nie beperk tot besigheidsintelligensie-instrumente, datawetenskap en masjienleer modelle, wat almal fundamenteel is vir die funksionering van groot data toepassings.
Basies sal Apache Airflow jou toelaat om die uitvoering van kode te skeduleer wanneer iets (gebeurtenis, cron) gebeur.
Jy kan die docker-compose konfigurasie lêer van https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml gebruik om 'n volledige apache airflow docker omgewing te begin. (As jy op MacOS is, maak seker jy gee ten minste 6GB RAM aan die docker VM).
Een maklike manier om apache airflow te loop is om dit met minikube te doen:
Airflow mag sensitiewe inligting in sy konfigurasie stoor of jy kan swak konfigurasies vind:
Voordat jy begin om Airflow aan te val, moet jy verstaan hoe toestemmings werk:
As jy toegang tot die webkonsol het, mag jy in staat wees om sommige of al die volgende inligting te bekom:
Veranderlikes (Pasgemaakte sensitiewe inligting mag hier gestoor wees)
Verbindings (Pasgemaakte sensitiewe inligting mag hier gestoor wees)
Toegang tot hulle in http://<airflow>/connection/list/
Konfigurasie (Sensitiewe inligting soos die secret_key
en wagwoorde mag hier gestoor wees)
Lys gebruikers & rolle
Kode van elke DAG (wat interessante inligting mag bevat)
Veranderlikes kan in Airflow gestoor word sodat die DAGs hul waardes kan toegang. Dit is soortgelyk aan geheime van ander platforms. As jy genoeg toestemmings het, kan jy hulle in die GUI in http://<airflow>/variable/list/
toegang.
Airflow sal standaard die waarde van die veranderlike in die GUI wys, egter, volgens hierdie is dit moontlik om 'n lys van veranderlikes in te stel waarvan die waarde as sterretjies in die GUI sal verskyn.
Egter, hierdie waardes kan steeds herwin word via CLI (jy moet DB toegang hê), arbitraire DAG uitvoering, API toegang tot die veranderlikes eindpunt (die API moet geaktiveer wees), en selfs die GUI self! Om toegang tot daardie waardes vanaf die GUI te verkry, kies net die veranderlikes wat jy wil toegang en klik op Aksies -> Eksporteer. 'n Ander manier is om 'n bruteforce op die verborge waarde uit te voer deur die soekfiltering totdat jy dit kry:
As die expose_config
konfigurasie op Waar gestel is, kan die rol Gebruiker en bo die konfig in die web lees. In hierdie konfig, verskyn die secret_key
, wat beteken enige gebruiker met hierdie geldige kan sy eie onderteken koekie skep om enige ander gebruikersrekening na te volg.
As jy skrywe toegang het tot die plek waar die DAGs gestoor word, kan jy eenvoudig een skep wat vir jou 'n omgekeerde skulp sal stuur. Let daarop dat hierdie omgekeerde skulp binne 'n airflow werker houer uitgevoer gaan word:
As jy iets stel om uitgevoer te word in die wortel van die kode, op die oomblik van hierdie skrywe, sal dit deur die skeduleerder uitgevoer word na 'n paar sekondes nadat dit binne die DAG se gids geplaas is.
As jy daarin slaag om 'n masjien binne die DAG-kluster te kompromitteer, kan jy nuwe DAG-skripte in die dags/
gids skep en hulle sal in die res van die masjiene binne die DAG-kluster gekopieer word.
Wanneer jy 'n DAG vanaf die GUI uitvoer, kan jy argumente aan dit oorgee. Daarom, as die DAG nie behoorlik gekodeer is nie, kan dit kwulnerabel wees vir Opdrag Inspuiting. Dit is wat in hierdie CVE gebeur het: https://www.exploit-db.com/exploits/49927
Alles wat jy moet weet om te begin soek na opdrag inspuitings in DAGs is dat parameters met die kode dag_run.conf.get("param_name")
toegang verkry.
Boonop kan dieselfde kwesbaarheid voorkom met veranderlikes (let daarop dat jy met genoeg regte die waarde van die veranderlikes in die GUI kan beheer). Veranderlikes word toegang verkry met:
As hulle byvoorbeeld binne 'n bash-opdrag gebruik word, kan jy 'n opdraginjeksie uitvoer.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)