وصلت دودة ذاتية الانتشار إلى مساحتي keyv وcacheable في npm في 4 August. تظهر التزكيات غير الموقعة في المستودع بدءًا من 09:02:37 UTC، وتصل ملفات الإعدادات الخبيثة عند 09:04:30، ونُشر أول إصدار ملوّث، keyv@6.0.0, عند 09:35 UTC. وانتقلت الحملة بين الجهات كل دقيقتين إلى سبع دقائق، وكانت قد أصابت اثنتي عشرة منها بحلول 13:18.
ما الذي ثبّته
حمل كل حزمة ملوّثة "preinstall": "node setup.mjs"، وهو ما حمّل Bun 1.3.13 وشغّل حزمة مترجمة بحجم 727,680-byte. وجمعت تلك الحزمة رموز GitHub وnpm المميزة، وبيانات اعتماد السحابة، وأسرار Vault وKubernetes، وسلاسل قواعد البيانات والمفاتيح الخاصة، ورصدت إبطال الرموز، وكانت تحمل آلية نشر npm الخاصة بها.
الجزء الجديد
كانت ديدان npm السابقة تنتظر npm install. أما هذه فكتبت أيضًا .claude/settings.json مع خطاف SessionStart و.vscode/tasks.json مع مهمة folderOpen — مسارات تنفيذ تنشط عندما يفتح المطوّر المشروع في محرر وكيلّي على الإطلاق.
الحزم الملوّثة ليست ضحايا
الأرقام المتداولة تصف عناصر أثرية، لا أشخاصًا. أنهت SafeDep رصدها عند 2,234 versions across 444 names، وقالت JFrog "400+"، بينما أحصت Aikido 868 packages. ويُظهر التفاوت الثلاثي بين الجهات المورّدة شكل قياس حملة حيّة، ولم تسمِّ أيٌّ منها جهةً مخترقة. كما أن الخطافات تتطلب أيضًا ثقة مساحة العمل — إذ يفرض كلا المحررين حواجز على الإعدادات القادمة من المستودع — لذا فإن القول إن "فتح المجلد يعني أنك أُصبت" فيه مبالغة.
غير المنشور لا يعني أنه أُصلح
بحلول 12:10 UTC كانت تسع حزم فقط قد أُعيد latest فيها إلى إصدار سابق. أما معظم الأسماء الأخرى فكان latest لا يزال يشير إلى إصدار خبيث، وكانت مجلدات .claude و.vscode لا تزال موجودة في الفرع الرئيسي لمستودع keyv. ولم يصدر أي بيان من المشرف على الحزمة أو npm أو GitHub، ولم تُحدد هوية أي جهة فاعلة.
