
luigi एक पैकेज है जो आपको बैच जॉब्स के जटिल पाइपलाइन बनाने में मदद करता है। यह निर्भरता समाधान, वर्कफ़्लो प्रबंधन, विज़ुअलाइज़ेशन, विफलताओं को संभालना, कमांड लाइन एकीकरण और बहुत कुछ संभालता है।
इस पैकेज के प्रभावित संस्करण _extract_packages_archive फ़ंक्शन में गंतव्य फ़ाइल पथ के अनुचित सत्यापन के कारण आर्काइव निष्कर्षण (Zip Slip) के माध्यम से Arbitrary File Write भेद्यता से ग्रस्त हैं।
इसका शोषण एक विशेष रूप से तैयार किए गए zip आर्काइव का उपयोग करके किया जाता है, जिसमें पाथ ट्रैवर्सल फ़ाइलनाम होते हैं। जब शोषण होता है, तो दुर्भावनापूर्ण आर्काइव में एक फ़ाइलनाम को लक्ष्य निष्कर्षण निर्देशिका में जोड़ दिया जाता है, जिसके परिणामस्वरूप अंतिम पथ लक्ष्य फ़ोल्डर के बाहर समाप्त हो जाता है। उदाहरण के लिए, एक zip में "../../file.exe" स्थान वाली फ़ाइल हो सकती है और इस प्रकार लक्ष्य फ़ोल्डर से बाहर निकल सकती है। यदि किसी निष्पादन योग्य या कॉन्फ़िगरेशन फ़ाइल को दुर्भावनापूर्ण कोड वाली फ़ाइल से अधिलेखित किया जाता है, तो समस्या आसानी से Arbitrary Code Execution में बदल सकती है।
निम्नलिखित एक zip आर्काइव का उदाहरण है जिसमें एक हानिरहित फ़ाइल और एक दुर्भावनापूर्ण फ़ाइल है। दुर्भावनापूर्ण फ़ाइल निकालने पर लक्ष्य फ़ोल्डर से बाहर ट्रैवर्स होगा, और /root/.ssh/ में समाप्त होकर authorized_keys फ़ाइल को अधिलेखित कर देगा:
+2018-04-15 22:04:29 ..... 19 19 good.txt
+2018-04-15 22:04:42 ..... 20 20 ../../../../../../root/.ssh/authorized_keys
दुर्भावनापूर्ण packages.tar बनाएं
python3 xpl.py
इसे luigi/contrib/lsf_runner.py के लिए तर्क के रूप में पास करें
अपने /tmp/fodac की जाँच करें :)
https://security.snyk.io/vuln/SNYK-PYTHON-LUIGI-7830489
https://github.com/spotify/luigi/commit/b5d1b965ead7d9f777a3216369b5baf23ec08999
https://github.com/spotify/luigi/issues/3301