كشفت دراسة حديثة أجراها Snyk حول حالة أمان المصدر المفتوح نتائج مثيرة للقلق بالنسبة لحزم NPM ، 86٪ من الثغرات الأمنية تكمن في التبعيات الثانوية التي غالبًا ما يكون لديك القليل من التحكم فيها.
ما هي التبعيات الثانوية؟
عند تثبيت شيء ما من NPM ، فأنت لا تقوم فقط بتثبيت حزمة واحدة ، بل تقوم بتثبيت تلك الحزمة ، بالإضافة إلى أي من التبعيات المطلوبة أيضًا. يمكنك عرض شجرة التبعية هذه لمشاريعك الخاصة باستخدام
npm ls --depth=10 حتى المشروع الأساسي الذي يحتوي على حزمتين مثبتتين يحتوي فعليًا على أربعة مستويات من التبعيات يبلغ مجموعها 10 حزم فعلية:

المشكلة إذن واضحة. أنت تسحب رمزًا من حزم أكثر بكثير مما قد يقترحه
package.json. وكل واحدة من هذه الحزم هي خطأ أمني محتمل.
وفقًا لتقرير من Snyk ، هذا بالضبط ما يحدث في بيئات مفتوحة المصدر مثل NPM و Ruby Gems. المشكلة منتشرة ، ومعظم الأخطاء تأتي من الحزم غير المباشرة التي لم تثبتها يدويًا.

الجانب المشرق: هذه المشكلة ليست بالسوء الذي تبدو عليه. يحتوي NPM على أداة مدمجة للتدقيق والتي ستلتقط معظم الأشياء السيئة وتخبرك بالتحديث. نظرًا لانتشار التدقيق ، تحظى هذه الأخطاء الأمنية بمزيد من الاهتمام ويتم إصلاحها عند ظهورها ، مع إرسال التحديثات بسرعة إلى المستخدمين المتأثرين.
غالبية الأخطاء التي اكتشفها Snyk كانت هجمات XSS محتملة ، وعلى الرغم من أن هذا ليس رائعًا ، إلا أن تأثيرها في العالم الحقيقي منخفض إلى حد ما. ترجع الأخطاء الرئيسية المؤثرة إلى بضع عشرات من هجمات النماذج الأولية للتلوث - احتمال تنفيذ كود تعسفي - بالإضافة إلى بعض الحزم الخبيثة أو المخترقة المصممة خصيصًا لمحاولة التسلل إلى
package.json المطمئنين
المشكلة تتحسن أيضًا ، أو على الأقل تحظى بمزيد من الاهتمام. انخفض عدد الأخطاء التي تم الإبلاغ عنها في NPM بنسبة 20٪ مقارنة بالعام الماضي ، ونفس الاتجاه ينطبق على الأنظمة البيئية الأخرى لمدير الحزم.

الخلاصة الرئيسية من كل هذا: يجب أن تفكر في مصدر شفرتك. مع ظهور برامج البرمجيات الحرة والمفتوحة المصدر ، من السهل الوقوع في جحيم التبعية برمز لم تكن تخطط لإضافته.
الحل: التدقيق
لا بد أن تكون هناك أخطاء في أجزاء عشوائية من التعليمات البرمجية مفتوحة المصدر ، وبينما لا يمكنك حقًا إصلاح بعض الأخطاء الصغيرة دون تطوير كل شيء داخليًا ، يمكنك التقاط بعض الأخطاء السيئة بشكل خاص باستخدام عمليات تدقيق منتظمة.
المشكلة ليست جديدة بشكل خاص ، و
npm
لديها أداة مدمجة لهذه المراجعة-
npm. لقد رأيته بالتأكيد من قبل ، لأنه يعمل تلقائيًا عند التثبيت:

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