حزمة bee-js الخبيثة نُشرت على npm عبر workflow المشروع الرسمي بتوقيعات provenance سليمة
المغزى: صلاحية النشر لم تعد في الـ token وحده، بل في كل ما يستطيع تشغيل workflow النشر، والـ provenance يثبت مكان بناء الحزمة لا أن أحدًا راجع كودها.
وسم
المغزى: صلاحية النشر لم تعد في الـ token وحده، بل في كل ما يستطيع تشغيل workflow النشر، والـ provenance يثبت مكان بناء الحزمة لا أن أحدًا راجع كودها.
المغزى: موقع قد يُخترق دون أي ثغرة في كوده، بسطر script قديم يحمّل ملفًا من دومين انتهى، وحين يُكتشف الاختراق قد لا يجد المكتشف وسيلة يصل بها إلى صاحب الموقع.
المغزى: الثغرة لا تخص الخوادم وحدها، بل كل image تُبنى فوق Debian أو Ubuntu، لأن سطر apt-get update ثم apt-get install موجود في أغلب ملفات Dockerfile.
المغزى: الـ agent الذي يختار الحزمة من ذاكرته لا من السجل الرسمي يضيف إلى جهاز المطوّر dependency تعمل فعلًا لكنها غير مكتوبة في أي ملف، فلا تراها أدوات الفحص ولا يملك إغلاقها مزوّد واحد.
المغزى: ملف إعدادات الـ agent صار نقطة تستطيع أي أداة على الجهاز الكتابة فيها، والـ agent يقرأ ما فيه كأنه تعليمات صاحب الجهاز، فتنتقل الموافقة من المستخدم إلى الأداة.
المغزى: النصوص التي توجّه سلوك الـ agents صار لها مدير إصدارات وlockfile، لكن ليس لها بعد تنبيهات أمنية، فتدخل دائرة الـ supply chain دون حمايتها الكاملة.
المغزى: أقدم طرق سرقة المفاتيح من الـ CI لم يتغير، الذي تغيّر هو الافتراضي: صار التشغيل ممنوعًا حتى يسمح به صاحب المستودع صراحة.
المغزى: الحماية من انتحال أسماء الحزم حقيقية، لكن سقفها الثابت لا يتغير مع طول الاسم، فيقع ثمنها كله على من يبحث عن اسم قصير بينما تمر الأسماء الطويلة بلا عائق.
المغزى: حذف الإضافة لا يزيل ما زرعته، لأن المفتاح والنفق والتثبيت تعيش في ملفات الجهاز لا داخل الإضافة، والسجل نفسه يغذي Cursor وWindsurf وVSCodium معًا.
المغزى: حين يُفحص الملف في مكان ويُفك في مكان آخر بأداة مختلفة، قد يمر ملف سليم في نظر الفاحص ويتصرف بشكل مختلف عند التثبيت، فيصبح الفحص شكلًا بلا مضمون.
المغزى: الـ secrets خرجت عبر API الخاص بـ GitHub نفسه، فلا يوجد نطاق غريب يمكن حجبه، والحماية التي أوقفت الهجوم في المستودعات العامة لا تشمل المستودعات الخاصة.
المغزى: ملف .pth واحد يكفي ليعمل الكود الخبيث مع كل تشغيل لـ Python حتى دون استيراد المكتبة، وإصدار عاش ساعتين فقط ما كان ليصل إلى من يؤجل قبول الإصدارات الجديدة بضعة أيام.
المغزى: الاعتماد على نموذج صار يُحسب بالوراثة، فمنتج لم يستدعِ DeepSeek يومًا قد يُستبعد لأن أداة في طبقة ما من الـ stack مبنية عليه.
المغزى: البنشمارك يقيس كفاءة الموديل لا أمانته، والموديل المعدّل يعمل غالبًا داخل coding agent يملك المفاتيح وصلاحية تشغيل الأوامر والوصول إلى الشبكة.
المغزى: الاسم وعدد النجوم وكلمة official هي ما يبني عليه المطور قرار الثقة على GitHub، وكلها يمكن صنعها في دقائق، فالحماية هنا جاءت من صاحب مشروع حجز اسمه بنفسه.
المغزى: أي حزمة تقرأ الـ prompt قبل أن يصل إلى النموذج تقف في موضع ثقة كامل، واختراقها لا يكشف المفاتيح فقط بل كل ما كتبه المستخدم للنموذج.
المغزى: الإشارة إلى action بـ tag تعني الثقة بأن صاحبه لن يغيّر ما يشير إليه، والقفل يحوّل هذه الثقة إلى نسخة محددة راجعها الفريق، لكنه لا يقوم بالمراجعة نفسها.
المغزى: أي نظام يربط الثقة باسم قابل للتحرير بدل معرّف ثابت يسمح بانتقال تلك الثقة إلى شخص آخر بمجرد أن يُترك الاسم ويُستعاد.
المغزى: فحص الأصالة يؤكد أن الجهاز أصلي، وهو أصلي فعلًا والشريحة بجانبه. ومصدر الشراء صار جزءًا من الأمان، وتوفير نصف السعر من سوق إعادة البيع هو نفسه حساب المخاطرة.
المغزى: الهجوم لم يحتج إلى ثغرة في GitHub، بل إلى حساب مطوّر حقيقي وفرع بلا مراجعة، ومفتاح حُذف من الكود قبل سنوات يبقى مكشوفًا ما دام في تاريخ git.
المغزى: ضيق طاقة المشرف الواحد ليس مسألة عاطفية بل ثغرة أمنية، فهو ما فتح الباب في قصة xz لمساهم مجهول نال الصلاحيات ثم زرع بابًا خلفيًا.
أنظف pipeline للنشر على npm كان يحتفظ بمفتاح واحد طويل العمر لمهمة صغيرة، وهذا المفتاح تحديدًا هو الطريق الذي سلكته معظم هجمات npm هذا العام.
الحماية حصرت الأسماء التي يستطيع الكود الوصول إليها، لكن المدخل الذي لم يُتوقع لا يحتاج إلى أسماء. السؤال في أي بيئة معزولة هو ما يقبله المحمّل، لا ما أُغلق.
إذا كانت التزامات المصادر المفتوحة اجتماعية لا قانونية، فإن مشاركة المستخدمين في النقاش حولها هي ما يمنحهم حق المطالبة، لا مجرد الاعتماد على كود مجاني.
النطاق الوهمي في المثال لم يعد مثالًا ميتًا؛ الـ agents تقرأ التوثيق وتنفّذه، فصار الرابط المنسي مدخلًا حقيقيًا.
حين يبقى الكود الخبيث مشفرًا ولا يُفك إلا بمدخل معيّن، تفقد مراجعة كود الحزمة قيمتها كوسيلة فحص، ويصبح الاسم الخاطئ بحرف واحد هو الثغرة الحقيقية.
token مسرّب من خط الـ CI كان كافيًا لنشر نسخة خبيثة باسم صاحب الحزمة. الخيار الجديد يضع إنسانًا بخاصية 2FA بين التسريب والنشر.
الهدف ليس سرقة حساب شخص واحد، بل نشر برمجية خبيثة باسم مطوّر موثوق، فتصل تلقائيًا إلى كل من يعتمد على مكتبته في التحديث التالي.
توكن بصلاحية قراءة فقط يُعامل عادة على أنه غير خطر، لكن الكود المصدري نفسه قد يكون الخريطة التي تشرح لمن يقرؤه كيف يدخل.
الهجوم لم يستهدف من يثبّت الحزم بل الـ registry نفسه، وكل خطوة في الـ pipeline تقرأ ملفًا من حزمة مرفوعة وتنفذه هي مساحة هجوم كاملة.