يواجه عالم تطوير المصادر المفتوحة تهديدات سيبرانية متنوعة ومتزايدة. لا يزال GitHub يواجه نوعًا من الهجمات المستمرة منذ العام الماضي، حيث قام المهاجمون باستنساخ عدد هائل من المستودعات (repositories). يبدو أن “حروب الاستنساخ” لم تنتهِ بعد! إذا لم تكن على دراية بما يحدث: يكافح GitHub لاحتواء هجوم مستمر يغمر الموقع بملايين مستودعات الأكواد. تحتوي هذه المستودعات على برمجيات خبيثة (malware) مشفرة تهدف إلى سرقة كلمات المرور والعملات المشفرة من أجهزة المطورين. والنتيجة هي ملايين النسخ (forks) بأسماء مطابقة للمستودعات الأصلية. نظرًا لأن محركات البحث وتصنيفات بحث GitHub نفسها تفضل النشاط الأخير، غالبًا ما تطفو هذه المستودعات المستنسخة إلى الأعلى في نتائج البحث، لتجذب المطورين غير المتوقعين إلى سحب (pull) أكواد قد تحتوي على برمجيات ضارة. لقد استُهدف أحد مستودعاتي بمثل هذا الهجوم، مما دفعني إلى مراقبته عن كثب. يقدم هذا الدليل نصائح لمساعدتك في اكتشاف استنساخ المستودعات الخبيثة قبل أن تفاجئك.
ما هو هجوم Repository Confusion؟
يتضمن هجوم Repository Confusion الخطوات التالية:
- استنساخ المستودعات الشرعية.
- حقن أكواد خبيثة في النسخة المستنسخة.
- رفع النسخة المستنسخة.
- الانتشار عبر جهات فاعلة غير مدركة.
هجمات سلسلة التوريد (Supply Chain Attacks)
إذا بحثت عن repository confusion على الإنترنت، ستجد أنه نوع من هجمات سلسلة التوريد (supply chain attack). هجوم سلسلة التوريد هو تهديد غير مباشر يحاول فيه المتسللون اختراق نظام من خلال استهداف طرف ثالث موثوق به أو مكون برمجي، بدلاً من مهاجمة الهدف الأساسي مباشرة. هذه ليست المرة الأولى التي يحدث فيها هذا. قبل استهداف GitHub، تعرضت PyPI لهجوم في عام 2023 بحزم (packages) مزيفة تتظاهر بأنها شرعية. وقد أغرت هذه الحزم مستخدمي pip المهملين بتنزيل حمولات خبيثة (malicious payloads) (تحتوي في معظم الحالات على برمجيات خبيثة لسرقة المعلومات infostealer malware).
🛡️ استراتيجيات التخفيف الأساسية
قبل استخدام أي مستودع (repository)، تأكد من اتباع هذه الخطوات واتخاذ هذه الاحتياطات.
التحقق من ملفات تعريف المساهمين (contributors profiles)
هذا هو الفحص الأول: إذا رأيت ملف تعريف (profile) على GitHub فارغًا إلى حد ما – ملفًا بلا سمعة (reputation) يحتوي على مستودع واحد فقط ولكن مع الكثير من الالتزامات (commits) اليومية – فهذا مثير للريبة بعض الشيء. في المستودع المزيف، سيتم إدراج المؤلف الأصلي كمساهم (contributor) أيضًا. تحقق من هذا الملف الشخصي. يجب أن تكون قادرًا على العثور على المستودع الشرعي وإجراء بعض المقارنات.

في لقطة الشاشة أعلاه، يمكنك رؤية solotech143، وهو نسخة خبيثة (وقد تم إزالته منذ ذلك الحين).
البحث عن المستودعات المستنسخة
يمكنك إجراء بحث على GitHub باسم المستودع وفرز النتائج حسب الأحدث أولاً. تميل المستودعات الخبيثة إلى الظهور في أعلى نتائج البحث لأنها تُحدّث بشكل متكرر. قد يكون المستودع الأصلي مخفيًا في عمق نتائج البحث.

هذا أشبه بحروب الاستنساخ. وهنا تكمن الخطورة: عادةً ما ينقر المستخدمون على النتائج القليلة الأولى في البحث، وفي هذا النوع من الهجمات، يكاد يكون مضمونًا أن ترى المستودع المزيف للمهاجم في أعلى النتائج. يحقق المهاجم ذلك من خلال تزويد المستودع المزيف بالتزامات (commits) جديدة ومنتظمة (وأحيانًا حتى بضع نجوم stars!). في حالتي، كان المستودع الأصلي عبارة عن مشاركة في مسابقة HackaViz 2025. توفر مسابقات الهاكاثون (Hackathons) سطح هجوم جيدًا لأنها، بالإضافة إلى جذب مجتمعات متخصصة، حساسة للوقت أيضًا. الآن، دعنا نتقدم عامًا ونتخيل أن Hackaviz 2026 ستبدأ قريبًا. لقد تفوق المهاجم بسهولة على المشاركة الأصلية غير المعدلة. أي مستودع من المرجح أن تتم زيارته عندما يبحث المتنافسون المستقبليون – غير المدركين لعملية الاحتيال – عن المشاركات السابقة؟
فحص نمط الالتزامات (commit pattern)
هنا تأخذ الأمور منحى غريبًا. تُدار الاستنساخات الخبيثة بواسطة عملاء آليين (automated agents)، لذا فإن سجل الالتزامات (commit history) يتناسب مع نمط غير معتاد بالنسبة للبشر. بالطبع، يمكنك الأتمتة لأسباب مشروعة عديدة، ولكن هذا سيتبع دائمًا هدفًا واضحًا وسيكون هناك دائمًا لمسة بشرية في مرحلة ما. في هذه الحالة، الالتزامات لا تتوافق. دعنا نرى كيف يبدو ذلك في لقطات الشاشة أدناه:

منتظم كالساعة…

… ونشط بشكل مفرط!
فحص سجل الالتزامات (commit history)
لا يمكنك ذلك! وهذا هو الجزء الغريب. أنت قادر فقط على رؤية الالتزام الأخير (last commit) والالتزام الأولي (initial commit). فلماذا يتم إخفاء جميع الالتزامات الأخرى؟ هل يعجبك عندما يخفي شخص ما الأشياء عنك؟

لتاريخ 10 يوليو، يجب أن نكون قادرين على رؤية 11 التزامًا، فأين العشرة الأخرى؟

حسنًا، يمكنك فقط التحقق من الالتزام الأول والأخير. وهذا ليس كثيرًا لمستودع مسجل فيه أكثر من 2000 التزام.
فحص محتويات الالتزامات (commit contents)
بما أنني أستطيع دائمًا فحص الالتزام الأخير (last commit)، فقد قمت بفحص بعضها. إنها تشترك في نفس النمط: يقوم الروبوت (bot) بالتكرار المستمر على ملف README، ويجري نفس التعديلات. كما ترون في لقطة الشاشة أدناه، يقوم بتحديث الملف بروابط تؤدي إلى إصدار (release) مصاب.

أعلاه يمكنك رؤية عميل ذكاء اصطناعي (AI agent) عالقًا في حلقة تغيير ملف README. التعديلات البشرية أكثر تنوعًا. في مشروع يديره البشر، سترى مزيجًا كبيرًا من الالتزامات: التزامات الميزات (feature commits)، والتجارب الاستكشافية، وإصلاحات الأخطاء (bug fixes)، وتعديلات الأنماط (styling tweaks)، وأحيانًا التراجعات (reverts). غالبًا ما يقوم استنساخ الروبوت ببساطة بالكتابة فوق الملفات، أو تحديث الإصدارات (bump versions)، أو إعادة حقن نفس الحمولة الخبيثة (malicious payload) بشكل متكرر دون أي مساهمة حقيقية في قاعدة الكود (codebase).
مقارنة الملفات المعنية
هنا يأتي دور الحس السليم. لديك ملفان README:
- الأول يتكون من محتوى مولد بالذكاء الاصطناعي (
AI-generated content) مليء بالرموز التعبيرية (emojis) والمعلومات قليلة القيمة. إنه مصمم فقط لإغرائك بالنقر على رابط تنزيل الإصدار (release). - الآخر يتبع أفضل الممارسات لإنشاء ملف
READMEجيد. إنه دقيق ومنظم جيدًا ويعمل كمساعد وشرح قيم للكود. كما يتعمق في أهم جوانب المشروع. هذه عادةً علامة جيدة على أن المستودع عضوي (organic) وأصلي.
بعض المعلومات حول البرمجيات الخبيثة
ماذا لدينا حتى الآن؟ حسنًا، رابط مشبوه في ملف README مولد بالذكاء الاصطناعي (AI-generated) ومريب، يتوافق مع نمط مشبوه للغاية في سجل الالتزامات (commit history). الآن، دعنا نلقي نظرة فاحصة على هذا الإصدار المشكوك فيه ونرى ما قد يكشفه عنه ماسح ضوئي لمكافحة الفيروسات عبر الإنترنت.

البرمجيات الخبيثة معبأة فقط في الإصدار miniature-fortnight-v1.7.6.zip.

أعلاه يمكنك رؤية نتيجة الفحص باستخدام ماسح ضوئي عبر الإنترنت. يحتوي ملف .zip على أربعة ملفات فقط:
config.txt
launch.bat
lua51.dll
luajit.exe
هذه الملفات غير مرتبطة تمامًا بالمشروع الأصلي (مشروع علم بيانات Python مع دفاتر Jupyter notebooks مدمجة بتطبيق React app يستخدم three.js). لن أخوض في التفاصيل في هذا المقال. ولكن للفضوليين، إنها برمجيات خبيثة لسرقة المعلومات (infostealer malware) (برمجيات خبيثة ستقوم بتسريب بيانات الاعتماد الخاصة بك ومعلومات قيمة أخرى حول تكوينك) مشابهة لتلك الموصوفة بالتفصيل هنا.
وقت الإجراء
إذا اكتشفت مستودعًا (repository) يحتمل أن يكون خبيثًا، فإليك بعض الخطوات التي يمكنك اتخاذها:
- توثيق بعض الأدلة.
- إبلاغ القائمين على صيانة المستودع الأصلي (
original repository maintainers). - الإبلاغ عن النسخة المستنسخة الخبيثة إلى
GitHub.
الإبلاغ عن مستودع أو ملف تعريف (profile) على GitHub سهل وسريع. انتقل إلى صفحة ملف تعريف المستخدم، انقر على “Block or report” في الشريط الجانبي الأيسر واختر “Report abuse” في النافذة المنبثقة. سيتعين عليك إكمال نموذج اتصال قصير ببعض التفاصيل حول السلوك قبل الإرسال. إذا لزم الأمر، يمكنك العثور على مزيد من المعلومات على GitHub.
الخاتمة
هذا وصف لهجوم واحد فقط، من منظور شخص اكتشف أن أحد مستودعاته قد استُهدف. من المحتمل أن تكون هناك حالات لهجمات أكثر تعقيدًا. لكن فيضان المستودعات المستنسخة الذي نراه على GitHub هو بالتأكيد أتمتة ضخمة منخفضة الجودة. الكمية على حساب الجودة. لأكون صريحًا، أنا مندهش جدًا لأن الخوارزميات (algorithms) المصممة في GitHub لم تتمكن من اكتشاف هذا الهجوم. يثير هذا أيضًا أسئلة تتعلق بالذكاء الاصطناعي (AI). ماذا يحدث عندما يتم تدريب نماذج اللغة الكبيرة (LLMs) على محتوى خبيث؟ هذا سؤال أعم حول تسميم الذكاء الاصطناعي (AI poisoning). قد يتمكن الإنسان بسهولة من اكتشاف الأنماط والمحتوى منخفض الجودة في الوقت الحالي. ولكن… تخيل أنك تستخدم عملاء برمجة (coding agents) متعددين. هل سيلتقط هؤلاء العملاء النسخة المستنسخة الخبيثة بدلاً من الأصلية؟ كيف يمكن تمييز المستودعات من منظور الأتمتة؟ سيقوم المهاجمون بتحسين تكتيكاتهم، مما يجعل النسخ المستنسخة تبدو أكثر شبهاً بالبشر، وبالتالي يغروننا بسهولة أكبر في فخاخهم. هذا حقًا موقف يجعلني أتساءل عن الأيام الأولى لـ Google. في ذلك الوقت، كان على الشركة محاربة كميات هائلة من البريد العشوائي (spam) بسبب حشو الكلمات المفتاحية (keyword stuffing) وتكتيكات تحسين محركات البحث (SEO) التلاعبية. هل سيتعين على شركات التكنولوجيا الكبرى أن تمر بلحظة “تحديث فلوريدا” (Florida update) لمواجهة صعود البريد العشوائي المولد بالذكاء الاصطناعي (AI generated spam)؟
مصادر إضافية
- وصف مفصل للهجوم
- توصيات السلامة الكاملة
- ابق على اطلاع، وابقَ آمنًا!
💡 الخلاصة التقنية
تُظهر هجمات Repository Confusion على GitHub تطورًا في أساليب الهجمات السيبرانية، حيث تستغل نقاط ضعف في أنظمة البحث والثقة في المصادر المفتوحة. يجب على المطورين تبني نهج حذر يتضمن التحقق الدقيق من ملفات تعريف المساهمين، وفحص أنماط وسجلات الالتزامات غير الطبيعية، ومقارنة محتويات الملفات، خاصة ملفات README، بحثًا عن مؤشرات البرمجيات الخبيثة. مع تزايد استخدام الذكاء الاصطناعي في توليد المحتوى، يصبح التمييز بين المشاريع الأصلية والمستنسخة الخبيثة أكثر صعوبة، مما يستدعي يقظة مستمرة وتطوير أدوات كشف أكثر تطوراً.