OreNPMGuard - ماسح حزم Shai-Hulud
الإصدار 2.0.0 - نظام كشف Shai-Hulud 2.0 ومنع محسّن
أداة أمنية للكشف عن حزم npm المخترقة من هجمات سلسلة التوريد Shai-Hulud (الهجوم الأصلي سبتمبر 2025 و Shai-Hulud 2.0 نوفمبر 2025). تفحص كلاً من ملفات package.json و package-lock.json للكشف عن الإصدارات المثبتة الدقيقة ومؤشرات الاختراق (IoCs). متوفرة بتطبيقين بلغة Python و Node.js مع تهيئة مركزية بصيغة YAML لسهولة الصيانة.
آخر تحديث: 24 نوفمبر 2025 - أكثر من 738 حزمة مخترقة تم تتبعها مع 1,291 تركيبة فريدة من package@version. الآن يكتشف كلاً من متغيرات الهجوم الأصلية Shai-Hulud و Shai-Hulud 2.0.
للمسح عبر أنظمة بيئية متعددة، انظر ore-mal-pkg-inspector.
🔗 المشاريع ذات الصلة
للمسح للحزم الخبيثة عبر أنظمة بيئية متعددة (npm، PyPI، Maven، RubyGems، Go، Cargo)، انظر:
ore-mal-pkg-inspector - ماسح شامل للحزم الخبيثة مع استخبارات تهديدات ديناميكية.
يركز OreNPMGuard تحديدًا على دفاع هجمات Shai-Hulud لحزم npm.
🚨 حول هجمات Shai-Hulud
Shai-Hulud هي دودة ذاتية التكاثر بدأت في اختراق حزم npm في 14-15 سبتمبر 2025، وتمثل أول هجوم ناجح ذاتي الانتشار في نظام npm البيئي، وأحد أشد هجمات سلسلة التوريد لجافا سكريبت التي تمت ملاحظتها حتى الآن. سُميت على اسم الديدان الرملية العملاقة من سلسلة كثيب لفرانك هربرت، وقد تطورت هذه البرمجيات الخبيثة إلى عدة متغيرات.
Shai-Hulud الأصلي (سبتمبر 2025)
أصاب الهجوم الأصلي أكثر من 200 حزمة npm (كما هو متتبع في هذه الأداة) مع تأثر إصدارات متعددة لكل حزمة.
Shai-Hulud 2.0 (نوفمبر 2025) - جديد
ظهر متغير جديد في نوفمبر 2025 مع تغييرات كبيرة:
- أكثر من 738 حزمة مخترقة مع 1,291 تركيبة فريدة من package@version
- أكثر من 25,000 مستودع متأثر عبر حوالي 350 مستخدمًا فريدًا
- مرحلة تنفيذ جديدة: يستخدم نصوص
preinstall (وليس فقط postinstall)
- ملفات حمولة جديدة:
setup_bun.js و bun_environment.js (بالإضافة إلى bundle.js)
- استمرارية محسّنة: ينشئ عمال تشغيل ذاتية الاستضافة باسم 'SHA1HULUD' وأنماط جديدة لسير عمل GitHub
- استهداف متعدد السحب: استخراج بيانات اعتماد AWS و Azure و GCP
- تصعيد صلاحيات Docker: يحاول الحصول على صلاحيات الجذر عبر حاويات مميزة
- تم رفع الحزم بين 21-23 نوفمبر 2025
المرجع: Wiz Research - مقالة مدونة Shai-Hulud 2.0
🦠 كيف يعمل الهجوم
المريض صفر: بدأ الهجوم بحزمة rxnt-authentication التي نُشرت في 14 سبتمبر 2025، الساعة 17:58:50 UTC بواسطة حساب npm المخترق "techsupportrxnt".
سلسلة الهجوم (Shai-Hulud الأصلي):
- التثبيت: تشغل الحزمة الخبيثة نص
postinstall الذي ينفذ bundle.js (حمولة JavaScript تزيد عن 3 ميغابايت)
- حصاد بيانات الاعتماد: يستخدم TruffleHog لمسح رموز GitHub/npm، وبيانات اعتماد AWS/GCP/Azure، ومتغيرات البيئة، ومفاتيح السحابة المكشوفة عبر IMDS
- تسريب البيانات: ينشئ مستودعًا عامًا باسم "Shai-Hulud" تحت حساب GitHub الخاص بالضحية مع الأسرار المسروقة في
data.json (مشفر base64 مرتين)
- الاستمرارية: يحقن سير عمل GitHub خبيث (
.github/workflows/shai-hulud-workflow.yml) يقوم بتسريب أسرار المستودع إلى webhook[.]site
- ترحيل المستودع: يجبر المستودعات التنظيمية الخاصة على أن تصبح مستودعات شخصية عامة مع لاحقة "-migration" ووصف "Shai-Hulud Migration"
- انتشار الدودة: يستخدم رموز npm المسروقة لحقن البرمجيات الخبيثة في حزم أخرى يديرها الضحية، مع زيادة أرقام الإصدارات وإضافة خطافات
postinstall
سلسلة الهجوم (Shai-Hulud 2.0 - نوفمبر 2025):
- التثبيت: تشغل الحزمة الخبيثة نص
preinstall الذي ينفذ setup_bun.js أو bun_environment.js (ملفات حمولة جديدة)
- إنشاء ملفات البيانات: ينشئ ملفات
cloud.json و contents.json و environment.json و truffleSecrets.json
- حصاد بيانات الاعتماد: استهداف متعدد السحب (AWS, Azure, GCP) باستخدام SDKs رسمية، وكشط بيانات الاعتماد من ملفات التهيئة ومتغيرات البيئة و IMDS
- تسجيل عامل تشغيل ذاتي الاستضافة: يسجل الجهاز المخترق كعامل تشغيل ذاتي الاستضافة باسم 'SHA1HULUD'
- حقن سير عمل GitHub:
- ينشئ
.github/workflows/discussion.yaml مع عامل تشغيل ذاتي الاستضافة للوصول الخلفي
- ينشئ
.github/workflows/formatter_*.yml لتسريب الأسرار (ثم يحذف سير العمل لإخفاء النشاط)
- تصعيد صلاحيات Docker: يحاول الحصول على صلاحيات الجذر عبر
docker run --rm --privileged -v /:/host
- تفريغ الأسرار السحابية: يستخدم جلسات موثقة لتفريغ الأسرار من AWS Secrets Manager و Google Secret Manager و Azure Key Vault
- إنشاء المستودعات: ينشئ مستودعات مع "Shai-Hulud" في الوصف للتسريب
🎯 ما يُسرق
- بيانات اعتماد التطوير: رموز PAT الخاصة بـ GitHub (
ghp_*, gho_*)، رموز المصادقة لـ npm
- بيانات اعتماد السحابة: مفاتيح ورموز الوصول لـ AWS و GCP و Azure
- مفاتيح API: Atlassian و Datadog وغيرها من بيانات اعتماد الخدمات
- معلومات النظام: متغيرات البيئة، تفاصيل المضيف، حسابات المستخدمين
- كود المصدر: مستودعات خاصة تم جعلها عامة أو استنساخها
📊 نطاق التأثير
Shai-Hulud الأصلي (سبتمبر 2025):
- أكثر من 200 حزمة اخترقت في قاعدة البيانات المتتبعة (بما في ذلك حزم شائعة مثل
@ctrl/tinycolor, ngx-bootstrap)
- اختراق حسابات GitHub متعددة (يختلف العدد الدقيق حسب مصدر الإبلاغ)
- مستودعات عامة تم إنشاؤها مع تسمية "Shai-Hulud Migration"
- المطورين قد تأثروا من خلال تبعيات الحزم
Shai-Hulud 2.0 (نوفمبر 2025):
- أكثر من 738 حزمة مخترقة مع 1,291 تركيبة فريدة من package@version
- أكثر من 25,000 مستودع متأثر تم إنشاؤها عبر حوالي 350 مستخدمًا فريدًا
- أكثر من 1,000 مستودع جديد كل 30 دقيقة خلال ساعات الحملة الأولية
- يؤثر على حزم من أنظمة بيئية رئيسية: Zapier, ENS Domains, PostHog, Postman, AsyncAPI والمزيد
- سرقة بيانات اعتماد متعددة السحب (AWS, Azure, GCP)
- محاولات تصعيد صلاحيات Docker
سرقة بيانات اعتماد مؤكدة (من حوالي 20,000 مستودع تم تحليلها):
- 775 رمز وصول GitHub مخترق
- 373 بيانات اعتماد AWS مكشوفة
- 300 بيانات اعتماد GCP مكشوفة
- 115 بيانات اعتماد Azure مكشوفة
⚠️ تحذير التسريب عبر الضحايا
هام: أكدت أبحاث Wiz حدوث تسريب عبر الضحايا. هذا يعني:
- قد تُنشر الأسرار المسروقة لضحية واحدة في مستودعات يملكها ضحية مختلفة غير مرتبطة
- إذا وجدت بيانات مشبوهة في مستودعات GitHub الخاصة بك، فقد تنتمي إلى مستخدم آخر مخترق
- قد تكون بياناتك قد سُربت إلى مستودعات لا تملكها
- هذا يعقّد إسناد الهجوم والاستجابة للحوادث
التأثير على التحقيق: عند مراجعة البيانات المسربة في مستودعاتك، تحقق مما إذا كانت البيانات تنتمي بالفعل إلى مؤسستك أو إلى ضحية أخرى.
🔗 الصلة بهجمات سابقة
يرتبط هذا الهجوم مباشرة باختراق s1ngularity/Nx في أغسطس 2025، حيث مكّنت سرقة رمز GitHub الأولية من تنفيذ هجوم سلسلة التوريد الأوسع. العديد من ضحايا Shai-Hulud الأوائل كانوا ضحايا معروفين لهجوم s1ngularity. كما يلاحظ باحثو الأمن دمج محتوى مولّد بالذكاء الاصطناعي ضمن الحملة، مع ثقة معتدلة بأن LLM استُخدم لتوليد النص البرمجي الخبيث لـ bash.
📅 الجدول الزمني للهجوم
حملة Shai-Hulud الأصلية:
- 26 أغسطس 2025: حدوث اختراق s1ngularity/Nx (هجوم تمهيدي)
- 14 سبتمبر 2025 الساعة 17:58 UTC: نشر أول حزمة خبيثة
rxnt-authentication ("المريض صفر")
- 15 سبتمبر 2025: اكتشاف الهجوم والإبلاغ عنه من قبل باحثي الأمن
- 15-16 سبتمبر 2025: انتشار الدودة بسرعة عبر نظام npm البيئي
- 16 سبتمبر 2025: تأكيد اختراق أكثر من 180 حزمة
- 17 سبتمبر 2025: جهود مراقبة وتنظيف مستمرة
- 18 سبتمبر 2025: إصدار v1.2.0 مع تتبع 200 حزمة وأدوات منع محسّنة
حملة Shai-Hulud 2.0:
- 21-23 نوفمبر 2025: رفع الحزم الخبيثة إلى سجل npm
- 24 نوفمبر 2025: اكتشاف الهجوم والإبلاغ عنه من قبل Wiz Research و Aikido
- 24 نوفمبر 2025: إصدار v2.0.0 مع تتبع أكثر من 738 حزمة وقدرات كشف Shai-Hulud 2.0
- مستمر: GitHub يواصل إزالة المستودعات التي أنشأها المهاجم؛ المهاجم يواصل إنشاء مستودعات جديدة
بداية سريعة
المتطلبات الأساسية
- ماسح Python: يتطلب
PyYAML (pip install pyyaml)
- ماسح Node.js: يتطلب
js-yaml (npm install js-yaml)
ماسح Python
# جعل الملف قابل للتنفيذ
chmod +x shai_hulud_scanner.py
# مسح ملف package.json واحد
python3 shai_hulud_scanner.py ./package.json
# مسح package-lock.json للإصدارات الدقيقة
python3 shai_hulud_scanner.py ./package-lock.json