استهدفت نسخة جديدة من دودة Shai-Hulud في npm منظومة TanStack برمز تدميري مصمم لسرقة بيانات الاعتماد وتدمير بيانات المستخدم. حدث الهجوم في 11 مايو 2026، بين الساعة 19:20 و19:26 بتوقيت التنسيق العالمي، عندما نشر المهاجم 84 نسخة ضارة عبر 42 حزمة TanStack في npm.
تم اكتشاف حادثة الأمن السيبراني في غضون 20 دقيقة من قبل باحث خارجي. يحتوي البرنامج الضار، بعد إزالة ثلاث طبقات من الإخفاء، على سلسلة نص مهددة: IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner. هذا ليس مجرد تخويف نفسي. يقوم البرنامج الضار بتنفيذ rm -rf ~/ على جهاز المطور إذا تم إلغاء رمز GitHub المسروق.
كيف وصل المهاجم إلى خط أنابيب إصدار TanStack
نقطة الدخول لم تكن بيانات اعتماد مسروقة من المسؤول. بدلاً من ذلك، استغل المهاجم نمط pull_request_target مدمجاً مع تسميم ذاكرة التخزين المؤقت في GitHub Actions. سمحت التقنية بطلب سحب ضار على مستودع متفرع بالتأثير على تنفيذ الكود داخل تشغيل سير عمل موثوق. تم استخراج رمز OIDC في وقت التشغيل من ذاكرة عملية عداء GitHub Actions.
وجدير بالملاحظة، لم يتم سرقة رموز npm مباشرة. ومع ذلك، يقوم البرنامج الضار بحصاد بيانات الاعتماد على كل مضيف تثبيت، مستخرجاً الأسرار من متغيرات البيئة وملفات .npmrc و.git-credentials ومتاجر جلسات المتصفح والتكوينات السحابية و ذاكرة عداء GitHub Actions عبر /proc/
سلوك حمولة دودة Shai-Hulud في npm
عند تثبيت حزمة مأفوفة، ينفذ الإسقاط وظائف ضارة متعددة. أولاً، يحمّل وقت تشغيل Bun إلى مجلد مؤقت إذا لم يكن Bun موجوداً بالفعل على النظام. يتجنب هذا النهج وحدات Node الأصلية وقواعد كشف EDR معينة.
ثم يسرق البرنامج الضار الأسرار ويشفرها باستخدام مخطط هجين: يقوم مفتاح AES-256-GCM بحجم 32 بايت بتشفير البيانات، ثم يقوم RSA-OAEP-SHA-256 بمفتاح 4096 بت بتغليف مفتاح التشفير هذا إلى المفتاح العام للمشغل. يتم نشر الحمولات المشفرة كمستودعات GitHub عامة تحت حساب الضحية مع أسماء موضوعية ووصف “Shai-Hulud: Here We Go Again.”
يتم تحقيق الثبات من خلال آليات متعددة: خطاف Claude Code SessionStart، ملف VS Code tasks.json مع runOn: folderOpen، سير عمل CodeQL Analysis ضار في GitHub Actions يسرب الأسرار إلى api.masscan.cloud/v2/upload، وحدة launchd أو systemd-user تسمى gh-token-monitor تعمل كمفتاح الموت.
آلية نقل الرموز من نظير إلى نظير
تخدم سلسلة النص الرمزية غرضاً مزدوجاً: إنها تهديد وعلامة تقنية لنقل بيانات الاعتماد من نظير إلى نظير. بعد سرقة رمز GitHub، يقوم البرنامج الضار برسالة واحدة يحتوي معرّفها على IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner متبوعاً بنسخة مشفرة بـ base64 من الرمز المسروق.
تبحث الأجهزة المصابة في فهرس التزام GitHub باستخدام العبارة الدقيقة كمعامل استعلام. تعمل هذه الاستعلام البحثي العام الواحد كلوحة إعلانات حيث تتبادل الأجهزة المصابة رموز GitHub العاملة. لا يوجد خادم قيادة وتحكم خاص مطلوب؛ يصبح فهرس البحث الخاص بـ GitHub نفسه قناة الاتصال.
ما يجب أن يفعله المطورون والمنظمات
- تعطيل تنفيذ المهام التلقائية في VS Code و Claude Code قبل فتح مستودعات غير موثوقة.
- ابحث عن وحدة gh-token-monitor الثابتة تحت ~/Library/LaunchAgents (macOS)، ~/.config/systemd/user (Linux)، أو المهام المجدولة (Windows) وأزلها قبل إلغاء أي رموز.
- قم بتدوير كل رمز GitHub لمس أي مضيف مصاب عبر github.com/settings/tokens وSSO التنظيمي.
- منع الخروج إلى api.masscan.cloud على جدار الحماية؛ إنها نقطة النهاية الثابتة للتسريب.
- ابحث في مستودعات المنظمة عن سير عمل يحتوي على toJSON(secrets) المكتوب إلى ملف و curled خارج.
- ابحث في الحسابات الشخصية والتنظيمية عن المستودعات مع الوصف “Shai-Hulud: Here We Go Again” أو أسماء موضوعية ثلاثية الكلمات مأخوذة من أساطير Dune، مثل tleilaxu-lasgun-263.
- أبلغ عن الإصابات النشطة إلى GitHub Trust & Safety على support.github.com/contact/report-abuse.
بالنسبة للمشاريع التي تعتمد على أي حزم TanStack، قم بتثبيت النسخ المنشورة قبل 11 مايو 2026. نقّي node_modules والملفات المقفلة، امسح ذاكرة npm المؤقتة، وأعد البناء. تعامل مع أي جهاز مطور أو عداء CI قام بتثبيت نسخة مصابة خلال النافذة النشطة على أنه مصاب.
مؤشرات الاختراق والكشف
تشمل مؤشرات الشبكة api.masscan.cloud كنقطة النهاية الثابتة للتسريب، عُقد شبكة Session و Oxen (filev2.getsession.org، seed1.getsession.org، seed2.getsession.org، seed3.getsession.org)، استدعاءات سجل npm التي تعدد حزم المسؤول، وحركة POST الصادرة من عدّاء GitHub Actions التي تحمل أجسام JSON مباشرة بعد تشغيل سير عمل CodeQL Analysis.
تشمل مؤشرات التحكم في المصدر على GitHub رسائل التزام تحتوي على السلسلة الدقيقة IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner، والمستودعات مع الوصف “Shai-Hulud: Here We Go Again،” وأسماء المستودعات المطابقة لأنماط موضوعية ثلاثية الكلمات، والالتزامات المُعزوة إلى [email protected] حيث غير متوقعة، وانفجارات رسائل التزام عامة تنشئ عشرات المستودعات العامة الجديدة في نافذة قصيرة، وسير عمل مع actions/checkout و actions/upload-artifact مثبتة بـ SHA في مجموعة مع خطوات echoing الأسرار.
تشمل المخترقات على مستوى المضيف ملف tanstack_runner.js في أي حزمة أو مستودع، وحدة gh-token-monitor الثابتة، خطافات Claude Code SessionStart التي تشير إلى نصوص غير متوقعة، ملفات VS Code tasks.json التي تحتوي على “runOn”: “folderOpen” مع حمولات بعيدة، عمليات Python تقرأ /proc/
يستخدم حمول البرنامج الضار معاملات تشفيرية محددة: كلمة مرور PBKDF2 0c0e873033875f1bc471eda37e3b9d0f9b89bd41a4bbb4f86746caa2176c40aa، ملح svksjrhjkcejg، و 200,000 تكرار. تم ملاحظة بصمة SHA-256 للمفتاح العام RSA-4096 للمشغل: 166be2b7b58a440f7b17520ffb0368be5d89c76661704b4945417eb04b9ada65 و bf9370f22dc04ee80d4ab8f9a2adc7a900cb39d94c89f64ab3f3726589eac713.
نشرت مؤسسة Cybersecurity Reach هذا التحليل في 11 مايو 2026. تم الحفاظ على الأدلة وإرسالها إلى السلطات المعنية. استخدم التقرير أدوات الذكاء الاصطناعي للمساعدة في الهندسة العكسية وفك تشفير الحمولة، مع التحقق من كل تفصيل تقني مقابل الحمولة الفعلية قبل النشر.
المصدر: Cybersecurity Reach Foundation





