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