دودة NPM تعود من جديد وهي أسوأ بكثير (اختراق TanStack)

BBetter Stack
Computing/SoftwareManagementInternet Technology

Transcript

00:00:00يعود شاي هولود (Shai Hulud) مجدداً في جزء رابع.
00:00:02هذه المرة يستهدف حزمًا مثل تان ستاك (TanStack)،
00:00:04حرفيًا بعد ساعات من نشري لهذا الفيديو عن نيكست جي إس (Next.js)،
00:00:07وهو توقيت كان رائعًا مني.
00:00:08هذا الهجوم هو في الواقع هجوم ضخم على سلسلة توريد NPM
00:00:11تؤثر على أكثر من مجرد TanStack.
00:00:13كما طال حزمًا مثل يو آي باث (UiPath)، وميسترال (Mistral)،
00:00:15و160 حزمة أخرى،
00:00:17وحتى حزم بايباي (PyPy) مثل Guardrails.ai.
00:00:20ما يجعل هذا الهجوم أكثر إثارة
00:00:22هو احتواؤه على مفتاح قتل (Deadman switch)،
00:00:24لذا إذا اكتشف أنك قمت بتغيير مفاتيحك المسروقة،
00:00:26فإنه سيمسح جهاز الكمبيوتر الخاص بك بالكامل،
00:00:28وحتى أنه تضمن بعض السياسات العالمية.
00:00:30فلنبدأ الغوص في التفاصيل.
00:00:36في هذا الجزء، لدى الدودة نفس الهدف،
00:00:39سرقة بيانات الاعتماد من أجهزة المطورين ومشغلات CI/CD،
00:00:42ثم استخدام تلك البيانات للوصول إلى المزيد من الحزم.
00:00:44بالنسبة لـ TanStack، عنى ذلك نشر 84 إصداراً ضاراً
00:00:47عبر 42 حزمة من حزم TanStack في دقائق معدودة فقط.
00:00:51الآن، سأشرح كيف تمكنوا
00:00:52من اختراق TanStack في المقام الأول،
00:00:54ولكن دعونا نرى أولاً ما تفعله البرمجية الضارة
00:00:56إذا قمت بتثبيت إحدى هذه الحزم المتضررة.
00:00:58داخل الحزم الضارة،
00:00:59ستجد ملفاً جديداً يسمى routerinit.js،
00:01:02بالإضافة إلى تبعية اختيارية تم حقنها،
00:01:04والتي تؤدي إلى ما يبدو
00:01:05كرابط GitHub شرعي لجهاز توجيه TanStack،
00:01:08لكنه في الواقع التزام (commit) يتيم على نسخة المهاجم.
00:01:10هذه هي الطريقة التي يتعامل بها GitHub مع روابط النسخ (forks)،
00:01:13لذا يمكن أن يبدو الرابط وكأنه
00:01:14ينتمي إلى المشروع الأصلي،
00:01:16على الرغم من أن الالتزام هو في الواقع من نسخة فرعية.
00:01:18في تلك النسخة، يوجد نص برمجي لدورة الحياة،
00:01:20وهو 'prepare'، يقوم بتشغيل 'bun run task runner JS'،
00:01:22وينتهي بأمر 'exit one'.
00:01:24هذه مجرد طريقة ذكية لجعل التبعية الاختيارية تفشل
00:01:27بعد تشغيل الحمولة البرمجية،
00:01:28ليستمر التثبيت بشكل طبيعي،
00:01:30ويترك آثارًا أقل وضوحًا في سجلات التثبيت الخاصة بك.
00:01:33أيضًا، قد تلاحظ أن هذا ليس تشغيلًا
00:01:35لملف routerinit.js الذي قلت إنه تم حقنه
00:01:37في الحزم في البداية،
00:01:38ولكن في الوقت الحالي، فقط فكر في هذين الملفين
00:01:40على أنهما يؤديان نفس الدور تمامًا بأسماء مختلفة.
00:01:42الخلاصة هي، عندما تقوم بتثبيت هذا،
00:01:44فإنه سيقوم بتشغيل هذا النص البرمجي.
00:01:46أول شيء يحاول النص البرمجي القيام به
00:01:47هو فصل نفسه عن تدفق التثبيت الواضح،
00:01:50لذا سيتحقق مما إذا كان يعمل بالفعل
00:01:51في الخلفية، وإذا لم يكن كذلك،
00:01:53فإنه يقوم بإنشاء نسخة منفصلة من نفسه
00:01:54وينهي النص البرمجي الرئيسي بشكل نظيف.
00:01:57بهذه الطريقة، سجلات تثبيت npm الخاصة بك
00:01:58لا تظهر أيًا من مخرجات النص البرمجي
00:02:00لأن البرمجيات الخبيثة قد فصلت نفسها الآن
00:02:01عن تلك العملية وتعمل في الخلفية.
00:02:04بعد ذلك، يقوم بشيء ذكي حقًا.
00:02:06يكتب نسخًا من نفسه
00:02:07داخل مجلد خطافات (hooks) كود كلود (Claude Code) الخاص بك،
00:02:08ثم يقوم بتهيئة إعدادات كلود الخاصة بك
00:02:10لتشغيل هذا الخطاف في أي وقت تستخدم فيه كلود كود
00:02:12في ذلك المشروع.
00:02:13بهذه الطريقة، يمكنه البقاء بعد التثبيت الأصلي
00:02:16والاستمرار في إعادة التشغيل في كل مرة
00:02:17تفتح فيها كلود كود في ذلك المشروع.
00:02:20إنه في الواقع يفعل الشيء نفسه مع مشغل مهام في إس كود (VS Code)،
00:02:22حيث ينسخ نفسه هناك،
00:02:23لذا إذا كنت تستخدم ميزات التشغيل التلقائي لمساحة عمل في إس كود،
00:02:26فأنت تواجه نفس المشكلة تمامًا.
00:02:28حتى أنه يقوم بإعداد خدمة على مستوى نظام التشغيل
00:02:29تسمى مراقب رموز غيت هاب (GitHub Token Monitor)،
00:02:31لكننا سنعود إلى ذلك لاحقًا
00:02:32لأن ذلك الأمر شيطاني تمامًا.
00:02:34إنه أمر شيطاني أيضًا
00:02:35أنك لم تشترك بعد.
00:02:37الشيء التالي الذي تفعله الحمولة البرمجية
00:02:38هو البدء في سرقة بيانات اعتمادك،
00:02:40وهو يحاول فعل كل شيء.
00:02:41في إجراءات غيت هاب (GitHub Actions)، يبحث عن بيانات الاعتماد
00:02:43والأسرار في بيئة التشغيل.
00:02:45وبشكل أكثر تحديدًا، يقوم بمسح ذاكرة عملية
00:02:47تشغيل إجراءات غيت هاب
00:02:48للحصول على أسرار سير العمل الخاصة بك
00:02:50بما في ذلك الأسرار المخفية (masked secrets)،
00:02:52بل إنه يدرج سير عمل مزيفاً على GitHub يبدو كأنه أداة CodeQL
00:02:55يقوم بتسلسل أسرار المستودع الخاصة بك
00:02:57ويقوم باستخراجها لاحقًا.
00:02:58كما أنه يبحث عن أسرار خدمة أمازون (AWS)،
00:03:00حيث يبدأ أولاً بمتغيرات البيئة
00:03:02وملفات التكوين المحلية،
00:03:03ولكنه ينتقل أيضًا إلى خدمات بيانات وصف أمازون
00:03:06مثل IMDS v2 وبيانات وصف مهمة نظام حاويات أمازون (ECS).
00:03:09بالنسبة لـ كوبيرنيتيس (Kubernetes)، فإنه يسرق رموز حساب الخدمة
00:03:11والشهادات التي تسمح له بالوصول إلى واجهة برمجة التطبيقات داخل الكتلة
00:03:14لأي صلاحيات تحكم في الوصول المستندة إلى الأدوار (RBAC)
00:03:17التي كان يمتلكها حساب خدمة تلك الحاوية،
00:03:19والتي في الكتل سيئة التكوين
00:03:21يمكن أن تكون واسعة النطاق للغاية،
00:03:22في بعض الأحيان تصل إلى صلاحيات المدير.
00:03:24ولجعل الأمر أسوأ،
00:03:25فهو يستهدف أيضاً HashiCorp Vault،
00:03:27حيث يجمع كل متغيرات البيئة والرموز
00:03:29الخاصة بـ Vault،
00:03:30ثم يستخدم أي صلاحيات وصول لـ Kubernetes يمتلكها
00:03:32لاسترجاع كل الأسرار التي يديرها Vault.
00:03:34وكل ذلك مجرد ما يفعله
00:03:35ببيئات النشر الخاصة بك.
00:03:37إذا كان على محطة عملك،
00:03:38فإنه يستهدف كل مفاتيح SSH الخاصة بك،
00:03:39وبيانات اعتماد NPM،
00:03:41وبيانات اعتماد Git،
00:03:42وسجل الأوامر،
00:03:43وبيانات اعتماد مزود السحابة،
00:03:44ومفاتيح التشفير،
00:03:45وملفات Signal،
00:03:45وSlack،
00:03:45وملفات Discord.
00:03:46وفوق كل ذلك،
00:03:47يستخرج سجل جلسات Claude Code.
00:03:49لذا إذا سبق وأعطيت Claude بيانات اعتماد
00:03:51أو سمحت له بقراءة ملفات تحتوي على بيانات اعتماد،
00:03:53فإن لديه صلاحية الوصول إليها أيضاً.
00:03:55لذا نعم، كما قلت،
00:03:56كانوا يسعون خلف كل شيء
00:03:57يمكنهم وضع أيديهم عليه،
00:03:58ثم يقومون بتسريب هذه البيانات
00:04:00عبر شبكة المراسلة Session.
00:04:02وكخطوة احتياطية،
00:04:02قاموا أيضاً بوضع هذه البيانات المسروقة
00:04:04في مستودعات GitHub.
00:04:05وتماشياً مع طابع هجماتهم،
00:04:07تمت تسمية هذه الفروع بأسماء مستوحاة من رواية “كثيب” (Dune).
00:04:09لقد حصلوا على بيانات اعتمادك.
00:04:11لا يمكن أن يزداد الأمر سوءاً، أليس كذلك؟
00:04:12حسناً، نعم.
00:04:13نعم، يمكن ذلك.
00:04:14وفوق كل ذلك،
00:04:15إذا تذكرت الخدمة
00:04:16التي قلت أنها تُثبّت على جهازك،
00:04:18حسناً، تلك الخدمة تراقب رموز GitHub الخاصة بك
00:04:19وتستمر في إعادة تسريبها.
00:04:21ولكن أيضاً في كل دقيقة،
00:04:22تتحقق مما إذا كان الرمز لا يزال صالحاً.
00:04:24وإذا لم يكن كذلك،
00:04:25تقوم بتنفيذ أمر الحذف (rm -rf) على دليل المستخدم الخاص بك،
00:04:27ما يؤدي لمسح كل شيء.
00:04:28تحاول أيضاً إنشاء رمز NPM
00:04:30باستخدام بيانات اعتمادك،
00:04:31مع وصف يقول:
00:04:32إذا قمت بإلغاء هذا الرمز،
00:04:33سنقوم بمسح كمبيوتر المالك،
00:04:35مما يعني أنها تفعل الشيء نفسه
00:04:36بالنسبة لرموز NPM أيضاً.
00:04:38لذا إذا قمت بإلغاء هذه الرموز
00:04:39قبل عزل جهازك
00:04:40وإزالة تلك العملية الخلفية،
00:04:42فيمكن للبرمجية الخبيثة أن تدمّر جهازك ذاتياً،
00:04:44وهو أمر شيطاني تماماً.
00:04:46وكإشارة جانبية هنا،
00:04:47نسخة بايثون من هذا الهجوم
00:04:48تفعل الشيء نفسه تقريباً،
00:04:49لكنها تتضمن أيضاً فحصاً
00:04:51لمعرفة ما إذا كانت لغة جهازك هي الروسية.
00:04:53إذا كانت كذلك،
00:04:53فإنها تتوقف ببساطة.
00:04:54وإذا بدا أن جهازك
00:04:55من إسرائيل أو إيران،
00:04:56فإنها تولد رقماً عشوائياً
00:04:58بين 1 و 6.
00:04:59وإذا كان هذا الرقم هو 2،
00:05:00فإنها تقوم بتنفيذ أمر مسح تدميري
00:05:01وتحاول تشغيل ملف MP3
00:05:03بأعلى صوت ممكن.
00:05:04للأسف،
00:05:05لم أستطع معرفة
00:05:05ما هو ملف الـ MP3 ذلك.
00:05:07على أي حال،
00:05:07الآن وقد فعلت كل ذلك،
00:05:08الأسوأ لم يأتِ بعد
00:05:09لأن تلك كانت المرحلة الأولى فقط.
00:05:11المرحلة الثانية هي الانتشار الذاتي
00:05:13وهذا هو الجزء الأكثر خطورة
00:05:15في هذا الهجوم.
00:05:16أولاً،
00:05:16ستبحث على جهازك
00:05:17عن أي رموز NPM صالحة
00:05:19حيث يمكنها النشر
00:05:19بدون مصادقة ثنائية.
00:05:21وإذا وجدت واحدة،
00:05:22فسوف تفحص كل الحزم
00:05:24التي يمكن لذلك الحساب الوصول إليها،
00:05:26ثم تستخدم بيانات الاعتماد تلك
00:05:26لتضيف نفسها إلى تلك الحزم
00:05:28وتنشر إصدارات جديدة مصابة.
00:05:30هذا أمر سيء للغاية بالطبع،
00:05:32ولكن ربما لا ينبغي عليك
00:05:33أن تترك رموزاً منشورة
00:05:33في متناول اليد
00:05:34التي يمكنها تجاوز
00:05:35المصادقة الثنائية.
00:05:36لذا فإن النسخة الأكثر رعباً
00:05:38من هذا الأمر
00:05:39هي ما يحدث عند تشغيله داخل بيئة التطوير والتشغيل المستمر (CI/CD).
00:05:41لأنه في بيئة CI،
00:05:42لا يحتاج المهاجم
00:05:43إلى رمز NPM طويل الأمد
00:05:44لأن الإعدادات الجيدة
00:05:45غالباً ما تعتمد على OIDC،
00:05:47والتي يُفترض أنها أكثر أماناً.
00:05:48بشكل أساسي،
00:05:49بدلاً من تخزين
00:05:50رمز NPM كسرّ،
00:05:51تقوم GitHub Actions بإثبات هويتها لـ NPM،
00:05:53مرحباً،
00:05:53أنا هذا المستودع
00:05:54أقوم بتشغيل سير العمل هذا
00:05:55على هذا الفرع،
00:05:56ثم تمنحها NPM
00:05:57رمز نشر قصير الأمد.
00:05:59المشكلة في هذا، رغم ذلك،
00:06:00هي أنه إذا حصل البرنامج النصي
00:06:01على وصول إلى بيئة GitHub Actions موثوقة،
00:06:03يمكنه الحلول في نفس المكان
00:06:04الذي يشغله ناشر شرعي.
00:06:06لذا يمكن للبرمجيات الخبيثة استخدام
00:06:07البيئة المرتبطة بـ OIDC
00:06:08التي يكشفها GitHub للوظيفة
00:06:10لطلب رمز OIDC JWT
00:06:12من نقطة نهاية الرموز الخاصة بـ GitHub،
00:06:14ثم تبادل رمز JWT ذلك
00:06:16مع NPM
00:06:17مقابل رمز نشر قصير الأمد
00:06:18من خلال نظام النشر
00:06:19الموثوق لدى NPM،
00:06:20والآن يمكنه النشر
00:06:22دون سرقة
00:06:22رمز NPM دائم
00:06:24والظهور بمظهر شرعي تماماً.
00:06:26في هذه الحالة،
00:06:26تقوم البرمجيات الخبيثة بحزم نسخة
00:06:27من ملف router init.js ذلك
00:06:29داخل جدول الحزمة،
00:06:30ثم تضيف التبعية
00:06:31الاختيارية الخبيثة،
00:06:32ثم تنشر كل ذلك
00:06:33كأحدث علامة
00:06:34لهذه الحزمة،
00:06:35لذا عندما يقوم شخص ما
00:06:35أو خط أنابيب CI/CD ما
00:06:37بتثبيت تلك الحزم،
00:06:38تبدأ الحلقة من جديد،
00:06:40منتشرة إلى أبعد حد
00:06:40ممكن لها.
00:06:42إذاً، كل هذا
00:06:42جنوني جداً، أليس كذلك؟
00:06:43ولكن الآن دعونا نركز
00:06:44على المريض صفر،
00:06:46TanStack.
00:06:46كيف أصيبوا
00:06:47في المقام الأول؟
00:06:48حسناً،
00:06:49وفقاً للتقرير التحليلي الخاص بهم،
00:06:50قام المهاجم بإساءة استخدام
00:06:51خط أنابيب GitHub Actions ذلك.
00:06:53لقد بدأوا اليوم
00:06:53قبل نشر الحزم الخبيثة
00:06:54فعلياً،
00:06:56حيث قاموا بإنشاء تشعّب (fork)
00:06:57من TanStack router،
00:06:58لكنهم قاموا فعلياً بإعادة تسمية
00:06:59هذا إلى configuration
00:06:59لمحاولة جعل العثور عليه أصعب
00:07:01إذا كنت تبحث
00:07:02من خلال أسماء التشعّبات الواضحة.
00:07:04ثم قاموا بإضافة
00:07:04التزام (commit) خبيث
00:07:05إلى هذا التشعّب،
00:07:06الذي قاموا بتزييف مؤلفه
00:07:07باسم Claude،
00:07:07وكانت له رسالة التزام
00:07:08مسبوقة بـ
00:07:09skip CI،
00:07:10لذا لن يتم تشغيل CI فوراً
00:07:11عند حدث الدفع (push event).
00:07:13في اليوم التالي،
00:07:13قاموا بفتح طلب سحب (PR)
00:07:14ضد TanStack router
00:07:15باسم Work in Progress
00:07:16Simplify History Build.
00:07:18وهنا حدث
00:07:18الهجوم الفعلي.
00:07:20خلاصة القول هي أن
00:07:21TanStack كان لديه سير عمل
00:07:22GitHub Actions لقياس الحجم
00:07:23استخدم pull request target،
00:07:25وهذا ملحوظ
00:07:26لأن pull request target
00:07:27يعمل فعلياً
00:07:28في سياق أمان
00:07:29المستودع الأساسي،
00:07:30وليس التشعّب.
00:07:31هذا يعني أنه يتمتع بالوصول
00:07:32إلى نطاق ذاكرة التخزين المؤقت للمستودع الأساسي
00:07:33ورمز GitHub الخاص به.
00:07:35لذا قام سير العمل هذا
00:07:35بالتحقق من طلب السحب،
00:07:36وتثبيت تبعياته،
00:07:38وتشغيل اختبار أداء.
00:07:39المشكلة، رغم ذلك، هي أن
00:07:40أن ذلك الفرع
00:07:40احتوى على برمجيات خبيثة.
00:07:41في هذه الحالة،
00:07:42كان نص إعداد
00:07:43قام بتسميم
00:07:44مخزن حزم PMPM
00:07:45تحت مفتاح التخزين المؤقت الدقيق
00:07:47الذي سيستخدمه إجراء الإصدار
00:07:48لاحقاً.
00:07:49لقد قاموا فعلياً بحساب ذلك
00:07:50مسبقاً من ملف قفل
00:07:51PMPM العام
00:07:52باستخدام نفس المعادلة بالضبط
00:07:54التي يستخدمها سير العمل أيضاً.
00:07:56بمجرد حفظ ذلك التخزين المؤقت
00:07:57المسموم،
00:07:57قاموا فعلياً بإعادة ضبط
00:07:58ذلك الفرع
00:07:59ليطابق الفرع الرئيسي
00:07:59الحالي،
00:08:00لذا بدا طلب السحب المرئي
00:08:01كعملية فارغة لا تغير شيئاً،
00:08:02ثم قاموا بإغلاق طلب السحب
00:08:03هذا وحذف
00:08:04الفرع الخبيث.
00:08:05لذا من الخارج،
00:08:06يبدو وكأن
00:08:07لم يحدث
00:08:07أي شيء على الإطلاق،
00:08:08لكنهم سمموا
00:08:09مخزن GitHub المؤقت الخاص
00:08:10بذاك الإجراء.
00:08:11هذا يعني أنه
00:08:12بعد ثماني ساعات،
00:08:13عندما قام أحد المشرفين العاديين
00:08:14بدمج طلب سحب غير ذي صلة
00:08:15في الفرع الرئيسي،
00:08:16تم تفعيل سير عمل الإصدار
00:08:17الخاص بـ Tanstack،
00:08:18والذي قام باستعادة
00:08:19مخزن PMPM المسموم،
00:08:20والآن تم تشغيل كود تحكم المهاجم
00:08:22داخل
00:08:23إجراء الإصدار هذا.
00:08:24ثم استخدم المنطق نفسه
00:08:25مع OIDC
00:08:26للحصول على رمز نشر NPM،
00:08:28وتمكن من نشر
00:08:2984 إصداراً من نفسه
00:08:30عبر 42 حزمة Tanstack،
00:08:32ولم يحتج حتى للوصول
00:08:33إلى خطوة
00:08:34نشر الحزمة
00:08:35في الإجراء.
00:08:36ومن المضحك،
00:08:36أن الإجراء فشل فعلياً
00:08:37لأن بعض الاختبارات فشلت،
00:08:39لذا لم يصل أبداً إلى تلك الخطوة،
00:08:40ولكن الكود الخبيث تم تشغيله
00:08:41ونشر كل تلك الإصدارات
00:08:43بغض النظر.
00:08:43وهكذا تمكن المهاجم
00:08:44من تجاوز ثلاث حدود ثقة.
00:08:46أولاً،
00:08:47تمكن كود طلب سحب الفرع
00:08:47من تسميم
00:08:48مخزن المستودع الأساسي،
00:08:49ثم تم استعادة ذلك المخزن
00:08:51داخل
00:08:52سير عمل الإصدار الحقيقي،
00:08:53ثم امتلك سير عمل الإصدار الحقيقي
00:08:54صلاحيات OIDC،
00:08:56والتي تحولت إلى
00:08:57وصول لنشر NPM،
00:08:58لذا تمكنوا من نشر
00:08:59ما يبدو أنه
00:08:59حزم شرعية تماماً.
00:09:01وهذا ما أعتقد أنه
00:09:02يصبح مخيفاً حقاً
00:09:03بشأن هجمات سلسلة التوريد.
00:09:05إنهم ينتقلون من
00:09:05سرقة
00:09:06رمز مشرف واحد
00:09:07إلى إساءة استخدام
00:09:08نظام CI-CD بأكمله ذاته،
00:09:10وهذا يعني
00:09:11أن جميع إشارات الثقة الخاصة بنا
00:09:12بدأت تعمل
00:09:13لصالح المهاجم.
00:09:14كانت هذه حزمة موقعة
00:09:15ذات مصدر موثوق صالح
00:09:16تم نشرها بواسطة سير عمل حقيقي.
00:09:18إذاً، هذا كل شيء،
00:09:19هذا هو ShaiHalud4،
00:09:20وإذا كنت ترغب في التحقق
00:09:21مما إذا كنت قد تعرضت للاختراق
00:09:21بسبب أي من هذه الحزم،
00:09:23سأترك روابط
00:09:23لمنشورات مدونة بالأسفل،
00:09:25والتي ستغطي
00:09:25كيف يمكنك معرفة ذلك
00:09:26وما يمكنك فعله
00:09:27إذا كنت قد قمت بتثبيت
00:09:28إحداها.
00:09:29أخبروني في التعليقات
00:09:30ما رأيكم
00:09:30في كل هذا
00:09:31وفي نظام NPM البيئي،
00:09:33وبينما أنتم هناك بالأسفل،
00:09:33اشتركوا،
00:09:34وكما دائماً،
00:09:34نراكم في الفيديو القادم.

Key Takeaway

تجاوز المهاجمون تدابير الأمان عبر تسميم مخزن PMPM في خط أنابيب GitHub Actions، مما مكنهم من استغلال صلاحيات OIDC لنشر 84 إصداراً خبيثاً من حزم TanStack دون الحاجة لسرقة رموز نشر دائمة.

Highlights

  • تسببت برمجية Shai Hulud الخبيثة في إصابة 160 حزمة برمجية، بما في ذلك حزم TanStack وUiPath وMistral.

  • قامت البرمجية بنشر 84 إصداراً ضاراً عبر 42 حزمة من حزم TanStack في غضون دقائق.

  • تستخدم البرمجية مفتاح قتل يقوم بمسح محتويات دليل المستخدم (rm -rf) إذا اكتشفت محاولة لإلغاء الرموز المسروقة.

  • تستهدف البرمجية بيانات الاعتماد في بيئات GitHub Actions، وAWS، وKubernetes، وHashiCorp Vault، بالإضافة إلى مفاتيح SSH وسجلات الأوامر على الأجهزة المحلية.

  • نجح المهاجمون في تجاوز أمان OIDC عبر تسميم مخزن التخزين المؤقت لـ PMPM في GitHub Actions، مما سمح بنشر حزم مصابة تبدو شرعية.

Timeline

نطاق الهجوم وآلية العمل الأساسية

  • تستهدف الدودة البرمجية سرقة بيانات الاعتماد من أجهزة المطورين ومشغلات CI/CD.
  • تتخفى البرمجية داخل تبعيات اختيارية محقونة تستغل روابط GitHub الفرعية للتمويه.
  • تفصل البرمجية نفسها عن عملية التثبيت الأصلية للعمل في الخلفية دون ترك آثار في سجلات npm.

تستهدف الدودة Shai Hulud أجهزة المطورين وخوادم CI/CD لسرقة البيانات. عند التثبيت، تقوم البرمجية بتشغيل نص برمجي لإنشاء عملية خلفية مستقلة، مما يمنع ظهور مخرجاتها في سجلات التثبيت العادية. تُستخدم تبعيات اختيارية ونسخ فرعية من GitHub لتبدو وكأنها روابط شرعية، بينما تقوم في الواقع بتنفيذ حمولات خبيثة.

استراتيجيات سرقة بيانات الاعتماد والتهديدات التدميرية

  • تستمر البرمجية في العمل عبر خطافات (hooks) في Claude Code وميزات التشغيل التلقائي في VS Code.
  • تستخرج البرمجية الأسرار من ذاكرة عمليات GitHub Actions ومتغيرات بيئة AWS وشهادات Kubernetes.
  • يعمل مفتاح القتل على تدمير جهاز الضحية في حال اكتشاف محاولات لإلغاء الرموز المسروقة.

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

اختراق TanStack وتسميم سلسلة التوريد

  • تستخدم البرمجية صلاحيات OIDC للحصول على رموز نشر قصيرة الأمد، مما يضفي صفة الشرعية على الحزم الضارة.
  • تمت عملية الاختراق الأولية عبر تسميم مخزن PMPM المؤقت في GitHub Actions باستخدام طلب سحب (PR) مخادع.
  • تجاوز المهاجمون ثلاث طبقات ثقة عبر استغلال سياقات أمان pull_request_target.

استغل المهاجمون سياق الأمان في `pull_request_target` لتسميم مخزن PMPM المؤقت في TanStack. هذا التسميم مكن الكود الخبيث من العمل لاحقاً أثناء سير عمل الإصدار الرسمي. من خلال الحصول على رمز OIDC JWT من GitHub، تمكنت البرمجية من النشر بصفتها كياناً موثوقاً، مما جعل الحزم الضارة تبدو وكأنها إصدارات شرعية تم توقيعها ونشرها من قبل المشروع نفسه.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video