Apache Airflow Security
Basiese Inligting
Apache Airflow dien as 'n platform vir die orkestrering en skedulering van data pyplyne of werkstrome. Die term "orkestrering" in die konteks van data pyplyne dui op die proses van die reël, koördinering en bestuur van komplekse data werkstrome wat afkomstig is van verskeie bronne. Die primêre doel van hierdie georkestreerde data pyplyne is om verwerkte en verbruikbare datastelle te voorsien. Hierdie datastelle word wyd gebruik deur 'n verskeidenheid van toepassings, insluitend maar nie beperk tot besigheidsintelligensie gereedskap, data wetenskap en masjienleermodelle, wat almal fundamenteel is vir die werking van groot data toepassings.
Basies sal Apache Airflow jou toelaat om die uitvoering van kode te skeduleer wanneer iets (gebeurtenis, cron) gebeur.
Plaaslike Laboratorium
Docker-Compose
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 om ten minste 6GB RAM aan die docker VM te gee).
Minikube
Een maklike manier om Apache Airflow te hardloop is om dit met minikube te hardloop:
Airflow Konfigurasie
Airflow kan sensitiewe inligting in sy konfigurasie stoor of swak konfigurasies kan gevind word:
Airflow ConfigurationAirflow RBAC
Voordat jy Airflow aanval, moet jy verstaan hoe toestemmings werk:
Airflow RBACAanvalle
Webkonsol Enumerasie
As jy toegang tot die webkonsol het, kan jy moontlik toegang hê tot een of al die volgende inligting:
Veranderlikes (Aangepaste sensitiewe inligting kan hier gestoor word)
Verbindings (Aangepaste sensitiewe inligting kan hier gestoor word)
Toegang tot hulle in
http://<airflow>/connection/list/
Konfigurasie (Sensitiewe inligting soos die
secret_key
en wagwoorde kan hier gestoor word)Lys gebruikers & rolle
Kode van elke DAG (wat interessante inligting kan bevat)
Haal Veranderlike Waardes op
Veranderlikes kan in Airflow gestoor word sodat die DAGs hul waardes kan bereik. Dit is soortgelyk aan geheime van ander platforms. As jy genoeg toestemmings het, kan jy hulle in die GUI bereik by http://<airflow>/variable/list/
.
Airflow sal standaard die waarde van die veranderlike in die GUI wys, maar volgens hierdie is dit moontlik om 'n lys van veranderlikes in te stel waarvan die waarde as asteriskte in die GUI sal verskyn.
Nietemin kan hierdie waardes steeds opgehaal word via CLI (jy moet DB-toegang hê), arbitrêre DAG-uitvoering, API wat die veranderlikes-eindpunt benader (die API moet geaktiveer wees), en selfs die GUI self! Om toegang tot daardie waardes vanuit die GUI te verkry, kies die veranderlikes wat jy wil bereik en klik op Handelinge -> Uitvoer. 'n Ander manier is om 'n bruteforce uit te voer vir die verborge waarde deur die soekfiltering te gebruik totdat jy dit kry:
Voorreg-Opgradering
As die expose_config
-konfigurasie op Waar ingestel is, kan vanaf die rol Gebruiker en daarbo die konfig in die web gelees word. In hierdie konfigurasie verskyn die secret_key
, wat beteken enige gebruiker met hierdie geldige sleutel kan sy eie ondertekende koekie skep om enige ander gebruikersrekening te simuleer.
DAG Agterdeur (RCE in Airflow werker)
Indien jy skryftoegang het tot die plek waar die DAGs gestoor word, kan jy net een skep wat vir jou 'n omgekeerde skaal sal stuur. Let wel dat hierdie omgekeerde skaal binne 'n airflow werker houer uitgevoer sal word:
DAG Agterdeur (RCE in Airflow-skeduleerder)
Indien jy iets instel om uitgevoer te word in die hoof van die kode, sal dit op die oomblik van hierdie skrywe uitgevoer word deur die skeduleerder na 'n paar sekondes nadat dit binne die DAG se vouer geplaas is.
DAG Skepping
Indien jy daarin slaag om 'n masjien binne die DAG-kluster te kompromiteer, kan jy nuwe DAG-skripte in die dags/
-vouer skep en hulle sal gerepliseer word in die res van die masjiene binne die DAG-kluster.
DAG Kode-inspuiting
Wanneer jy 'n DAG vanaf die GUI uitvoer, kan jy argumente daaraan deurgee. Daarom, as die DAG nie behoorlik gekodeer is nie, kan dit kwesbaar wees vir Bevel-inspuiting. Dit is wat in hierdie CVE gebeur het: https://www.exploit-db.com/exploits/49927
Al wat jy moet weet om te begin soek na bevel-inspuitings in DAGs is dat parameters toegang vind met die kode dag_run.conf.get("param_name")
.
Verder kan dieselfde kwesbaarheid voorkom met veranderlikes (let daarop dat met genoeg regte jy die waarde van die veranderlikes in die GUI kan beheer). Veranderlikes word toegang met:
Indien hulle byvoorbeeld binne 'n bash-opdrag gebruik word, kan jy 'n opdraginspuiting uitvoer.
Last updated