Apache Airflow Security
Taarifa Msingi
Apache Airflow inatumika kama jukwaa la kuorodhesha na kupanga mabomba ya data au mifumo ya kazi. Neno "kuorodhesha" katika muktadha wa mabomba ya data inamaanisha mchakato wa kupanga, kuratibu, na kusimamia mifumo ya kazi ya data yenye utata inayotoka vyanzo mbalimbali. Lengo kuu la mabomba haya ya data yaliyoorodheshwa ni kutoa seti za data zilizosindika na zinazoweza kutumiwa. Seti hizi za data hutumiwa sana na programu nyingi, ikiwa ni pamoja na lakini sio mdogo kwa zana za ujasusi wa biashara, sayansi ya data na mifano ya ujifunzaji wa mashine, yote ambayo ni msingi wa utendaji wa programu za data kubwa.
Kimsingi, Apache Airflow itakuruhusu kupanga utekelezaji wa nambari wakati kitu (tukio, cron) kinapotokea.
Maabara ya Kienyeji
Docker-Compose
Unaweza kutumia faili ya usanidi ya docker-compose kutoka https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml kuzindua mazingira kamili ya docker ya apache airflow. (Ikiwa uko kwenye MacOS hakikisha kutoa angalau 6GB ya RAM kwa docker VM).
Minikube
Njia moja rahisi ya kuendesha apache airflow ni kuendesha na minikube:
Mpangilio wa Airflow
Airflow inaweza kuhifadhi taarifa nyeti katika mpangilio wake au unaweza kupata mipangilio dhaifu:
Airflow ConfigurationAirflow RBAC
Kabla ya kuanza kushambulia Airflow unapaswa kuelewa jinsi ruhusa zinavyofanya kazi:
Airflow RBACMashambulizi
Uorodheshaji wa Konsoli ya Wavuti
Ikiwa una upatikanaji wa konsoli ya wavuti unaweza kupata au kufikia baadhi au yote ya taarifa zifuatazo:
Vipimo (Taarifa nyeti za kawaida zinaweza kuhifadhiwa hapa)
Uunganisho (Taarifa nyeti za kawaida zinaweza kuhifadhiwa hapa)
Pata kwenye
http://<airflow>/connection/list/
Mpangilio (Taarifa nyeti kama
secret_key
na nywila zinaweza kuhifadhiwa hapa)Orodhesha watumiaji na majukumu
Msimbo wa kila DAG (ambao unaweza kuwa na taarifa za kuvutia)
Kupata Thamani za Vipimo
Vipimo vinaweza kuhifadhiwa kwenye Airflow ili DAGs ziweze kufikia thamani zao. Ni sawa na siri za majukwaa mengine. Ikiwa una ruhusa za kutosha unaweza kuzipata kwenye GUI kwenye http://<airflow>/variable/list/
.
Kwa chaguo-msingi, Airflow itaonyesha thamani ya kipimo kwenye GUI, hata hivyo, kulingana na hii inawezekana kuweka orodha ya vipimo ambavyo thamani yake itaonekana kama nyota kwenye GUI.
Hata hivyo, thamani hizi bado zinaweza kupatikana kupitia CLI (unahitaji kupata ufikivu wa DB), utekelezaji wa DAG wa kiholela, API kupitia kufikia mwisho wa vipimo (API inahitaji kuwa imewezeshwa), na hata GUI yenyewe! Kupata thamani hizo kutoka kwenye GUI tu chagua vipimo unavyotaka kufikia na bonyeza Matendo -> Kuuza. Njia nyingine ni kufanya bruteforce kwa thamani iliyofichwa kwa kutumia kuchuja utafutaji mpaka upate:
Kupandisha Hadhi ya Mamlaka
Ikiwa mpangilio wa expose_config
umewekwa kuwa Sahihi, kutoka kwa jukumu la Mtumiaji na juu yake wanaweza kusoma mpangilio kwenye wavuti. Katika mpangilio huu, secret_key
inaonekana, ambayo inamaanisha mtumiaji yeyote mwenye hii inayofaa wanaweza kuunda kuki iliyosainiwa yao wenyewe kujifanya kuwa akaunti ya mtumiaji mwingine yeyote.
Mlango wa Nyuma wa DAG (RCE katika mfanyakazi wa Airflow)
Ikiwa una upatikanaji wa kuandika mahali ambapo DAGs zimehifadhiwa, unaweza tu kuunda moja ambayo itakutumia kifaa cha kudhibitiwa kwa nyuma. Tafadhali kumbuka kuwa kifaa hiki cha kudhibitiwa kwa nyuma kitatekelezwa ndani ya kontena ya mfanyakazi wa airflow:
Mlango Nyuma wa DAG (RCE katika Airflow scheduler)
Ikiwa unaweka kitu kiwe kinatekelezwa katika mizizi ya nambari, wakati wa kuandika hii, itatekelezwa na scheduler baada ya sekunde chache baada ya kuwekwa ndani ya folda ya DAG.
Uundaji wa DAG
Ikiwa utafanikiwa kuambukiza kifaa ndani ya kikundi cha DAG, unaweza kuunda skripti mpya za DAG katika folda ya dags/
na zitakuwa zimejirudisha katika kifaa zingine ndani ya kikundi cha DAG.
Uingizaji wa Msimbo wa DAG
Unapotekeleza DAG kutoka kwa GUI unaweza kupitisha vigezo kwake. Kwa hivyo, ikiwa DAG haiko sawa kimaandishi inaweza kuwa dhaifu kwa Uingizaji wa Amri. Hapo ndipo ilipotokea katika CVE hii: https://www.exploit-db.com/exploits/49927
Kila unachohitaji kujua kuanza kutafuta uingizaji wa amri katika DAGs ni kwamba parameta zina fikiwa na msimbo dag_run.conf.get("jina_la_param")
.
Zaidi ya hayo, dhaifu sawa inaweza kutokea na vibadilishaji (kumbuka kwamba ukiwa na mamlaka ya kutosha unaweza kudhibiti thamani ya vibadilishaji katika GUI). Vibadilishaji vinapata kwa:
If they are used for example inside a a bash command, you could perform a command injection.
Last updated