الهجوم في فقرة واحدة
تعمل الدودة التي تسميها The Hacker News أول دودة سلسلة توريد ذاتية الانتشار في ثلاث خطوات. أولاً، يُثبّت مطور ضحية حزمة npm مخترقة — ناقل العدوى الأولي في المجموعة المُبلَّغ عنها علناً كان حزمة باسم pgserve وtyposquats أشقائها. ثانياً، يفحص سكريبت postinstall جهاز المطور بحثاً عن رموز مصادقة npm ورموز GitHub واعتمادات السحابة، يُصدّرها إلى نقطة تجميع المهاجم، ثم يستخدم رمز npm محلياً لنشر إصدار جديد خبيث من كل حزمة يملكها الضحية. تُؤكد تغطية BleepingComputer لنفس المجموعة أن هجوم سلسلة توريد npm ينتشر ذاتياً لسرقة رموز المصادقة بهذا النمط بالضبط. ثالثاً — وهذا ما يجعل الحادثة نقطة تحول — تُسقط الدودة أيضاً ملف Python .pth يعترض مفسر Python على نفس الجهاز، مما يتيح نشراً لاحقاً إلى PyPI من نفس المضيف المخترق.
النتيجة أن تثبيت واحد ناجح عند أي نقطة في رسم التبعيات يصبح عدوى متعددة المنظومات متتالية، تنتشر بهوية الضحية نفسه وسمعته.
لماذا “ذاتية الانتشار” مهمة
معظم هجمات سلسلة التوريد في السنوات الثلاث الماضية كانت طلقة واحدة. يُنشر typosquat، يُثبّته بضع مئات من المطورين، تُبلَّغ الحزمة الخبيثة وتُسحب، تُحاوَل النسبة، وتنتهي القصة. تكسر دودة pgserve هذا النمط لأن كل عدوى ناجحة تُنتج تلقائياً حزماً خبيثة إضافية منشورة من قبل مطورين ذوي سمعة مشروعة — وهذه الحزم بدورها تُعدي مزيداً من المطورين.
هناك خاصيتان تُكبّران نطاق الانفجار. أولاً، تتورط اعتمادات مشروعة: عمليات إعادة النشر الخبيثة موقّعة ومدفوعة بالرمز الحقيقي للمالك، مما يُبطل الكشف الساذج القائم على السمعة ومعظم استدلالات “ناشر جديد”. ثانياً، يملك صانعو الحزم الشائعة مستهلكين كثيرين في الأسفل؛ يمكن لصانع واحد مخترق لحزمة بـ 50,000 تثبيت أسبوعي إنتاج حدث تضخيم بـ 50,000 تثبيت في تحديث واحد لسجل npm.
أفادت The Hacker News كذلك بشكل متوازٍ أن جهات تهديد من كوريا الشمالية تنشر أكثر من 1,700 حزمة npm خبيثة عبر حملة منفصلة لكن متداخلة — دليل على أن منظومة الخصوم حول npm مزدحمة الآن بما يكفي لأن تعمل عدة جهات متطورة في نفس السجل في وقت واحد. يُطّر تحليل RapidFort الأطول الصورة الأوسع: PyPI وnpm والجبهة الجديدة لهجمات سلسلة توريد البرمجيات هما، بحسب حجتهم، الآن أكثر سطح الهجوم إنتاجاً ضد برمجيات المؤسسات.
إعلان
تشريح حمولة pgserve
تحتوي حمولة دودة pgserve، المُعاد بناؤها من التقارير العامة، على أربعة مكونات يستحق فهمها لأن كل واحد يقابل ضابطاً دفاعياً محدداً:
حصاد postinstall. سكريبت postinstall في package.json يُنفَّذ عند كل npm install دون تأكيد المستخدم. يمشي السكريبت عبر نظام الملفات بحثاً عن .npmrc و.yarnrc و~/.config/gh/ و~/.aws/credentials و~/.docker/config.json، ويُحوّل الرموز المُكتشفة إلى خادم staging.
روتين إعادة النشر. يستخدم السكريبت بعدها رمز npm المحصود لاستدعاء npm publish على كل حزمة يملك الرمز حقوق كتابة عليها، مع حقن كود الدودة في كل إصدار منشور. لأن رمز الضحية نفسه مستخدم، يقبل السجل عمليات النشر دون مؤشرات شذوذ ترفعها أنظمة “ناشر غير معروف”.
خطّاف عبر المنظومات. يُكتب ملف .pth في site-packages Python للضحية. تُحمّل ملفات .pth عند بدء المفسر ويمكنها تنفيذ كود عشوائي — مما يعطي الدودة موطئ قدم في بنى Python على نفس المضيف، تستخدمه للامتداد إلى النشر في PyPI.
الثبات والقياس عن بعد. تُثبّت الدودة إدخال cron/launchd صغيراً وتُرسل beacon دورياً بقائمة الاعتمادات المرصودة حديثاً وعمليات نشر الحزم، مما يسمح للمشغّل بقياس فعالية الحملة بوقت شبه فوري.
ما يُبطئ فعلاً دودة ذاتية الانتشار
الدفاعات التي تقلل الأثر ليست غريبة — إنها تلك التي أجّلتها فرق أمن المؤسسات لأن “سلسلة التوريد سنصل إليها يوماً ما”. تجعل حادثة pgserve “يوماً ما” هو اليوم.
تقييد نطاق رموز npm وتدويرها. كل رمز automation npm طويل الأمد هو ناقل محتمل للدودة. استخدم رموزاً قصيرة الأمد مقيّدة بالحزم المحددة التي تحتاج مهمة CI نشرها فعلاً، لا رموز read-and-publish واسعة دون قائمة حزم. يدعم كل من GitHub Actions وGitLab CI رموزاً عابرة عبر OpenID Connect federation — هذا التغيير وحده يُزيل معظم قدرة الدودة على إعادة النشر.
اشتراط 2FA عند النشر لجميع الصانعين. يدعم npm --auth-type=legacy لكنه يدعم أيضاً 2FA مدعوماً بـ WebAuthn عند النشر. عندما يتطلب كل نشر عاملاً ثانياً بحضور بشري، تنكسر حلقة إعادة النشر التلقائية للدودة. هذا مجاني، موجود بالفعل في السجل، ومُعطّل كثيراً لأجل الراحة.
تبني provenance المدعوم بـ Sigstore لحزمك الخاصة. يسمح مشروع Sigstore المدمج في npm كـ --provenance للناشرين بتوقيع شهادات البناء من نظام CI الذي أنتج الحزمة. يمكن للمستهلكين بعدها التحقق من أن الحزمة بُنيت في المستودع المتوقع بسير العمل المتوقع — مما يجعل إعادة نشر خبيثة من رمز مسروق تفشل بوضوح في فحص الشهادة. التبني لا يزال مبكراً، لكن العلم بجودة إنتاج.
قفل سكريبتات postinstall. استخدم npm install --ignore-scripts في CI للتبعيات غير الموثوقة، وعامل أي تبعية انتقالية جديدة تُشغّل postinstall على أنها تحتاج مراجعة يدوية. تُعيّن عدة مؤسسات كبرى الآن افتراضياً ignore-scripts=true في .npmrc وتُدرج حزماً محددة في قائمة سماح.
مراقبة ملفات .pth في بيئات Python. تنفيذ .pth هو فخ Python معروف لا تُشير إليه معظم أجهزة مراقبة سلسلة التوريد. أضف ضابطاً ينبه عند ظهور ملف .pth جديد في دليل site-packages خارج نشاط المُثبّت المعروف.
فصل اعتمادات المطورين عن الإنتاج. أعلى دفاع قيمة هو الممل: يجب ألا تحمل محطات عمل المطورين نفس الرموز التي تحملها خطوط أنابيب الإنتاج. افصل هويات النشر حسب البيئة، مع حدوث نشر الإنتاج فقط من CI، أبداً من laptop.
التحول الأكبر: سلسلة التوريد قادرة الآن على الديدان
كشف pgserve معلم هيكلي، لا مجرد حملة أخرى. طالما ظلت هجمات سلسلة التوريد typosquats منفردة، كانت مشكلة نظافة مطورين. الدودة ذاتية الانتشار التي تعبر المنظومات هي مشكلة استجابة للحوادث، لأن الاحتواء يتطلب عملاً منسقاً من مشغلي السجلات ومن عدة صانعين وربما آلاف من المستهلكين في الأسفل في غضون ساعات.
الدلالة لفرق أمن المؤسسات هي أن سياسة استهلاك المصدر المفتوح تحتاج إلى الصعود في سلم الأولويات. دودة تنشر حزماً باستخدام سمعة صانع مشروع تُهزم كل نظام كشف يعتمد على جدة الناشر أو إشارات سمعة ساكنة؛ الدفاعات المستدامة الوحيدة هي التشفيرية (provenance، شهادات موقّعة) والمعمارية (رموز مقيّدة، اعتمادات مجزأة).
الدلالة للصانعين هي أن نظافة النشر أصبحت الآن خارجية ذات عواقب نظامية. صانع واحد يُعطّل 2FA عند النشر لأجل الراحة يزيد الآن مادياً من سطح هجوم منظومة الانحدار بأكملها لحزمه.
دودة pgserve في أبريل 2026 هي الأولى من نوعها تصل الإنتاج. لن تكون الأخيرة.
الأسئلة الشائعة
ما هي دودة سلسلة توريد ذاتية الانتشار؟
دودة سلسلة التوريد هي برمجية خبيثة تُسلَّم عبر حزمة مخترقة، بمجرد تثبيتها تستخدم اعتمادات الضحية المشروعة لنشر إصدارات حزم خبيثة إضافية، والتي بدورها تُعدي ضحايا جدداً. حادثة pgserve في أبريل 2026 هي أول مثال مُبلَّغ عنه على نطاق واسع يعبر أيضاً من npm إلى PyPI، باستخدام أحمال ملفات .pth للوصول إلى مفسر Python على نفس المضيف.
كيف يختلف هذا عن typosquatting أو الحزم الخبيثة التقليدية؟
يعتمد typosquatting على خطأ مطوّر في كتابة اسم حزمة ويمكن للدفاعات القائمة على السمعة القبض على الناشر المزيف. الدودة ذاتية الانتشار تستخدم رمز الصانع الحقيقي نفسه لإعادة نشر حزم مشروعة مع كود خبيث محقون. سمعة الناشر وتاريخ التنزيلات حقيقيان، مما يُبطل معظم استدلالات الكشف. provenance التشفيرية عبر Sigstore هي واحدة من الضوابط القليلة التي لا تزال تُشير إلى الإصدار الخبيث.
ما الدفاع الأعلى ROI ضد ديدان مثل pgserve؟
استبدال رموز أتمتة npm طويلة الأمد برموز قصيرة الأمد مقيّدة بالحزمة، صادرة عبر OIDC federation من CI. هذا يُزيل القدرة التي تحتاجها الدودة لإعادة نشر الحزم باعتمادات مسروقة، حتى لو أُصيب الجهاز الأولي. إنه تغيير تهيئة يستغرق ساعات لا أسابيع، ويقلل بشكل ذي مغزى من نطاق انفجار كل حادثة سلسلة توريد لاحقة.






