
luigi هي حزمة تساعدك على بناء خطوط أنابيب معقدة من الوظائف المجمعة (batch jobs). وهي تتعامل مع حل التبعيات، وإدارة سير العمل، والتصور، ومعالجة الأخطاء، والتكامل مع سطر الأوامر، وغير ذلك الكثير.
الإصدارات المتأثرة من هذه الحزمة معرضة لكتابة ملفات تعسفية عبر استخراج الأرشيف (Zip Slip) بسبب التحقق غير السليم من مسار الملف الوجهة في دالة _extract_packages_archive.
يتم استغلالها باستخدام أرشيف zip مُصمم خصيصًا يحمل أسماء ملفات تعبر المسارات (path traversal). عند استغلالها، يتم ربط اسم ملف في أرشيف خبيث بدليل الاستخراج الهدف، مما يؤدي إلى أن يكون المسار النهائي خارج المجلد الهدف. على سبيل المثال، قد يحتوي أرشيف zip على ملف بموقع "../../file.exe" وبالتالي يخرج من المجلد الهدف. إذا تم استبدال ملف تنفيذي أو ملف إعداد بملف يحتوي على تعليمات برمجية خبيثة، يمكن أن تتحول المشكلة بسهولة إلى تنفيذ تعليمات برمجية تعسفية.
فيما يلي مثال لأرشيف 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