ثغرة PyPI تعرض آلاف الحزم لخطر الاختراق
آلاف التطبيقات التي استفادت من المصدر المفتوح فهرس حزمة بايثون قد تكون حزم برامج (PyPI) معرضة لخطر الاختطاف والتخريب من قبل جهات ضارة، مما يفتح المجال أمام احتمال وقوع هجمات كبيرة على سلسلة التوريد تؤثر على أعداد أكبر من المنظمات والمستخدمين في مجرى النهر.
هذا هو وفقًا لباحثي التهديدات في jFrog، الذي حدد التقنية التي يتم استغلالها في البرية ضد حزمة pingdomv3 – وهي جزء من خدمة مراقبة موقع Pingdom API المستخدمة على نطاق واسع، والمملوكة لشركة SolarWinds – أثناء مراقبة النظام البيئي مفتوح المصدر. أطلق الفريق على التقنية اسم Revival Hijacking.
التقنية نفسها مشابهة في أساسياتها لـ التطفل على الكتابة – حيث يستغل الجناة الأخطاء الإملائية الشائعة لتسجيل المجالات الضارة.
في هجوم Revival Hijack ضد حزمة pingdomV3، استغل أحد الجهات الفاعلة غير المعلنة ميزة PyPl حيث عندما يتم حذف حزمة أو إزالتها من المستودع، يصبح اسمها متاحًا على الفور للاستخدام مرة أخرى.
كما يوحي الاسم، فهذا يعني أنه يمكن إحياء الحزمة واختطافها بشكل فعال لأغراض شريرة.
وقال برايان موسالي، رئيس فريق أبحاث البرمجيات الخبيثة في شركة JFrog، والذي شارك في تأليف التقرير الناتج، إن تقنية Revival Hijack كانت خطيرة بشكل خاص لثلاثة أسباب رئيسية.
أولاً، على عكس التطفل على النصوص، لا تعتمد هذه التقنية على ارتكاب الضحية لخطأ عند تثبيت الحزمة الضارة. ثانيًا، يعد تحديث حزمة آمنة معروفة إلى أحدث إصدار لها ممارسة شائعة يرى العديد من المطورين أنها قليلة المخاطر – على الرغم من أن هذا ليس هو الحال. ثالثًا، العديد من البرامج التي تستخدم هذه التقنية لا تخاطر بمثل هذه المخاطر. CI/CD سيتم إعداد الأجهزة لتثبيت تحديثات الحزمة تلقائيًا.
“قال موسالي: “إن عملية الخطف التي تحدثها Revival ليست مجرد هجوم نظري، فقد شهد فريق البحث الخاص بنا بالفعل استغلالها في البرية. إن استخدام سلوك ضعيف في التعامل مع الحزم المحذوفة يسمح للمهاجمين بخطف الحزم الموجودة، مما يجعل من الممكن تثبيتها على الأنظمة المستهدفة دون أي تغييرات في سير عمل المستخدم”.
“إن مساحة هجوم حزمة PyPI تتزايد باستمرار. وعلى الرغم من التدخل الاستباقي هنا، يتعين على المستخدمين أن يظلوا يقظين دائمًا وأن يتخذوا الاحتياطات اللازمة لحماية أنفسهم ومجتمع PyPI من تقنية الاختراق هذه.”
يقول موسالي وزميله الباحث أندري بولكوفنيتشينكو إنه بناءً على إحصاء بسيط لحزم PyPI التي تمت إزالتها، فإن ما يصل إلى 120 ألف حزمة يمكن اختطافها. وإذا استبعدنا تلك التي تم تنزيلها أقل من 100 ألف مرة، أو التي لم تكن نشطة لفترة طويلة، أو التي من الواضح أنها مشبوهة، فإن الرقم لا يزال يتجاوز 22 ألف حزمة.
وبمتوسط 309 مشروع PyPI يتم إزالته كل شهر، فإن أي شخص راغب في استغلال تقنية Revival Hijack لديه تدفق ثابت من الضحايا الجدد المحتملين.
ماذا حدث لـ pingdomV3؟
في حالة pingdomV3، قام المالك الأصلي للحزمة، الذي يبدو أنه انتقل إلى مكان آخر، بتحديثها آخر مرة في أبريل 2020، ثم توقف عن العمل حتى 27 مارس 2024 عندما أرسل تحديثًا موجزًا يخبر المستخدمين بتجنب استخدام الحزمة لأنها مهجورة. ثم أزالها في 30 مارس، وعند هذه النقطة ظهر الاسم للتسجيل.
على الفور تقريبًا، نشر مستخدم لديه عنوان بريد إلكتروني على Gmail حزمة بنفس الاسم برقم إصدار أحدث، مدعيًا أنها إعادة تطوير وأشار إلى مستودع GitHub. احتوى هذا الإصدار على كود pingdomV3 القياسي، على الرغم من أن مستودع GitHub المرتبط لم يكن موجودًا في الواقع.
ثم في الثاني عشر من إبريل/نيسان، اكتشفت أجهزة المسح الآلي الخاصة بشركة jFrog نشاطًا غريبًا عندما قدم المالك حمولة مشبوهة مشوشة باستخدام Base64. وقد أدى هذا إلى دق ناقوس الخطر ودفع إلى إجراء تحقيق والكشف اللاحق عن الأمر. وقد أزالت شركة PyPI الحزمة تمامًا في الثاني عشر من إبريل/نيسان، وتم حظر استخدام اسمها.
يبدو أن الحمولة نفسها عبارة عن برنامج ضار من نوع Trojan من Python مصمم لاكتشاف ما إذا كان يعمل في جينكينز CI في هذه الحالة، يقوم البرنامج بتنفيذ طلب HTTP GET إلى عنوان URL يتحكم فيه المهاجم. ولم يتمكن فريق JFrog من استرداد الحمولة النهائية التي كان من المفترض أن يوفرها هذا، مما يشير إلى أن الفاعل الخبيث إما أراد تأخير هجومه، أو كان يحده إلى نطاق IP معين. وفي كل الأحوال، تم إحباطه.
وبسبب القلق بشأن النطاق المحتمل للمشكلة، شرع موسالي وبولكوفنيشينكو في اختطاف الحزم المهجورة الأكثر تنزيلًا، واستبدالها بحزم فارغة حميدة، وكلها برقم الإصدار 0.0.0.1 للتأكد من عدم سحبها عن طريق الخطأ في التحديثات التلقائية.
وبعد التحقق مرة أخرى بعد بضعة أيام، وجدوا أن حزم PyPI الفارغة الخاصة بهم تم تنزيلها أكثر من 200000 مرة.
وبطبيعة الحال، بما أن حزم الاستبدال فارغة، فليس من الممكن أن نقول بثقة كبيرة أن أحد الجهات الخبيثة كان بإمكانه بالفعل تحقيق تنفيذ التعليمات البرمجية في كل مرة، ولكن “سيكون من الآمن للغاية أن نقول” إنه في غالبية الحالات كان بإمكانهم ذلك، كما قال موسالي.
رد PyPI
وفقًا لـ jFrog، كانت PyPI تفكر في تغيير السياسة المتعلقة بالحزم المحذوفة والتي من شأنها القضاء على هذه الثغرة، ولكن لسبب ما لم يتم التوصل إلى نتيجة بهذا الشأن بعد أكثر من عامين من المداولات.
إنه يوضح، عند الحذف، أن الاسم سيتم إصداره للاستخدام من قبل الآخرين، كما يمنع أيضًا حذف إصدارات معينة من الحزم، بما يتماشى مع توصيات OpenSSF.
ومع ذلك، قال موسالي، على الرغم من أن هذا مفيد، فإن النطاق المحتمل لتقنية اختطاف النهضة واسع للغاية لدرجة أن الأمر يتطلب المزيد من العمل.
“نحن ننصح بشدة شركة PyPI بتبني سياسة أكثر صرامة تمنع تمامًا إعادة استخدام اسم الحزمة. بالإضافة إلى ذلك، يجب أن يكون مستخدمو PyPI على دراية بهذا المتجه المحتمل للهجوم عند التفكير في الترقية إلى إصدار حزمة جديد”، كما كتب.
هنريك بليت، باحث أمني في مختبرات إندورقال: “إن هذا الخطر حقيقي، ويعتمد على شعبية الحزمة. ومن المحتمل أن يقل الخطر إذا تم حذف الحزم منذ فترة طويلة، لأنه كلما طالت مدة حذف الحزمة، كلما لاحظ المزيد من المطورين وخطوط الأنابيب عدم توفرها وقاموا بتكييف إعلانات التبعية الخاصة بهم.
“في هذا السياق، تجدر الإشارة إلى أن المثال المقدم تم إحياؤه بعد فترة وجيزة من الحذف، وهو ما قد يشير إلى أن المهاجم قام بمراقبة عمليات حذف الحزمة على PyPI.
“إن إعادة تنشيط الحزم المحذوفة مشكلة معروفة. يغطي تصنيف متجهات هجوم سلسلة التوريد التي تم تصورها بواسطة Endor Labs Risk Explorer (شوكة من مشروع GitHub sap/risk-explorer) هذا المتجه باعتباره [AV-501] مرجع معلق، وتشمل الأمثلة الداعمة مستودعات GitHub المُعاد إحياؤها, تمت إعادة تسمية مستودعات GitHub وقال بليت في تعليقات أرسلها عبر البريد الإلكتروني لمجلة Computer Weekly: “لقد قمنا بإحياء حزم npm”.
وأضاف بليت أن هذا يؤكد على أهمية وجود إرشادات أمنية أكثر صرامة لمستودعات الحزم، مثل تلك التي اقترحها OpenSSF.
وقال إنه بالنسبة للمدافعين، فإن استخدام سجلات الحزم الداخلية من شأنه أن يحمي المطورين من مثل هذه الهجمات من خلال نسخ الحزم مفتوحة المصدر بحيث تظل متاحة حتى في حالة حذفها. ومع ذلك، حذر بليت من أن مثل هذه السجلات الداخلية تحتاج إلى تكوين بحيث يتم فحص إصدارات الحزم الجديدة الضارة المحتملة بدقة قبل النسخ.