
تحليل مفصل لـ CVE-2022-21668، ثغرة RCE حرجة في تحليل Pipenv لملف requirements.txt، بما في ذلك كود الثغرة، آليات الاستغلال، والتحقق من التصحيح.
في هذه الوثيقة، تتم مناقشة ثغرة Pipenv (CVE-2022-21668) بالتفصيل. تغطي الأقسام التالية رمز الخلل في ملف pipenv/utils.py الذي يفتح الباب أمام هجمات RCE المختلفة، وكذلك الإصلاح الأخير الذي يتحقق من اتصال SSL/TLS ويتحقق من اسم المضيف مقابل قائمة المضيفين الموثوقين.
Pipenv Pipenv هي أداة تقوم تلقائيًا بإنشاء وإدارة بيئة افتراضية (virtualenv) لمشاريعك، بالإضافة إلى إضافة/إزالة الحزم من ملف Pipfile الخاص بك أثناء تثبيت/إلغاء تثبيت الحزم.
لمزيد من المعلومات انقر هنا
نحتاج إلى ملف requirements.txt كلما كنا نتعامل مع أنظمة معقدة. يأتي هذا الملف النصي أيضًا في متناول اليد عندما نريد نقل التطبيق إلى بيئة أخرى. يحتوي هذا الملف على جميع الحزم/التبعيات المطلوبة لتشغيل التطبيق بنجاح بالإضافة إلى أرقام الإصدارات الخاصة بها.
ملف requirements.txt نموذجي:
مصدر الصورة: https://www.idkrtm.com/what-is-the-python-requirements-txt/
إذا لم يكن لدينا ملف requirements.txt، فقد لا يكون من الممكن نقل تطبيقنا بنجاح إلى نظام آخر، حيث قد تكون هناك مشكلة توافق بين إصدارات الحزم.
بدءًا من إصدار Pipenv 2018.10.9 وقبل الإصدار 2022.1.8، يسمح عيب في تحليل pipenv لملفات المتطلبات للمهاجم بإدراج سلسلة مصممة خصيصًا داخل تعليق في أي مكان داخل ملف requirements.txt، مما يؤدي إلى قيام الضحايا الذين يستخدمون pipenv لتثبيت ملف المتطلبات بتنزيل التبعيات من خادم فهرس حزم يتحكم فيه المهاجم. هجوم RCE ممكن جدًا ضد هذه الأنظمة شديدة الضعف.
تضع cvedetails هذه الثغرة على أنها حرجة / شديدة.
درجة CVSS من cvedetials:
(المصدر: https://www.cvedetails.com/cve/CVE-2022-21668/)
يتم استدعاء هذه الدالة بشكل متكرر على كل سطر من ملف المتطلبات، وتستخدم وحدة argparse للعثور على الخيارات --index-url و --extra-index-url و --trusted-host ومعالجتها. ومع ذلك، فإنها لا تتجاهل هذه الخيارات عند ظهورها في التعليقات. المشكلة في الكود هي أنه سيقوم بتحليل السلاسل التي تبدأ بـ "--index-url، --extra-index-url، و --trusted-host" في أي مكان في الملف. هذه الوظيفة تجعله أكثر ضعفًا.
لمزيد من المعلومات انقر هنا
هجمات تنفيذ التعليمات البرمجية عن بُعد (RCE) تسمح للمهاجم بتنفيذ تعليمات برمجية ضارة عن بُعد على جهاز كمبيوتر. يمكن أن يتراوح تأثير ثغرة RCE من تنفيذ البرامج الضارة إلى حصول المهاجم على سيطرة كاملة على جهاز تم اختراقه.
إذا تمكن المهاجم من إخفاء خيار --index-url ضار في ملف متطلبات يقوم الضحية بتثبيته باستخدام pipenv، فيمكن للمهاجم تضمين تعليمات برمجية ضارة عشوائية في الحزم المقدمة من خادم الفهرس الضار الخاص به والتي سيتم تنفيذها على مضيف الضحية أثناء التثبيت (تنفيذ تعليمات برمجية عن بُعد/RCE). سيكون الاستغلال باستخدام هذه التقنية بسيطًا نسبيًا بالنسبة للمهاجم الذي لديه معرفة أساسية بلغة Python، حيث يمكن للمهاجم ببساطة بناء توزيعة مصدرية لأي من الحزم المحددة في ملف المتطلبات، وتضمين تعليمات برمجية ضارة عشوائية في ملف setup.py. عندما يقوم pip بالتثبيت من توزيعة مصدرية، يتم تنفيذ أي كود في ملف setup.py بواسطة عملية التثبيت.
لمزيد من التفاصيل انقر هنا
الإصدار 2022.1.8 وما فوق يحتوي على هذا الإصلاح. تمت إضافة دالة جديدة “get_host_and_port(url)” في ملف pipenv/utils.py. تقوم هذه الدالة باسترداد المضيف والمنفذ لعنوان URL المقدم في ملف requirements.txt. يتم تحليل عنوان المضيف المسترد باستخدام urllib3 الذي يتحقق داخليًا من اتصال SSL/TLS. كما يتم التحقق من عنوان المضيف مقابل قائمة بعناوين المضيفين الموثوقين.
مزيد من المعلومات هنا
قد تستخدم الهجمات الأساسية RCE الأولي الذي يتم تشغيله عندما يقوم الضحية بتثبيت الحزمة الضارة للمهاجم لسرقة بيانات الاعتماد من مضيف الضحية، أو استنزاف موارد المضيف لتعدين العملات المشفرة، أو تثبيت مجموعات الاستغلال أو البرامج الضارة الأخرى. قد يستخدم المهاجمون الأكثر تطورًا تقنيات أكثر تقدمًا للحفاظ على الوصول إلى مضيف الضحية، أو إخفاء أو إزالة أدلة هجومهم عن طريق حذف المراجع إلى خادم الفهرس الضار في ملفات Pipfile و Pipfile.lock التي تم إنشاؤها بواسطة pipenv أو مؤشرات الاختراق المحتملة الأخرى. قد يحاول المهاجمون ذوو المهارات العالية الانتقال إلى أهداف إضافية من المضيف المخترق الأولي، وقد يستفيدون من أي بيانات اعتماد مكشوفة في بيئة المضيف المخترق أو التفويض الضمني الممنوح للمضيف للحصول على وصول مميز إلى أنظمة أو موارد أخرى، مثل مستودعات المصادر أو سجلات الحزم. (المصدر: https://github.com/pypa/pipenv/security/advisories/GHSA-qc9x-gjcv-465w)
خطأ في التحليل لا يأخذ في الاعتبار تحليل التعليقات بشكل صحيح، أدى إلى ثغرة حرجة.
عنصر قائمة مع وجود مثل هذه الثغرة في متناول اليد، حتى إعداد خادم الفهرس الضار لتقديم إصدارات الحزم المخترقة هو أمر بسيط نسبيًا، حتى بالنسبة لمهاجم غير متطور.