كشفت حملة برمجيات خبيثة جديدة، تم تتبعها باسم ForceMemo، عن اختراق المئات من حسابات GitHub وإدخال شفرة خبيثة مخفية في مستودعات Python، مع ترك أثر ضئيل للغاية.
تعود أقدم الإصابات المؤكدة إلى 8 مارس 2026، ولا تزال الحملة نشطة، حيث تتأثر مستودعات جديدة يوميًا. تستهدف الحملة مجموعة واسعة من مشاريع Python، بما في ذلك تطبيقات الويب Django، وأكواد تعلم الآلة، ولوحات Streamlit، وواجهات برمجة التطبيقات Flask، والحزم القابلة للتثبيت عبر pip.
هجوم ForceMemo على مستودعات Python: تهديد متنامٍ
يقوم المهاجم بإلحاق شفرة خبيثة مشفرة بملفات Python شائعة الاستخدام مثل setup.py و main.py و app.py. يؤدي أي مطور يقوم بتثبيت حزمة مباشرة من مستودع مخترق أو يقوم باستنساخ وتشغيل التعليمات البرمجية المتأثرة عن غير قصد إلى تشغيل البرمجيات الخبيثة على جهازه.
كان باحثو StepSecurity أول من حدد الحملة وأبلغ عنها علنًا، وأطلقوا عليها اسم ForceMemo نسبة إلى سمتيها التقنيتين الرئيسيتين: استخدام أمر force-push في Git للكتابة فوق سجل المستودع بصمت، واستخدام مذكّرات معاملات سلسلة كتل Solana كقناة قيادة وتحكم.
كيفية عمل اختراق ForceMemo
تم تتبع مصدر اختراق الحسابات إلى GlassWorm، وهو برنامج سرقة معلومات منفصل ينتشر عبر امتدادات VS Code و Cursor الخبيثة. تحتوي حمولة المرحلة الثالثة من GlassWorm على وحدة مخصصة تقوم بحصاد رموز GitHub من مساحة تخزين امتدادات VS Code، ومديري بيانات اعتماد git، ومتغير بيئة GITHUB_TOKEN.
بمجرد سرقتها، تمنح هذه الاعتمادات المهاجم سيطرة كاملة لإعادة كتابة مستودعات المطور. لدى حسابات مثل BierOne و wecode-bootcamp-korea و HydroRoll-Team، تم اختراق ستة مستودعات لكل منها، مما يوضح كيف يمكن لبيانات اعتماد واحدة مسروقة أن تعرض حساب مطور بأكمله.
تسلل خفي عبر Force-Push
تم تأكيد إصابة المئات من مستودعات Python عبر مئات حسابات GitHub بنفس البرمجيات الخبيثة، ويتزايد العدد باستمرار. وقع مطورون يعملون على تطبيقات Django، وأكواد بحث تعلم الآلة، وحزم واجهات برمجة التطبيقات مفتوحة المصدر في مرمى هذا الهجوم، مما يجعل ForceMemo أحد أكثر هجمات سلسلة التوريد انتشارًا التي تستهدف نظام Python البيئي في الأشهر الأخيرة.
بدلاً من فتح طلب سحب أو إنشاء تثبيت جديد ظاهر، يستخدم المهاجم طريقة أكثر هدوءًا. يأخذ المهاجم أحدث تثبيت شرعي على الفرع الافتراضي، ويلحق برمجيات خبيثة مشفرة بملف Python رئيسي، ثم يقوم بعمل force-push للتثبيت المعدل مرة أخرى إلى المستودع.
أدلة الاختراق وتقنية التعمية
يتم الاحتفاظ برسالة التثبيت الأصلية واسم المؤلف وتاريخ المؤلف، مما يجعل الأمر يبدو وكأن شيئًا لم يتغير. العلامة الوحيدة للتلاعب هي عدم تطابق بين تاريخ المؤلف الأصلي وتاريخ المُثبّت الفعلي، مع فجوات تتراوح بين تسعة أشهر وتسع سنوات في المستودعات المتأثرة.
يتم تعيين عنوان البريد الإلكتروني للمُثبّت باستمرار إلى السلسلة “null”، والتي تبدو كعلامة بصمة لأداة المهاجم. قبل القيام بأي شيء آخر، تتحقق البرمجيات الخبيثة مما إذا كان النظام المصاب يستخدم محليًا أو منطقة زمنية روسية، وفي هذه الحالة، تتوقف عن التنفيذ تمامًا – وهي ممارسة تشغيلية معروفة بين مجموعات مجرمي الإنترنت في أوروبا الشرقية.
آلية القيادة والتحكم عبر سلسلة الكتل
عندما تعمل البرمجيات الخبيثة، فإنها تتصل بمحفظة سلسلة كتل Solana لاسترداد تعليماتها التالية. نظرًا لأنه لا يمكن حذف بيانات سلسلة الكتل أو فرض رقابة عليها، يمكن للمهاجم نشر عناوين URL للحمولة المحدثة في أي وقت من خلال المذكرات على السلسلة، مما يجعل البنية التحتية محصنة ضد الإيقاف.
تقوم البرمجيات الخبيثة أيضًا بالاستعلام عن تسع نقاط نهاية Solana RPC منفصلة كبدائل. يُنصح المطورون بالبحث في ملفات Python المستنسخة عن متغير العلامة lzcdrtfxyqiplpd، والتحقق من ~/init.json في دليلهم الرئيسي، والبحث عن مجلد node-v22.9.0 غير المتوقع الذي يشير إلى أن البرمجيات الخبيثة قد قامت بالفعل بنشر مشغل الحمولة الخاص بها.
يجب على مسؤولي المستودعات تأكيد تطابق فرعهم الافتراضي مع آخر تثبيت شرعي معروف، مع إيلاء اهتمام وثيق لأي عدم تطابق بين تاريخ المؤلف وتاريخ المُثبّت في السجلات الأخيرة.

