npm 12 يوقف install scripts افتراضيًا، وبعد 3 أيام يتجاوز اختراق jscrambler الحماية الجديدة
إغلاق سطح هجوم لا يلغي الهجوم بل ينقله، والمهاجم انتقل من وقت التثبيت إلى وقت الاستيراد، ومعه تحولت ملفات إعدادات مساعدات البرمجة إلى هدف مفضل.
صدر npm 12 في 8 يوليو 2026، وأهم ما فيه أنه أصبح يوقف الـ install scripts افتراضيًا، إلى جانب الاعتماديات القادمة من Git أو من عناوين URL بعيدة. ومن يحتاجها يفعّلها يدويًا عبر npm approve-scripts أو الخيار –allow-git.
والـ install scripts أوامر مثل preinstall وpostinstall، كان يحق لأي حزمة أن تحددها لتُنفَّذ تلقائيًا أثناء التثبيت. أي أن الحزمة كانت قادرة على تشغيل كود على جهاز المطور بمجرد تثبيتها، قبل أن يفتح ملفاتها أو يستخدمها. وكان ذلك تصميمًا مقصودًا لتمكين الحزم من عمليات build أو تجهيز ما تحتاجه، لكنه كان أيضًا أوسع باب لهجمات سلسلة التوريد (supply chain) لسنوات.
وبعد ثلاثة أيام، في 11 يوليو 2026، اختُرقت عدة إصدارات من مكتبة jscrambler على npm، هي 8.14.0 و8.16.0 و8.17.0 و8.18.0 و8.20.0، ومعها إضافاتها لـ webpack وgulp وgrunt وmetro. واستمرت نافذة الاختراق ساعتين، من 16:12 إلى 18:12 بتوقيت لندن، جرى خلالها 1,479 تنزيلًا ملوثًا.
والتفصيل الأهم أن الإصدارات الأولى في الهجوم استخدمت preinstall، وهي الطريقة المعروفة. أما الإصداران 8.18.0 و8.20.0 فوضعا الكود الخبيث داخل الملفات الأساسية للمكتبة نفسها. فلم يعد الكود يعمل وقت التثبيت، بل وقت استيراد المكتبة (import) داخل كود المطور. ولذلك لا يوقفه –ignore-scripts ولا npm 12، لأنه لا يوجد script يعمل أصلًا.
والدرس هنا أن إغلاق سطح هجوم ينقل الهجوم في الغالب بدل أن يلغيه. وهذا لا يقلل من قيمة npm 12، فهو يوقف أغلب الهجمات السهلة، وهي أغلب الهجمات فعلًا. لكن ما يتبقى هو المهاجم الذي يتابع التغييرات بالدقة نفسها.
وبحسب التحليل، كان الكود الخبيث يبحث تحديدًا عن ملفات إعدادات مساعدات البرمجة بالذكاء الاصطناعي، مثل Claude Desktop وCursor وWindsurf وZed وVS Code، لأنها تحتوي على API keys وtokens ومسارات المشاريع.
ويضاف إلى ذلك أن تثبيت الحزم أصبح كثيرًا ما يتم عبر وكيل ذكاء اصطناعي ينفذ الأمر مباشرة، دون لحظة الشك التي قد يشعر بها المطور أمام اسم حزمة غير مألوف، وهي لحظة كانت تعمل كطبقة حماية غير مكتوبة.
المصادر
من عدد الجمعة 3 صفر - 17 يوليو