سيُنشر هذا المقال قريباً
موعد النشر: 2026-05-17 18:48
سيظهر المقال تلقائياً عند حلول الموعد — لا حاجة لإعادة التحميل.
أكبر هجوم على سلسلة توريد البرمجيات في 2026
في 11 مايو 2026، شهد نظامي npm وPyPI أكبر هجوم منظم على سلسلة توريد البرمجيات حتى الآن. مجموعة التهديد TeamPCP تمكنت من اختراق 169 حزمة npm و 2 حزمة PyPI، بإجمالي 373 نسخة خبيثة، مستهدفة مشاريع حيوية في عالم البرمجة والذكاء الاصطناعي.
🔗 بيان الحادثة الرسمي: tanstack.com/blog/npm-supply-chain-compromise-postmortem 🔗 تحليل StepSecurity: stepsecurity.io/blog/mini-shai-hulud
النطاق الكامل للهجوم
الحزم المتضررة في npm
@tanstack (42 حزمة، 84 نسخة) تشمل react-router و vue-router و start-router وغيرها من أدوات التوجيه الأساسية.
@uipath (66 حزمة) تشمل أدوات أتمتة العمليات ووكلاء الذكاء الاصطناعي.
@squawk (22 حزمة) لأدوات بيانات الطيران والتنبؤات الجوية.
@mistralai (3 حزم) هي SDK الخاصة بنماذج الذكاء الاصطناعي من Mistral.
@opensearch-project وهي عميل البحث والتخزين مفتوح المصدر (1.3 مليون تنزيل أسبوعي).
@tallyui (10 حزم) لمكونات واجهات المستخدم التجارية.
بالإضافة إلى حزم غير مصنفة بأسماء مثل safe-action و ts-dna و cross-stitch و wot-api و git-git-git و cmux-agent-mcp وغيرها.
الحزم المتضررة في PyPI
mistralai بنسخة 2.4.6.
guardrails-ai بنسخة 0.10.1.
كيف نفذ الهجوم؟
استخدمت مجموعة TeamPCP ثلاث ثغرات متسلسلة في GitHub Actions لاختراق عملية النشر الرسمية.
أولاً، استغلال pull_request_target. قام المهاجم بعمل fork من مستودع TanStack/router وفتح طلب سحب. هذا النوع من المشغلات في GitHub Actions يُصمم للسماح بتنفيذ مهام تلقائية حتى من الفروع غير المعروفة، مع افتراض أنها آمنة افتراضياً.
ثانياً، تسميم ذاكرة التخزين المؤقت (Cache Poisoning). استغل المهاجم آلية تخزين حزم pnpm المؤقتة في GitHub Actions. عندما يتم استعادة ذاكرة التخزين المؤقت في تدفق عمل شرعي لاحق (مثل إصدار نسخة جديدة)، يتم جلب الحزمة الملوثة بدلاً من الحزمة النظيفة.
ثالثاً، استخراج OIDC Token من الذاكرة. بعد تنفيذ الحزمة الملوثة داخل بيئة GitHub Actions الخاصة بالمشروع، تمكن المهاجم من قراءة محتويات /proc/
النتيجة: تم نشر نسخ خبيثة من مكتبات TanStack باستخدام تدفق النشر الرسمي الخاص بالمشروع نفسه، وكأنها تحديثات شرعية.
لماذا الهجوم خطير؟ كسر حاجز SLSA
النسخ الخبيثة حملت أدوات إثبات صحة SLSA Build Level 3، وهي شهادات أمان صممت خصيصاً لإثبات أن الحزمة صدرت من تدفق نشر معتمد وليس من مصدر مجهول. هذا أول توثيق لدودة npm تنتج حزماً خبيثة مع أدوات إثبات صحة سليمة بالكامل [citation:7].
ما يعنيه هذا عملياً: الاعتماد فقط على SLSA لم يعد كافياً لضمان أمان الحزمة، لأن المخترق يمكنه التحكم في عملية البناء نفسها والحصول على الشهادة نيابة عن النظام الشرعي.
بالإضافة إلى ذلك، أثبت التقرير أن الهجوم تمكن من تزوير العلامات التجارية لأدوات npm وأجهزة GitHub بالكامل، مما يجعل تتبع المصدر شبه مستحيل بالطرق التقليدية.
آلية انتشار الدودة
ما يجعل Mini Shai-Hulud دودة حقيقية وليس مجرد هجوم ثابت هو قدرتها على الانتشار الذاتي [citation:1][citation:6].
بعد تنفيذ الحزمة الخبيثة على جهاز المطور أو في بيئة CI/CD، تقوم الخطوات التالية:
أولاً، سرقة الشهادات تشمل npm tokens و GitHub tokens و GitHub Actions OIDC tokens و AWS credentials (عبر IMDSv2) و GCP و Azure credentials و Kubernetes service account tokens و HashiCorp Vault tokens و SSH keys و Claude Code API keys و VS Code tokens وجميع متغيرات البيئة والمفاتيح من ملفات .env.
ثانياً، تحديد الأهداف. تبحث الدودة عن npm packages يمتلك الضيف صلاحية نشرها، مع خاصية bypass_2fa مفعلة.
ثالثاً، الحقن والنشر. تعدل الحزمة الأصلية بإضافة التعليمات البرمجية الخبيثة كـ “اعتماد اختياري” optional dependency أو عبر preinstall hook، ثم ترفع الإصدار وتنشر نسخة جديدة ملوثة تحت اسم الضيف نفسه.
وهكذا، كل مطور أو مشروع يتم اختراقه يصبح نقطة انطلاق لهجوم جديد، مما يخلق سلسلة إصابات لا تنتهي.
الهدف الرئيسي: بيئات تطوير الذكاء الاصطناعي
الهجوم استهدف بشكل خاص مشاريع Mistral AI و Guardrails AI و TanStack (التي تستخدم على نطاق واسع في تطبيقات React الكبيرة). هذا ليس صدفة. بيئات تطوير الذكاء الاصطناعي غالباً ما تحتوي على مفاتيح API باهظة الثمن، نماذج خاصة، ونقاط وصول إلى بنى تحتية سحابية حساسة.
في حالة حزمة mistralai على PyPI، قام المهاجم بحقن الكود في ملف client/init.py بحيث يتم تشغيله فور استيراد الحزمة. يقوم الكود بتحميل أداة سرقة شهادات من خادم بعيد (83.142.209.194) مع منطق يعتمد على الموقع الجغرافي. في حالة كشف النظام أنه يعمل في روسيا، يتم تجنب التنفيذ. في حالة كشف النظام في إسرائيل أو إيران، هناك فرصة واحدة من ست أن يتم تشغيل أمر rm -rf / لحذف كامل الجهاز [citation:7][citation:10].
أما حزمة guardrails-ai على PyPI، فبمجرد استيرادها على نظام Linux، تقوم بتحميل ملف Python خبيث من git-tanstack.com وتنفيذه بدون أي تحقق من سلامته.
التفاصيل التقنية للبرمجيات الخبيثة
أسماء الملفات
البرمجية تستخدم عدة ملفات رئيسية في عملياتها المختلفة:
router_init.js هو ملف JavaScript المشفر الذي يشكل الحمولة الرئيسية، يتم تنفيذه عبر بيئة Bun.
tanstack_runner.js هو ملف مساعد لإدارة العمليات وتنفيذ الأوامر.
setup.mjs هو ملف تثبيت يُستخدم في الحزم التي تتبع نهج ما قبل التثبيت المباشر.
@tanstack/setup هو اعتماد اختياري مستضاف على GitHub، يحتوي على prepare script يستدعي Bun لتنفيذ الحمولة.
محاكي Bun runtime هو بيئة تشغيل JavaScript سريعة يتم تحميلها وتنفيذها من الذاكرة مباشرة، حجم الحمولة يبلغ حوالي 11.7 ميغابايت مشفرة.
قنوات تسرب البيانات
المهاجم استخدم ثلاث قنوات موازية لضمان نجاح عملية تسريب الشهادات المسروقة:
القناة الأساسية عبر Session Protocol، وهي شبكة لامركزية ومشفرة للمراسلات (getsession.org). اختيار هذه الشبكة يجعل الحظر على مستوى DNS أو IP غير فعال، لأن الاتصال يتم عبر عقد متعددة موزعة.
القناة الثانوية عبر GitHub API، يتم إنشاء مستودعات جديدة تحمل أسماء مستوحاة من رواية Dune مثل “Shai-Hulud: Here We Go Again”. يتم رفع البيانات المسروقة كملفات داخل هذه المستودعات باستخدام الرموز المسروقة سابقاً.
القناة الثالثة عبر نطاق git-tanstack.com، وهو نطاق تشابه (typosquatting) يحاكي النطاق الرسمي للمشروع.
آلية الاستمرارية والانتقام
البرمجية تقوم بتثبيت خدمة خلفية تسمى gh-token-monitor. هذه الخدمة تقوم بما يلي:
تقوم بفحص صحة رمز GitHub الموجود كل 60 ثانية عبر API. إذا تم إبطال الرمز من قبل الضحية، تقوم الخدمة بتنفيذ أمر rm -rf ~/ لحذف مجلد المستخدم الرئيسي بالكامل. تستمر الخدمة لمدة 24 ساعة ثم تنتهي تلقائياً. تتثبت عبر LaunchAgent على macOS و systemd service على Linux [citation:6].
هذا يعني أنه قبل إبطال أي رمز، يجب تحديد موقع هذه الخدمة وحذفها يدوياً.
بالإضافة إلى ذلك، تقوم البرمجية بتثبيت نقاط استمرار في Claude Code و Visual Studio Code، بحيث يتم إعادة تشغيل أداة السرقة كل مرة يتم فيها فتح هذه البرامج.
على macOS، يتم تثبيت ملف plist في ~/Library/LaunchAgents/com.user.gh-token-monitor.plist. أما على Linux، يتم تثبيت الخدمة في ~/.config/systemd/user/gh-token-monitor.service.
إصدار الشيفرة المصدرية للدودة
في 12 مايو 2026، قامت مجموعة TeamPCP بنشر الشيفرة المصدرية الكاملة لـ Shai-Hulud على GitHub، مع رسالة جاء فيها: “Shai-Hulud: Open Sourcing The Carnage. Is it vibe coded? Yes. Does it work? Let results speak. Change keys and C2 as needed. Love – TeamPCP” [citation:8].
بعد ساعات، تم حذف المستودع من GitHub، لكن النسخ انتشرت بسرعة في منصات بديلة ومواقع التشفير.
هذا النشر يعني أن أي هاكر مبتدئ يمكنه الآن تعديل مفاتيح التشفير وعناوين C2، وإطلاق نسخته الخاصة من الهجوم. الخبراء يتوقعون موجة كبيرة من الهجمات المقلدة والمتفرعة خلال الأسابيع القادمة، تماماً كما حدث مع دودة Mirai بعد نشر شيفرتها.
ماذا تفعل إذا كنت متضرراً؟
الخطوة الأولى هي عزل النظام: افصل الجهاز عن الشبكة فوراً. لا تقم بإبطال أي رموز وصول GitHub أو npm قبل إزالة خدمة gh-token-monitor.
الخطوة الثانية هي إزالة الخدمة الخبيثة:
على macOS: rm ~/Library/LaunchAgents/com.user.gh-token-monitor.plist launchctl remove com.user.gh-token-monitor
على Linux: rm ~/.config/systemd/user/gh-token-monitor.service systemctl –user disable gh-token-monitor
الخطوة الثالثة هي فحص الملفات والمجلدات: ابحث في جميع مجلدات المشاريع عن ملفات router_init.js و setup.mjs و tanstack_runner.js. افحص مجلدات .claude/ و .vscode/ في جميع أدلة المستخدمين والمشاريع.
الخطوة الرابعة هي تدوير الشهادات: بعد التأكد من إزالة الخدمة، قم بتغيير كل الشهادات التالية npm tokens و GitHub Personal Access Tokens و GitHub Actions Secrets و AWS و GCP و Azure credentials و Kubernetes service account tokens و HashiCorp Vault tokens و Claude API keys و VS Code tokens.
الخطوة الخامسة هي فحص سجلات النشر: راجع سجلات GitHub Actions وسجلات npm publish للكشف عن أي إصدارات غير مصرح بها باسمك. احذف أي إصدارات خبيثة فوراً.
الخطوة السادسة هي الترقية إلى النسخ النظيفة: تأكد من تحديث جميع الحزم إلى أحدث نسخة بعد 12 مايو 2026 (تحقق من موقع كل مشروع لمعرفة التواريخ المحددة).
أدوات الفحص المتاحة
أصدر المجتمع عدة أدوات لفحص المشاريع المتضررة:
tanstack-shield هي أداة مسح بنقرة واحدة لكشف CVE-2026-45321 في مشاريع TanStack [citation:2].
shai-scan هي أداة CLI بدون تبعيات لفحص حزم npm و PyPI، تدعم lockfiles متعددة وتفحص أيضاً مؤشرات الاختراق على مستوى النظام [citation:5].
npm-audit و pip-audit القياسيان يمكنهما كشف بعض الإصدارات المتضررة، لكن يفضل استخدام الأدوات المتخصصة أعلاه.
كيف عُرفت الثغرة؟ (CVE-2026-45321)
تم تخصيص رقم CVE-2026-45321 لهذا الهجوم، بتقييم خطورة 9.6 من 10. الثغرة الأساسية ليست خطأ برمجياً تقليدياً، بل سلسلة هجوم تستغلالية تستهدف سوء تكوين GitHub Actions ونقاط الضعف في التدفقات التلقائية [citation:2][citation:6].
النقطة الجوهرية هي أن pull_request_target يُنفذ في سياق المستودع الأساسي وليس فرع المهاجم، مما يسمح بالوصول إلى الأسرار المخزنة. عند دمجه مع تسميم ذاكرة التخزين المؤقت واستخراج OIDC من الذاكرة، تصبح العملية بأكملها قابلة للاختراق.
الهجمات السابقة لنفس المجموعة
TeamPCP ليست جديدة على هذا النوع من الهجمات. في أبريل 2026، استهدفت حزم SAP CAP على npm. في 30 أبريل، اخترقت مكتبة PyTorch Lightning عبر إصدار موسوم بشكل خبيث. في نفس اليوم، تم اختراق حزمة intercom-client على npm والمستودع المرتبط intercom-php على Composer [citation:9].
ما يميز هجوم مايو 2026 هو الحجم (169 حزمة) والتنوع (npm و PyPI معاً) واستهداف مشاريع الذكاء الاصطناعي تحديداً.
خلاصة
هجوم Mini Shai-Hulud ليس مجرد ثغرة أمنية عادية. إنه تحول في كيفية استهداف سلاسل توريد البرمجيات. استخدام المصادقة الموثوقة (trusted publishing) لتزوير هوية الناشر الرسمي، استخراج OIDC tokens من الذاكرة، نشر حزم بأدوات إثبات صحة مزورة، وإضافة مفتاح موت يحذف بيانات الضحية إذا حاول حماية نفسه – كلها تقنيات تجعل هذا الهجوم فريداً وخطيراً.
إذا كنت مطوراً يستخدم أي حزمة من المتضررة، فتأكد من فحص مشاريعك فوراً. إذا كنت مسؤول أمن سيبراني، فاعلم أن شيفرة الدودة أصبحت متاحة للجميع، وهجمات مقلدة قادمة لا محالة. حان وقت التدقيق في أذونات GitHub Actions، ومراجعة سياسات الوصول إلى السحابة، ووضع خطط للاستجابة السريعة لحوادث سلسلة التوريد.
روابط سريعة
تقرير TanStack الرسمي: tanstack.com/blog/npm-supply-chain-compromise-postmortem تحليل StepSecurity الكامل: stepsecurity.io/blog/mini-shai-hulud قائمة الحزم المتضررة كاملة: socket.dev/blog/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack أداة المسح tanstack-shield: github.com/Caixa-git/tanstack-shield أداة المسح shai-scan: github.com/digi4care/shai-scan استشارة NHS الرسمية: digital.nhs.uk/cyber-alerts/2026/cc-4781 تحليل Microsoft للحزمة الخبيثة: msftsecintel على X تحليل مصدر Shai-Hulud: reversinglabs.com/blog/the-shai-hulud-code-drop
التفاعلات والتعليقات
سجّل الدخول بحساب GitHub للتعليق أو التفاعل. مدعوم بـ Giscus (مخزَّن في GitHub Discussions)