وسّع GitHub نطاق تنبيهات Dependabot الخاصة بالحزم الخبيثة من نظام npm إلى ثمانية أنظمة بيئية، بعد ربط GitHub Advisory Database ببيانات مستودع OpenSSF المخصص للحزم الخبيثة. وتشمل التغطية الجديدة npm وPyPI وMaven وRubyGems وNuGet وGo وcrates.io وPHP Composer، ما يسمح برصد تبعيات ضارة في مشاريع تستخدم لغات وأدوات تتجاوز JavaScript.
وكان Dependabot قد بدأ في وقت سابق من العام برصد البرمجيات الخبيثة ضمن تبعيات npm. أما التوسع الجديد فيعتمد على استيراد سجلات OpenSSF بصيغة OSV، بدلاً من بناء أنظمة كشف منفصلة لكل نظام بيئي. ووفق المنشور، يضم مستودع OpenSSF أكثر من 15 ألف تقرير منذ إطلاقه في عام 2023، مع استمرار نموه عبر بلاغات المجتمع ومصادر الكشف الآلية، بما في ذلك حزم التشابه الاسمي، وحزم خلط التبعيات، والاستيلاء على الحسابات، والملفات الثنائية المسبقة البناء الخبيثة.
مستورد موحد لبيانات الحزم الخبيثة
طوّر فريق هندسة أمن سلسلة الإمداد في GitHub مستورداً واحداً يتبع نمط المستوردات المستخدمة مع مستودعات التنبيهات العامة. ويقرأ المستورد الملفات التي تغيرت منذ آخر تشغيل، ثم يتحقق من الحقول الإلزامية والأنواع والتنسيق وفق مخطط OSV قبل إدخال أي سجل إلى قاعدة البيانات. أما السجلات التي تفشل في التحقق فتُرفض وتُسجل للمراجعة، بدلاً من تعديلها تلقائياً وتمريرها.
بعد اجتياز التحقق، تُحوّل السجلات إلى إدخالات تغذية تتضمن المصدر والمعرّف ومعرّف CVE عند توفره، إلى جانب حفظ السجل الأصلي كاملاً كنسخة مرجعية. كما يعالج المستورد اختلافات البيانات بين المصادر، مثل استخدام OpenSSF اسم PyPI بينما تستخدم قاعدة GitHub اسم pip، وتمثيل الإصدارات المتأثرة كقيم منفصلة بدلاً من نطاقات، وغياب إصدار قابل للاستخدام في بعض التقارير، وسحب تقارير تبين لاحقاً أنها غير صحيحة.
منع التكرار وحماية مسار النشر
تظهر مشكلة إضافية لأن GitHub نفسه يساهم ببيانات في مستودع OpenSSF، فيما تتدفق تنبيهات GitHub الخاصة ببرمجيات npm الخبيثة إلى المستودع. ولمنع إعادة استيراد البيانات ذاتها، يعتمد المستورد على بيانات مصدر السجل في OSV، ويستبعد أي إدخال يحمل الوسم ghsa-malware، لأنه بدأ أصلاً من GitHub. ويشير المنشور إلى أن أكثر من نصف تقارير npm الجديدة التي تصل إلى المستودع شهرياً كانت تعود إلى تنبيهات GitHub، ولذلك تُستبعد باعتبارها دورات إعادة إدخال.
وتُنشر تنبيهات البرمجيات الخبيثة تلقائياً من دون قراءة بشرية لكل تقرير قبل النشر، لأن تأخير التنبيه أياماً قد يمنح المهاجم وقتاً إضافياً عندما تكون الحزمة تسرق بيانات الاعتماد. ويختلف ذلك عن تنبيهات الثغرات، التي تتطلب عادةً تحققاً بشرياً من مطابقة الحزم ونطاقات الإصدارات وشدة المشكلة.
ثلاث طبقات للتعامل مع البيانات الخاطئة
- حدود الدفعات: يحدد كل تشغيل سقفاً قابلاً للضبط لعدد التنبيهات التي يمكن إنشاؤها. وإذا تجاوزت البيانات السقف، يتوقف التشغيل بالكامل ولا يُنشر شيء، مع إرسال العدد الدقيق للتنبيهات.
- تتبع المصدر: يرتبط كل تنبيه بالالتزام المحدد في مستودع malicious-packages، ما يتيح تحديد مصدر التقرير أثناء الحوادث.
- التراجع: يمكن تعريف كل دفعة والتراجع عنها كوحدة واحدة إذا تسربت بيانات ملوثة، بدلاً من إزالة التنبيهات يدوياً من قاعدة البيانات.
التفعيل للمستخدمين
أصبحت تنبيهات التبعيات الخبيثة في Dependabot متاحة اختيارياً، ويمكن تفعيلها من إعدادات أمان المستودع أو المؤسسة أو بيئة العمل. بعد التفعيل، يطابق Dependabot التبعيات مع تنبيهات البرمجيات الخبيثة في GitHub Advisory Database، بما في ذلك إجراء مطابقة لاحقة مع التنبيهات الموجودة مسبقاً.