أعلنت منصة GitHub عن تغييرات وُصفت بأنها “جذرية” في الإصدار القادم من npm 12، أبرزها تعطيل سكربتات التثبيت الافتراضية بهدف مواجهة هجمات سلسلة التوريد.
توضح الشركة أن أوامر npm install تُعد أكبر سطح لتنفيذ التعليمات البرمجية في النظام البيئي لـ npm، إذ تسمح بتشغيل سكربتات من كل اعتماد متسلسل، ما يعني أن اختراق حزمة واحدة في شجرة الاعتمادات يمكن أن يؤدي إلى تنفيذ تعليمات خبيثة على جهاز المطور أو بيئة CI/CD.
تغييرات رئيسية في الإصدار الجديد
من أبرز التغييرات التي ستدخل حيز التنفيذ:
- لن يقوم npm install بتنفيذ سكربتات preinstall أو install أو postinstall من الاعتمادات إلا إذا تمت الموافقة عليها صراحةً.
- لن يتم حل الاعتمادات القادمة من Git إلا إذا تم السماح بها عبر خيار –allow-git.
- لن يتم حل الاعتمادات من روابط بعيدة مثل ملفات tar عبر https إلا إذا تمت الموافقة عليها عبر –allow-remote.
- حتى عمليات البناء الأصلية باستخدام node-gyp سيتم حجبها ما لم تتم الموافقة عليها، بما في ذلك سكربتات prepare من اعتمادات git أو file أو link.
إغلاق مسارات الاستغلال
تؤكد GitHub أن تعطيل هذه السكربتات بشكل افتراضي يغلق مساراً رئيسياً للاستغلال، حيث كان بإمكان ملفات إعداد Git مثل .npmrc تجاوز إعدادات الأمان حتى مع استخدام خيار –ignore-scripts. وبذلك يصبح تنفيذ التعليمات البرمجية أثناء التثبيت خياراً يتطلب موافقة صريحة من المطور، بدلاً من أن يكون سلوكاً افتراضياً.
توصيات للمطورين
أوصت GitHub المطورين بالتحضير لهذه التغييرات عبر الترقية إلى الإصدار npm 11.16.0 أو أحدث، وتشغيل التثبيت المعتاد ومراجعة التحذيرات التي تظهر.
لمراجعة الحزم التي تحتوي على سكربتات، ثم الموافقة على الموثوق منها وتحديث ملف package.json. بعد الترقية، ستستمر فقط السكربتات التي تمت الموافقة عليها في العمل، بينما يتم تعطيل أي سكربتات غير معتمدة.
سياق أوسع لمواجهة التهديدات
يأتي هذا التغيير بعد إدخال إعدادات مثل min-release-age في وقت سابق من العام، والتي تتيح رفض أي إصدار جديد لحزمة إذا لم يمضِ على نشره عدد محدد من الأيام، كإجراء وقائي ضد الحزم الخبيثة المنشورة حديثاً.
هذه الخطوات تعكس إدراك GitHub لخطورة هجمات سلسلة التوريد التي تستهدف بيئة npm، حيث يُعتبر التحكم في سكربتات التثبيت خطوة جوهرية لتقليل فرص إدخال تعليمات برمجية خبيثة عبر الاعتمادات غير الموثوقة.





























