Apache Airflow Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apache Airflow डेटा पाइपलाइनों या वर्कफ़्लो को व्यवस्थित और शेड्यूल करने के लिए एक प्लेटफ़ॉर्म के रूप में कार्य करता है। डेटा पाइपलाइनों के संदर्भ में "व्यवस्थापन" का अर्थ विभिन्न स्रोतों से उत्पन्न जटिल डेटा वर्कफ़्लो को व्यवस्थित, समन्वयित और प्रबंधित करने की प्रक्रिया है। इन व्यवस्थित डेटा पाइपलाइनों का मुख्य उद्देश्य संसाधित और उपभोग करने योग्य डेटा सेट प्रदान करना है। ये डेटा सेट कई अनुप्रयोगों द्वारा व्यापक रूप से उपयोग किए जाते हैं, जिनमें व्यवसायिक बुद्धिमत्ता उपकरण, डेटा विज्ञान और मशीन लर्निंग मॉडल शामिल हैं, जो सभी बड़े डेटा अनुप्रयोगों के कार्य करने के लिए आधारभूत हैं।
बुनियादी रूप से, Apache Airflow आपको कोड के निष्पादन को शेड्यूल करने की अनुमति देगा जब कुछ (घटना, क्रोन) होगा।
आप docker-compose config file का उपयोग कर सकते हैं https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml एक पूर्ण apache airflow docker वातावरण लॉन्च करने के लिए। (यदि आप MacOS पर हैं, तो सुनिश्चित करें कि आप docker VM को कम से कम 6GB RAM दें)।
apache airflow को चलाने का एक आसान तरीका है इसे minikube के साथ चलाना:
Airflow अपनी कॉन्फ़िगरेशन में संवेदनशील जानकारी संग्रहीत कर सकता है या आप कमजोर कॉन्फ़िगरेशन पा सकते हैं:
Airflow ConfigurationAirflow पर हमला करने से पहले आपको अनुमतियों का काम कैसे होता है समझना चाहिए:
Airflow RBACयदि आपके पास वेब कंसोल तक पहुंच है तो आप निम्नलिखित जानकारी में से कुछ या सभी तक पहुंच सकते हैं:
Variables (कस्टम संवेदनशील जानकारी यहाँ संग्रहीत की जा सकती है)
Connections (कस्टम संवेदनशील जानकारी यहाँ संग्रहीत की जा सकती है)
उन्हें http://<airflow>/connection/list/
में एक्सेस करें
Configuration (संवेदनशील जानकारी जैसे secret_key
और पासवर्ड यहाँ संग्रहीत किए जा सकते हैं)
users & roles की सूची
Code of each DAG (जो दिलचस्प जानकारी हो सकती है)
Variables Airflow में संग्रहीत किए जा सकते हैं ताकि DAGs उनके मानों को एक्सेस कर सकें। यह अन्य प्लेटफार्मों के रहस्यों के समान है। यदि आपके पास पर्याप्त अनुमतियाँ हैं तो आप उन्हें GUI में http://<airflow>/variable/list/
में एक्सेस कर सकते हैं।
Airflow डिफ़ॉल्ट रूप से GUI में वेरिएबल का मान दिखाएगा, हालाँकि, इस के अनुसार, यह संभव है कि वेरिएबल्स की एक सूची सेट की जाए जिनका मान अतिरिक्त चिह्नों के रूप में GUI में दिखाई देगा।
हालांकि, ये मान अभी भी CLI के माध्यम से प्राप्त किए जा सकते हैं (आपको DB एक्सेस की आवश्यकता है), मनमाने DAG निष्पादन, API के माध्यम से वेरिएबल्स एंडपॉइंट तक पहुंच (API को सक्रिय करना आवश्यक है), और यहाँ तक कि GUI स्वयं! GUI से उन मानों तक पहुँचने के लिए बस वेरिएबल्स का चयन करें जिन्हें आप एक्सेस करना चाहते हैं और Actions -> Export पर क्लिक करें। एक और तरीका है छिपे हुए मान पर ब्रूटफोर्स करना, इसे खोज फ़िल्टरिंग का उपयोग करके जब तक आप इसे प्राप्त न कर लें:
यदि expose_config
कॉन्फ़िगरेशन True पर सेट है, तो User भूमिका और ऊपर से वेब में कॉन्फ़िग को पढ़ सकते हैं। इस कॉन्फ़िग में, secret_key
प्रकट होता है, जिसका अर्थ है कि इस वैध के साथ कोई भी उपयोगकर्ता अपना स्वयं का साइन किया हुआ कुकी बना सकता है ताकि किसी अन्य उपयोगकर्ता खाते का प्रतिनिधित्व कर सके।
यदि आपके पास लिखने की अनुमति है जहाँ DAGs सहेजे जाते हैं, तो आप बस एक बना सकते हैं जो आपको एक रिवर्स शेल भेजेगा। ध्यान दें कि यह रिवर्स शेल एक airflow कार्यकर्ता कंटेनर के अंदर निष्पादित होने वाला है:
यदि आप कुछ को कोड की जड़ में निष्पादित करने के लिए सेट करते हैं, तो इस लेखन के क्षण में, इसे शेड्यूलर द्वारा निष्पादित किया जाएगा DAG के फ़ोल्डर में रखने के कुछ सेकंड बाद।
यदि आप DAG क्लस्टर के अंदर एक मशीन को समझौता करने में सफल होते हैं, तो आप dags/
फ़ोल्डर में नए DAGs स्क्रिप्ट बना सकते हैं और ये DAG क्लस्टर के अंदर बाकी मशीनों में दोहराए जाएंगे।
जब आप GUI से एक DAG को निष्पादित करते हैं, तो आप इसे आर्गुमेंट्स दे सकते हैं। इसलिए, यदि DAG ठीक से कोडित नहीं है, तो यह कमांड इंजेक्शन के लिए संवेदनशील हो सकता है। यही इस CVE में हुआ: https://www.exploit-db.com/exploits/49927
आपको **DAGs में कमांड इंजेक्शन की तलाश शुरू करने के लिए जो कुछ जानने की आवश्यकता है, वह यह है कि पैरामीटर्स को कोड dag_run.conf.get("param_name")
के साथ एक्सेस किया जाता है।
इसके अलावा, वही संवेदनशीलता वेरिएबल्स के साथ भी हो सकती है (ध्यान दें कि पर्याप्त विशेषाधिकार के साथ आप GUI में वेरिएबल्स के मान को नियंत्रित कर सकते हैं)। वेरिएबल्स को इससे एक्सेस किया जाता है:
यदि उन्हें उदाहरण के लिए एक bash कमांड के अंदर उपयोग किया जाता है, तो आप एक कमांड इंजेक्शन कर सकते हैं।
सीखें और AWS हैकिंग का अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) सीखें और GCP हैकिंग का अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)