
CVE-2026-33017 - Langflow अनप्रमाणित RCE एक्सप्लॉइट
कोड द्वारा: Xer0TLabs x Persephrak Decentralized Syndicate
यह दस्तावेज़ समीक्षा, घटना-प्रतिक्रिया और रक्षात्मक विश्लेषण के लिए प्रदान किए गए Python प्रोग्राम की उच्च-स्तरीय व्याख्या है। इसमें जानबूझकर संचालन निर्देश, लक्ष्य-चयन मार्गदर्शन, पेलोड उदाहरण, या किसी सिस्टम तक पहुंच प्राप्त करने की प्रक्रियाएं शामिल नहीं हैं।
स्क्रिप्ट स्वयं को एक कथित Langflow अनप्रमाणित रिमोट-कोड-निष्पादन समस्या के लिए एक शोषण के रूप में लेबल करती है। यह README वर्णन करता है कि कोड क्या करने का प्रयास करता है; यह CVE पहचानकर्ता, प्रभावित संस्करणों, एंडपॉइंट व्यवहार, विक्रेता सलाहकारों, या स्क्रिप्ट की प्रभावशीलता को स्वतंत्र रूप से मान्य नहीं करता है।
प्रोग्राम एक कमांड-लाइन स्वचालन उपकरण के रूप में संरचित है जो Langflow HTTP एंडपॉइंट पर विशेष रूप से निर्मित JSON डेटा भेजने का प्रयास करता है। इसका इच्छित आधार यह है कि फ्लो परिभाषा में एम्बेडेड उपयोगकर्ता-नियंत्रित Python को दूरस्थ अनुप्रयोग द्वारा संसाधित किया जाएगा।
यदि यह आधार किसी लक्ष्य पर सत्य है, तो स्क्रिप्ट इसे मनमाने ऑपरेटिंग-सिस्टम कमांड निष्पादन में बदलने के लिए डिज़ाइन की गई है। बुनियादी निष्पादन जांच से परे, इसमें स्थिरता (persistence) स्थापित करने, एक इंटरैक्टिव रिमोट सत्र बनाने, टोही कमांड चलाने और स्थानीय रूप से SSH कुंजी जोड़ी उत्पन्न करने के लिए नियमित प्रक्रियाएं शामिल हैं।
क्योंकि ये क्षमताएं बिना प्राधिकरण के सिस्टम से समझौता कर सकती हैं, कोड को संभावित रूप से दुर्भावनापूर्ण या दोहरे-उपयोग वाले उपकरण के रूप में माना जाना चाहिए। इसे सिस्टम के खिलाफ नहीं चलाया जाना चाहिए जब तक कि गतिविधि स्पष्ट रूप से अधिकृत न हो और एक परिभाषित परीक्षण दायरे द्वारा शासित न हो।
प्रोग्राम तर्क पार्सिंग, JSON हैंडलिंग, HTTP अनुरोध, सॉकेट, थ्रेड, सबप्रोसेस निष्पादन और फ़ाइल एक्सेस के लिए मानक Python मॉड्यूल आयात करता है।
यह ssl._create_unverified_context के माध्यम से वैश्विक रूप से सामान्य TLS प्रमाणपत्र सत्यापन को अक्षम करता है। यह HTTPS अनुरोधों को अमान्य या अविश्वसनीय प्रमाणपत्र स्वीकार करने की अनुमति देता है। हालांकि कभी-कभी परीक्षण कोड में देखा जाता है, यह उत्पादन में असुरक्षित है क्योंकि यह अवरोधन और प्रतिरूपण के खिलाफ सुरक्षा को कमजोर करता है।
Colors रंगीन आउटपुट प्रिंट करने के लिए उपयोग किए जाने वाले ANSI टर्मिनल एस्केप अनुक्रमों को परिभाषित करता है।
Logger एक छोटी उपयोगिता क्लास है जो सूचनात्मक, सफलता, चेतावनी और त्रुटि संदेश प्रिंट करती है। इसकी banner() विधि स्क्रिप्ट का शीर्षक, कथित भेद्यता, कथित प्रभावित उत्पाद श्रेणी, गंभीरता और CISA KEV स्थिति प्रदर्शित करती है। ये दावे प्रोग्राम में प्रस्तुति पाठ हैं और यह प्रमाण नहीं हैं कि दावे सटीक हैं।
यह मुख्य क्लास है। जब इसे आरंभ किया जाता है, यह:
http:// उपसर्ग जोड़ता है।डिफ़ॉल्ट फ्लो ID एक निश्चित UUID-जैसा मान है। प्रोग्राम इसे कमांड-लाइन विकल्प के माध्यम से ओवरराइड करने की अनुमति देता है।
_build_malicious_payload(command) एक नोड के साथ एक फ्लो ग्राफ जैसा दिखने वाला JSON ऑब्जेक्ट बनाता है। नोड को CustomComponent के रूप में चिह्नित किया गया है और इसमें code फ़ील्ड में Python स्रोत कोड शामिल है।
सम्मिलित स्रोत एक ऑपरेटिंग-सिस्टम कमांड को लागू करने का प्रयास करता है। यह पहले एक Python API आज़माता है और त्रुटि होने पर सबप्रोसेस कॉल पर वापस आ जाता है। JSON संरचना फिर अनुरोध-भेजने वाले कोड को लौटा दी जाती है।
यह मुख्य शोषण तर्क है: यह मानता है कि प्राप्त करने वाली सेवा ग्राफ को संसाधित करते समय प्रस्तुत कोड को निष्पादित करेगी।
_send_exploit_request(payload_data) पेलोड को JSON के रूप में क्रमबद्ध करता है और निर्मित एंडपॉइंट पर HTTP POST अनुरोध करता है। इसमें पारंपरिक ब्राउज़र-जैसे हेडर शामिल हैं और यह प्रतिक्रिया बॉडी टेक्स्ट और HTTP स्थिति दोनों लौटाता है।
HTTP त्रुटियों को पकड़ा जाता है और प्रोग्राम को समाप्त करने के बजाय लौटाया जाता है। अन्य अपवाद, जैसे कनेक्शन विफलताएं या टाइमआउट, स्ट्रिंग्स में परिवर्तित हो जाते हैं और स्थिति 0 के साथ लौटाए जाते हैं।
check_vulnerability() एक मार्कर कमांड वाला पेलोड भेजता है और फिर या तो एक सफल HTTP प्रतिक्रिया या error शब्द वाली कोई भी प्रतिक्रिया को इस बात के प्रमाण के रूप में मानता है कि लक्ष्य "असुरक्षित प्रतीत होता है।"
यह एक विश्वसनीय सत्यापन विधि नहीं है। एक 200 प्रतिक्रिया, एक 500 प्रतिक्रिया, या एक एप्लिकेशन त्रुटि कोड निष्पादन से असंबंधित कई कारणों से हो सकती है। स्क्रिप्ट मार्कर के आउटपुट को स्वतंत्र रूप से नहीं देखती है, इसलिए यह गलत सकारात्मक परिणाम उत्पन्न कर सकती है।
execute_command(command) प्रदान किए गए कमांड को दुर्भावनापूर्ण फ्लो पेलोड में लपेटता है और इसे भेजता है। यह HTTP 200 या 500 को संभावित सफल परिणाम के रूप में व्याख्या करता है।
फिर से, अकेले स्थिति कोड रिमोट कमांड निष्पादन प्रदर्शित नहीं करते हैं। रक्षात्मक कोड-समीक्षा परिप्रेक्ष्य से, यह विधि ऑपरेटर को मनमाने OS कमांड प्रदान करने की अनुमति देकर उपकरण को लचीला बनाने का प्रयास करती है।
_build_ssh_payload() और inject_ssh_key() दूरस्थ SSH कॉन्फ़िगरेशन और अधिकृत-कुंजी फ़ाइलों को संशोधित करने के लिए डिज़ाइन किए गए हैं। प्रयास किए गए कार्यों में SSH निर्देशिकाएं बनाना, SSH सार्वजनिक कुंजी जोड़ना, अनुमतियां बदलना, SSH डेमॉन सेटिंग्स संशोधित करना, SSH सेवा को पुनरारंभ करना, क्रॉन-आधारित स्थिरता तंत्र बनाना और शेल-इतिहास कलाकृतियों को हटाना शामिल है।
ये स्थिरता और रक्षा-चोरी व्यवहार हैं, न कि एक सौम्य भेद्यता जांच। प्रोग्राम केवल HTTP स्थिति के आधार पर सफलता का दावा कर सकता है, बिना यह पुष्टि किए कि कोई फ़ाइल या सेवा वास्तव में बदली गई थी।
_build_reverse_shell_payload() कई फॉलबैक तंत्रों को इकट्ठा करता है जो लक्ष्य को ऑपरेटर-नियंत्रित होस्ट और पोर्ट पर आउटबाउंड नेटवर्क कनेक्शन शुरू करने का कारण बनाने के लिए होते हैं।
spawn_reverse_shell() एक पृष्ठभूमि थ्रेड में एक स्थानीय TCP लिसनर शुरू करता है, संक्षेप में प्रतीक्षा करता है, दूरस्थ पेलोड भेजता है, और फिर कनेक्शन की प्रतीक्षा करता है।
_start_listener() एक कनेक्शन स्वीकार करता है और एक सरल इंटरैक्टिव कमांड लूप प्रदान करता है। यह एक रिमोट-एक्सेस क्षमता है। इसमें सीमित त्रुटि हैंडलिंग है, यह आने वाले कनेक्शन को प्रमाणित नहीं करता है, और सुरक्षित प्रशासन या वैध परीक्षण बुनियादी ढांचे के लिए उपयुक्त नहीं है।
full_exploit_chain() कई व्यवहारों को जोड़ती है:
टोही सूची पहचान, विशेषाधिकार, ऑपरेटिंग-सिस्टम जानकारी, फ़ाइलें, प्रक्रियाएं, सुनने वाली सेवाएं, खाते और अनुसूचित कार्यों को प्रकट करने के लिए है। यह समझौते के बाद की गणना की विशेषता है।
generate_ssh_key_pair(key_path) स्थानीय ssh-keygen प्रोग्राम को लागू करता है ताकि 4096-बिट RSA कुंजी जोड़ी बनाई जा सके यदि अनुरोधित फ़ाइलें पहले से मौजूद नहीं हैं।
यह कथित CVE का संदर्भ देने वाली एक कुंजी टिप्पणी बनाता है और SSH स्थिरता फ़ंक्शन का समर्थन करने के लिए है। यह उस मशीन को प्रभावित करता है जिस पर स्क्रिप्ट स्वयं चलाई जाती है, दूरस्थ लक्ष्य को नहीं।
main() लक्ष्य चयन, एक फ्लो ID, एकल-कमांड निष्पादन, SSH-कुंजी हैंडलिंग, रिवर्स-शेल सेटिंग्स, पूर्ण-श्रृंखला निष्पादन, स्वचालित कुंजी निर्माण और वर्बोज़ आउटपुट के लिए कमांड-लाइन विकल्प परिभाषित करता है।
कोड केवल सीमित सत्यापन करता है। उदाहरण के लिए, रिवर्स-शेल और पूर्ण-श्रृंखला मोड के लिए एक स्थानीय होस्ट और पोर्ट की आवश्यकता होती है। यह प्राधिकरण, दायरे, लक्ष्य स्वामित्व, URL सुरक्षा, या क्या लक्ष्य वास्तव में एक Langflow उदाहरण है, को मान्य नहीं करता है।
encoded_key चर की गणना की जाती है लेकिन कभी उपयोग नहीं किया जाता है।इस कोड की समीक्षा करने वाली सुरक्षा टीमों को निम्नलिखित को शोषण या समझौते के बाद की गतिविधि के प्रयास के संकेतक के रूप में मानना चाहिए:
सुधार निर्णयों के लिए, इस स्क्रिप्ट में एम्बेडेड संस्करण और गंभीरता कथनों के बजाय आधिकारिक Langflow सुरक्षा सलाहकारों, रिलीज़ नोट्स और आपके संगठन की भेद्यता-प्रबंधन प्रक्रिया पर भरोसा करें।
इस प्रोग्राम को तैनाती या एक्सेस उपकरण के रूप में न चलाएं या पुनर्वितरित न करें। यदि यह किसी सिस्टम पर पाया गया था, तो इसे साक्ष्य के रूप में संरक्षित करें, हैश और टाइमस्टैम्प रिकॉर्ड करें, प्रति तक पहुंच प्रतिबंधित करें, प्रासंगिक सेवा और नेटवर्क लॉग का निरीक्षण करें, और संगठन की घटना-प्रतिक्रिया प्रक्रिया का पालन करें।
एक वैध अधिकृत मूल्यांकन के लिए, एक लिखित दायरा, एक गैर-विनाशकारी सत्यापन योजना, एक प्रलेखित रोक स्थिति और सुधार-केंद्रित रिपोर्ट का उपयोग करें। स्थिरता, रिवर्स शेल, क्रेडेंशियल परिवर्तन, इतिहास विलोपन, या किसी भी कार्रवाई से बचें जो सिस्टम को बाधित कर सकती है या अनधिकृत पहुंच पीछे छोड़ सकती है।