دودة Shai-Hulud تصيب حزم npm: نظرة متعمقة على حادثة سلسلة التوريد

آخر تحديث: 09/25/2025
نبذة عن الكاتب: ج مصدر تريل
  • تم اختراق مئات من حزم npm بواسطة دودة ذاتية التكاثر تسمى Shai-Hulud، وقام GitHub بإزالة أكثر من 500 إصدار مصاب.
  • يقوم البرنامج الخبيث بسرقة الأسرار (رموز npm، وGitHub PATs، ومفاتيح السحابة) وإعادة نشر الحزم المصابة باستخدام حقوق النشر الخاصة بالضحايا.
  • تشير الأدلة إلى استهداف Linux وmacOS، وإساءة استخدام TruffleHog، وسير عمل GitHub Actions الذي يستخرج البيانات.
  • خطوات فورية: تدوير الرموز، ومراجعة التبعيات ومستودعات GitHub، وفرض MFA/2FA، والبحث عن IoCs بما في ذلك bundle.js وحركة مرور webhook.site.

هجوم دودة شاي-هولود npm

ما بدأ كتهديد جديد لسلسلة التوريد في عالم جافا سكريبت، تطور إلى حادثة كبيرة أثرت على نظام npm البيئي. تؤكد التقارير من مصادر متعددة وجود سلالة من البرامج الضارة ذاتية الانتشار. تم تتبعها باسم شاي هولود، مما يعرض بيانات اعتماد المطور للخطر، ويعرض الكود للخطر، ويعيد نشر الحزم الملوثة للحفاظ على استمرار العدوى.

في حين تختلف الأعداد حسب المصدر، فإن الإجماع واضح: نحن نتعامل مع مئات من الإطلاقات السامة، بما في ذلك مكتبة واسعة الانتشار تُنزّل ملايين المرات أسبوعيًا. أزالت منصة GitHub أكثر من 500 إصدار مُخترق للحد من انتشاره، وتحثّ فرق الأمن حول العالم المطورين على تغيير بيانات الاعتماد وتدقيق مستودعاتهم وخطوط الأنابيب بحثًا عن أي أدلة على وجود اختراق.

ما حدث ولماذا هو مهم

تشير التحقيقات إلى أن العملية بدأت على الأرجح بـ إغراءات حصاد بيانات الاعتماد وانتحال هوية npmحثّ المُصَنِّعين على "تحديث" إعدادات المصادقة الثنائية. باستخدام الوصول، نشر المُهَدِّد دودةً تعمل بعد التثبيت، وتبحث عن الأسرار، وتُعيد نشر الإصدارات المُصابة باسم الضحية، مُحوِّلةً المُصَنِّين الموثوق بهم إلى مُضخِّمين للهجوم.

يجمع شاي هولود بين فكرتين خطيرتين: الانتشار الآلي وسرقة الأسراريُسيء استخدام رموز npm المسروقة لنشر إصدارات جديدة من الحزم، ويستغل رموز GitHub ومفاتيح السحابة (AWS وGCP وAzure) للتحرك أفقيًا واستخراج البيانات. يُعزز هذا الاقتران نطاق الانتشار، مما يسمح بامتداد الضرر إلى عدد لا يُحصى من المستخدمين في المصب.

يبدو أن الأهداف تميل نحو أنظمة شبيهة بنظام يونكس. يشير التحليل إلى أن معظم يتم تنفيذ المنطق الخبيث على Linux وmacOSبناءً على عمليات التحقق من البيئة، مع أن مرحلة اكتشاف الأسرار (خاصةً مع TruffleHog) يمكن أن تتم على نطاق أوسع. ضيّق هذا التركيز نطاق تأثير الدودة، ولكنه ترك مجموعة واسعة من أجهزة المطورين عرضة للخطر.

تأثرت حزم من عدة منظمات مرموقة، بالإضافة إلى وحدات مجتمعية شائعة. في أحد الأمثلة البارزة، @ctrl/tinycolor تم سحب الحزمة - التي يتم تنزيلها ملايين المرات أسبوعيًا - إلى المعركة، مما يوضح مدى قدرة العدوى على التغلغل في الرسم البياني للتبعية.

توضيح لمشكلة حزم npm

كيف تعمل الدودة (تحليل فني)

يتم شحن الحمولة الأساسية كملف JavaScript ضخم، يُطلق عليه عادةً اسم Bundle.js (أكثر من 3 ميجابايت في العينات المُلاحظة). يتم تنفيذه عبر خطاف ما بعد التثبيت المُضاف إلى package.json، مما يعني أن الكود الخبيث يُنفَّذ تلقائيًا بعد تثبيت المستخدم للحزمة من npm.

داخل bundle.js توجد وحدات لـ تفاعل واجهة برمجة تطبيقات GitHub، ومجموعات تطوير البرامج السحابية (AWS/GCP)، ومساعدات الشبكات، وبرامج تشغيل TruffleHog لاكتشاف الأسرار. يقوم البرنامج النصي بجرد نظام التشغيل، وتحديد موقع رمز npm، والتحقق من وجود رمز GitHub صالح؛ إذا لم يتم العثور على أي رمز، يتم إيقاف البرنامج النصي، وإلا يبدأ في الاستخراج والتكرار.

من الأمور الغريبة الجديرة بالملاحظة: احتوت بعض الحزم المصابة على أرشيف باسم الحزمة.tar بدلاً من التسمية التقليدية، ظهرت أداة مساعدة للباحثين في تحديد العناصر المخترقة. لاحظ المحللون أيضًا متغيرًا يُنفَّذ كخطاف تثبيت مسبق؛ إحدى الحالات المبكرة التي ذُكرت كانت ngx‑bootstrap 18.1.4، والتي ربما كانت بمثابة رأس جسر أولي في الانتشار.

بمجرد تشغيله، يقوم البرنامج الخبيث بإحصاء الحزم الأكثر تنزيلًا لدى المطور عبر واجهة برمجة تطبيقات البحث npm، يفك ضغط كل ملف tarball، يُسقط bundle.js، ويُدخل أمر ما بعد التثبيت، ويُحسّن الإصدار، ويُعيد النشر إلى npm باستخدام رمز الضحية. هذا يُحوّل محفظة المطور إلى وسيلة لمزيد من الإصابات.

استخراج الأسرار وسير العمل على GitHub

للحصول على بيانات الاعتماد، يقوم Shai-Hulud بالبحث عن رموز npm ورموز الوصول الشخصية لـ GitHub و مفاتيح API السحابية (AWS، GCP، Azure). ثم يُنشئ مستودعًا عامًا على GitHub باسم "Shai-Hulud" ضمن حساب الضحية، ويُرسِل ملف بيانات (مثل data.json) يحتوي على الأسرار المسروقة، مما يُعرِّضها فعليًا للعالم.

وبالتوازي مع ذلك، لاحظ الباحثون زاوية ماكرة في GitHub Actions: الدودة ينشئ فرعًا باسم "شاي-هولود" عبر مستودعات يمكن الوصول إليها، ويدفع ملف سير عمل (shai-hulud-workflow.yml). عند تشغيله، يجمع سير العمل الأسرار ويرسلها إلى البنية التحتية للمهاجم، أحيانًا بعد ترميز Base64 المزدوج لإخفاء المحتوى أثناء النقل.

هناك أيضًا دليل على وجود نص برمجي للهجرة استنساخ المستودعات الخاصة/الداخلية من المنظمات التي يمكن للضحية الوصول إليها، وإعادة استضافتها في حساب المستخدم كمرايا عامة. يبدو أن الهدف هو سرقة الشيفرة المصدرية الآلية من المشاريع الخاصة، مما يزيد الضغط على المنظمات المتضررة.

تشير العديد من التقارير إلى وجود آثار مساعدة الذكاء الاصطناعي داخل نصوص bash (التعليقات وحتى الرموز التعبيرية)، مما يشير إلى أن المهاجم ربما استخدم ماجستير في القانون لتسريع التنمية من مكونات أتمتة البرامج الضارة.

النطاق والحزم البارزة

عبر عمليات الإزالة المنسقة، قام GitHub بإزالة أكثر من 500 إصدار مخترق لإيقاف انتشار الدودة. مع أن العدد الإجمالي الدقيق يتطور باستمرار، إلا أن القائمة تشمل العديد من الأنظمة البيئية والمنظمات، مع تأثير لاحق على المطورين الذين قاموا بالتحديث خلال فترة النشاط.

من بين الحزم والمساحات الأسماء التي يتم الاستشهاد بها بشكل متكرر: @ctrl/tinycolor (ملايين التنزيلات الأسبوعية)، متعددة @crowdstrike/* المكونات (مثل commitlint ومكتبات واجهة المستخدم)، ومجموعة واسعة من وحدات المجتمع بما في ذلك ngx-bootstrap, تحميل ملف ng2, ngx-toastr، وأكثر من ذلك. أشارت CrowdStrike إلى أن منصتها الأساسية لم تتأثر وأن تم تدوير المفاتيح على الفور بعد اكتشاف إدخالات ضارة في السجل العام.

  • أمثلة مرتبطة بالموجة: @ctrl/tinycolor؛ @crowdstrike/commitlint؛ @crowdstrike/foundry‑js؛ @crowdstrike/glide‑core؛ ngx‑bootstrap؛ ng2‑file‑upload؛ ngx‑toastr؛ @nativescript‑community/*؛ @teselagen/*؛ @things‑factory/*؛ وغيرها.
  • ورأى الباحثون أيضًا إصدارات ضارة متعددة لكل حزمة في بعض الحالات، ربما بسبب انتشار الدودة عبر حسابات العديد من المشرفين داخل نفس المشروع.

استجابة المنصة والتغييرات الأمنية

تضمنت الإجراءات الفورية لـ GitHub إزالة الحزم السيئة المعروفة من npm ومنع عمليات التحميل التي تتطابق مع مؤشرات الاختراق (IoCs). كما تُطبّق الشركة ضوابط نشر أكثر صرامة: مصادقة ثنائية إلزامية للنشر المحلي، ورموز دقيقة قصيرة الأجل (مثل سبعة أيام)، وتبني أوسع لـ دار النشر الموثوقة لتقليل الاعتماد على الأسرار طويلة الأمد.

ستؤدي التغييرات القادمة إلى إلغاء الرموز الكلاسيكية القديمة و2FA المستندة إلى TOTP للنشر، افتراضيًا، لا يُسمح بنشر الرمز المميزوتوسيع نطاق موفري النشر الموثوق. أعلن GitHub عن طرح تدريجي مع وثائق وأدلة هجرة، مدركًا أن بعض سير العمل ستحتاج إلى تعديل.

فرق استخبارات التهديدات والاستجابة للحوادث في جميع أنحاء الصناعة (بما في ذلك الوحدة 42، وكاسبيرسكي، وتريند مايكرو، وغيرها) أصدر التوجيهات والاكتشافات في حين مشاركة مؤشرات المخاطر الأمنية مع النظراء والتحالفات لتسريع تحديثات الحماية.

كيفية تقليل المخاطر الآن

تحرك بسرعة بافتراض أن أي جهاز مطور ثبّت حزم npm مؤخرًا قد يكون قد سرب أسرارًا. الأولوية هي تحتوي على إساءة استخدام بيانات الاعتماد، إيقاف المثابرة، وإزالة التبعيات الملوثة من سلاسل البناء.

  • قم بتدوير رموز npm ومفاتيح GitHub PATs/SSH وبيانات اعتماد السحابة (AWS/GCP/Azure) على الفور؛ مع الأخذ في الاعتبار أن جميع الأسرار الموجودة على مضيفات المطورين معرضة للخطر.
  • قم بتدقيق التبعيات عبر package‑lock.json/yarn.lock؛ قم بإزالة الإصدارات المخترقة المعروفة أو تثبيتها بعيدًا عنها؛ أعد التثبيت من مصادر نظيفة.
  • فرض MFA/2FA عبر GitHub وnpm؛ الانتقال إلى Trusted Publishing حيثما أمكن لقطع الرموز طويلة الأمد خارج الحلقة.
  • قم بفحص GitHub بحثًا عن مستودعات عامة غير متوقعة تسمى "Shai‑Hulud"، أو فروع أو سير عمل غير مألوفة، أو عمليات تشغيل إجراءات شاذة.
  • تقوية CI/CD باستخدام RBAC الأقل امتيازًا، والتوقيع/التحقق من القطع الأثرية، والمسح المستمر لـ SCA؛ العلاج الاستهلاك مفتوح المصدر كمخاطرة مُدارة.

نصائح حول البحث عن التهديدات (فحوصات الإشارات العالية)

ابحث عن الاتصالات الصادرة إلى webhook.site المجالات، وخاصةً عنوان URI المُلاحظ في تقارير متعددة. في نقاط النهاية، ابحث عن وجود Bundle.js في الدلائل المؤقتة أو الحزم ولملف GitHub Actions المسمى shai-hulud-workflow.yml.

  • قياس الشبكة: سجلات DNS/URL التي تحتوي على webhook.site؛ قم بتحديد المسار المحدد bb8ca5f6‑4175‑45d2‑b042‑fc9ebb8170b7 إذا تم رؤيته.
  • قياس عن بعد للملفات: إنشاء أو تنفيذ bundle.js؛ وجود shai‑hulud‑workflow.yml على مضيفات مطوري Linux/macOS.
  • قياس عن بعد للعملية: استدعاءات TruffleHog حيث لا يكون متوقعًا (لاحظ أنه قد يوجد استخدام مشروع في بعض المنظمات).

مؤشرات الاختراق (IoCs)

تشمل أدلة الملفات والخيوط التي شوهدت في التحقيقات ما يلي: Bundle.js و shai-hulud-workflow.yml، مع ظهور السلسلة الحرفية 'shai‑hulud' في الفروع والمستودعات وسير العمل.

  • الملفات: bundle.js؛ shai‑hulud‑workflow.yml
  • سلاسل: shai-hulud؛ package.tar
  • Hashes (selected): 46faab8ab153fae6e80e7cca38eab363075bb524edd79e42269217a083628f09; b74caeaa75e077c99f7d44f46daaf9796a3be43ecf24f2a1fd381844669da777; dc67467a39b70d1cd4c1f7f7a459b35058163592f4a9e8fb4dffcbba98ef210c; 4b2399646573bb737c4969563303d8ee2e9ddbd1b271f1ca9e35ea78062538db; C96FBBE010DD4C5BFB801780856EC228; 78E701F42B76CCDE3F2678E548886860
  • الشبكة: https://webhook.site/bb8ca5f6-4175-45d2-b042-fc9ebb8170b7 (تمت ملاحظة المتغيرات والمسارات الفرعية)

الجدول الزمني والتحليل المستمر

تشير التقارير إلى أن الاكتشاف الأولي قد يكون في منتصف سبتمبر 2025، مع إجراءات احتواء الذروة في الفترة من 16 إلى 19 سبتمبرمنذ ذلك الحين، قامت GitHub والعديد من البائعين بتحديث الحماية والكشف والإرشادات. توقعوا المزيد من النتائج بأثر رجعي مع انتهاء المؤسسات من مراجعة الحوادث وتوسيع قوائم الإصدارات المتأثرة.

تشير بعض الأدلة إلى أن الحادث بُني على تسريبات سرية سابقةمما يُبرز كيف يُمكن للرموز طويلة العمر وبيانات الاعتماد المُخزّنة مؤقتًا أن تُؤجج موجات جديدة من الاختراق بعد أشهر. يُفترض أن يُعزز هذا الجهود المبذولة لتقصير أعمار الرموز واعتماد نماذج نشر تُتيح الحد من التمدد السري.

لا تتفق كل التقارير على الإجماليات الدقيقة أو الحزم الأولى في السلسلة، ولكن الصورة العامة تتوافق: دودة npm ذاتية التكاثر لقد أدى ذلك إلى تسليح ثقة المطورين وحقوق النشر الآلية للتوسع بسرعة أكبر - أسرع مما يمكن للعديد من الفرق اكتشافه من خلال المراجعة اليدوية وحدها.

يوضح هذا الحدث مدى سرعة تحوّل خطوط الأنابيب الحديثة إلى طرق سريعة للبرامج الضارة. تشديد المصادقةمن خلال إزالة الرموز طويلة الأمد من المسار، وتعزيز CI/CD، والبحث بشكل مكثف عن IoCs، يمكن للمؤسسات احتواء التعرض اليوم وجعل الموجة التالية أكثر صعوبة في التنفيذ.

الوظائف ذات الصلة: