ثلاث حزم npm تنتحل mathjs تجمع أكثر من 3 ملايين تحميل في 6 أيام بكود خبيث مشفّر
حين يبقى الكود الخبيث مشفرًا ولا يُفك إلا بمدخل معيّن، تفقد مراجعة كود الحزمة قيمتها كوسيلة فحص، ويصبح الاسم الخاطئ بحرف واحد هو الثغرة الحقيقية.
وسم
حين يبقى الكود الخبيث مشفرًا ولا يُفك إلا بمدخل معيّن، تفقد مراجعة كود الحزمة قيمتها كوسيلة فحص، ويصبح الاسم الخاطئ بحرف واحد هو الثغرة الحقيقية.
كل محاولة لفرض رسوم عبر الرخصة انتهت بـ fork، ونقل نقطة التحصيل إلى الـ registry قد يوصل المال إلى الذيل الطويل من المطورين الذين لا تصلهم أي منحة.
token مسرّب من خط الـ CI كان كافيًا لنشر نسخة خبيثة باسم صاحب الحزمة. الخيار الجديد يضع إنسانًا بخاصية 2FA بين التسريب والنشر.
توكن بصلاحية قراءة فقط يُعامل عادة على أنه غير خطر، لكن الكود المصدري نفسه قد يكون الخريطة التي تشرح لمن يقرؤه كيف يدخل.
قررت npm أن تأخير الناشر الشرعي ثلاثة أيام أرخص من انتشار حزمة مسمومة لساعة واحدة، وصار لترتيب خطوات أي maintainer قبل الإصدار ثمن.
النشر على مرحلتين يضع بابًا بين اختطاف الـ workflow ووصول الحزمة إلى المستخدمين، ومن يستهلك الحزم فقط يستفيد دون أن يفعل شيئًا.
مفتاح النشر في أنظمة CI كان يفتح الحساب كله، فتسريبه كان يعني فقدان السيطرة على الحساب قبل نشر أي نسخة ملوثة.
القبض على المتهمين لا ينهي الخطر، لأن كود الدودة نُشر قبل ذلك على منتديات الجريمة. والـ token واسع الصلاحيات في أنظمة CI يبقى الهدف نفسه.
قرار الانتقال إلى ESM الذي أجّلته فرق كثيرة لسنوات اتخذه الإطار نيابة عنها، وأغلب كلفة الترقية ستقع في أدوات البناء والاختبار لا في منطق التطبيق.
حماية من ملفات zip bomb كانت مسؤولية كل مطور يتذكرها أو ينساها، صارت جزءًا من الـ runtime نفسه، ومعها قد تختفي حزمة كاملة من كثير من المشاريع.
جزء كبير من مشكلة يعمل على جهازي ولا يعمل على الـ CI سببه ملف lockfile يتغير دون تغيير حقيقي، والإصدار الجديد يعالج هذا السبب تحديدًا.
النطاق الحقيقي والشهادة الحقيقية لم يعودا دليلًا على سلامة الصفحة، لأن أي CDN يعكس registry عامًا يصبح استضافة مجانية لكل من يستطيع نشر حزمة.
كل حزمة تختفي من المشروع تعني سلسلة توريد أقصر وحساب مشرف أقل يمكن اختراقه، لكن الاعتماد لا يختفي، بل ينتقل من npm إلى الـ runtime نفسه.
نقل وظيفة أمنية حساسة من حزمة خارجية إلى النواة يقلّص سطح الهجوم في المشروع دون أي جهد من فريقه، وهو مكسب نادرًا ما يُلتفت إليه.
ملفات إعدادات المحررات وأدوات الذكاء الاصطناعي صارت سطحًا يُنفَّذ منه الكود، بينما تتعامل معها أدوات الفحص كأنها إعدادات لا تستحق القراءة.
توقيع provenance يثبت أين بُنيت الحزمة وكيف، لا أنها آمنة، والخلط بين السؤالين يجعل التوقيع إشارة ثقة لا يستحقها.
إغلاق سطح هجوم لا يلغي الهجوم بل ينقله، والمهاجم انتقل من وقت التثبيت إلى وقت الاستيراد، ومعه تحولت ملفات إعدادات مساعدات البرمجة إلى هدف مفضل.