- لقد أساءت حملات متعددة استخدام حزم وأدوات React Native npm الموثوقة، بدءًا من مكونات واجهة المستخدم وحتى أدوات سطر الأوامر، من خلال الاستيلاء على الحسابات والاحتيال الإملائي.
- يلجأ المهاجمون بشكل متزايد إلى نشر برامج ضارة متطورة متعددة المراحل باستخدام Solana أو C2 اللامركزي، مستهدفين أجهزة المطورين وخطوط أنابيب التكامل المستمر وبيانات المحفظة أو بيانات الاعتماد.
- يعتمد بائعو الأمن الآن على تحليل الذكاء الاصطناعي، وفحوصات التهدئة، وضوابط الخروج المشددة لـ CI لاكتشاف واحتواء هجمات سلسلة التوريد هذه في غضون دقائق.
- يجب على فرق React Native الجمع بين النظافة الصارمة للتبعيات، و npm 2FA، وملفات القفل، والمراقبة المستمرة لتقليل مخاطر سلسلة التوريد بشكل فعال.

أصبح React Native إطار عمل أساسي لبناء تطبيقات الهاتف المحمول، مما يجعل نظام npm البيئي الخاص به هدفًا جذابًا للغاية للمهاجمين الذين يتطلعون إلى اختراق أجهزة المطورين وخطوط أنابيب التكامل المستمر. على مدى السنوات القليلة الماضية، استغلت العديد من الحملات المتطورة للغاية حزم React Native الموثوقة، والأدوات الشائعة حول الإطار، وحتى الأدوات المساعدة التي تم انتحالها عن طريق الخطأ لزرع البرامج الضارة، وسرقة بيانات الاعتماد، واستخراج المحافظ الإلكترونية، وتخريب مشاريع JavaScript على نطاق واسع.
إذا كنت تقوم ببناء أو صيانة تطبيقات React Native اليوم، فلن يكون كافياً مجرد "npm install والأمل في الأفضل". يستغل العديد من المهاجمين نظام npm بشكل منهجي، مستهدفين كل شيء بدءًا من مكونات واجهة المستخدم وصولًا إلى أدوات سطر الأوامر، وحتى مخطط التبعية المتعدية المختبئ في أعماق ملفات القفل. تستعرض هذه المقالة أبرز الحوادث المعروفة، وتحلل آلية عمل البرمجيات الخبيثة، وتوضح خطوات عملية يمكنك اتخاذها للحد من تأثيرها على بيئة التطوير الخاصة بك.
اختراق الحسابات والبرمجيات الخبيثة في مكونات الإدخال في React Native
أحد أكثر حوادث سلسلة التوريد إثارة للقلق في عالم React Native أصاب مكونين شائعين جدًا من مكونات واجهة المستخدم لاختيار الهاتف والبلد: react-native-international-phone-number و react-native-country-select. كلا الحزمتين، يتم صيانتهما من قبل نفس المؤلف (@AstrOOnautaمستخدم npm astroonautaوقد تراكمت عشرات الآلاف من عمليات التنزيل الأسبوعية، وهي مضمنة في العديد من تطبيقات الهاتف المحمول الإنتاجية.
في 16 مارس 2026، كان محلل الحزم القائم على الذكاء الاصطناعي من StepSecurity أول من اكتشف أن الإصدارات الجديدة من هذه المكتبات قد اكتسبت فجأة برامج ضارة أثناء التثبيت. الإصدارات التي تعرضت للاختراق الفوري كانت react-native-international-phone-number@0.11.8 و react-native-country-select@0.3.91كانت آخر النسخ النظيفة المؤكدة في ذلك الوقت هي 0.11.7 و 0.3.9 على التوالي.
كانت الثغرة الأمنية الأولية (الموجة 1) بسيطة للغاية: جديدة preinstall نص مكتوب ومُبهم بشدة install.js ملف مجمع في ملف مضغوط بصيغة tarball. الخبيث package.json كانت المقتطفات تبدو كالتالي:
"scripts": { "preinstall": "node install.js" }
لأن نصوص دورة حياة npm تعمل تلقائيًا على npm install، أي شخص يقوم بسحب هذه الإصدارات - محليًا أو في CI - قام بتشغيل البرامج الضارة دون استيراد أي كود. لم تكن هناك أي علامات Git أو إصدارات أو عمليات تشغيل سير عمل CI مقابلة للإصدارات المخترقة، و gitHead تطابق مع الإصدار الجيد السابق، وهو مؤشر قوي على أن المهاجم قد حصل على حق الوصول المباشر للنشر إلى حساب npm الخاص بالمسؤول بدلاً من تعديل مستودع GitHub.
تُظهر بيانات التنزيل في ذلك الوقت مدى سوء الوضع الذي كان من الممكن أن يحدث: حوالي 9,000 عملية تنزيل أسبوعيًا لـ react-native-country-select وأكثر من 20,000 ألفًا لـ react-native-international-phone-number، ليصل إجمالي عدد التنزيلات إلى أكثر من 130,000 ألف تنزيل شهريًا بين الاثنين. هذا هو بالضبط نوع الاعتمادية ذات الحجم الكبير والرؤية المنخفضة التي تهبط بصمت على آلاف أجهزة المطورين وأجهزة التكامل المستمر.
هجوم ثلاثي الموجات: من التثبيت المسبق الواضح إلى سلاسل التبعية الخفية
تطورت الحملة ضد حزم React Native هذه في ثلاث موجات متميزة، وكانت كل نسخة منها أكثر مراوغة من سابقتها مع إعادة استخدام نفس البرامج الضارة الأساسية. قامت StepSecurity بتتبع التطور في الوقت الفعلي تقريبًا ونسقت مع المسؤول عن الصيانة، لكن المهاجم استعاد أو احتفظ مرارًا وتكرارًا بإمكانية الوصول إلى حساب npm المخترق.
ركزت الموجة الأولى (16 مارس 2026) على الاتجاه المباشر preinstall خطاف في كلا العبوتين. في غضون خمس دقائق تقريبًا من النشر، صنّف نظام الذكاء الاصطناعي الخاص بـ StepSecurity الإصدارات الجديدة على أنها بالغة الأهمية، وتم فتح مشكلات على GitHub: #165 لـ react-native-international-phone-number و#11 لـ react-native-country-selectاستجاب المسؤول عن الصيانة بسرعة، وقام بإيقاف دعم الإصدارات الضارة ونشر نسخة نظيفة. react-native-country-select@0.4.0. كان إجمالي الوقت من النشر إلى الإيقاف حوالي ساعتين و21 دقيقة - وهو وقت سريع وفقًا لمعايير النظام البيئي.
وعلى الرغم من ذلك، لم يفقد المهاجم السيطرة على بيانات اعتماد npm، مما أدى إلى الموجة الثانية في 17 مارس. بدلاً من وضع نص برمجي واضح في الحزم الرئيسية مرة أخرى، قام المهاجم بإنشاء حزمتين جديدتين محددتي النطاق للعمل كبنية تحتية مخفية:
@usebioerhold8733/s-format@2.0.1– نسخة جوفاء منstring-formatمعpostinstall: "node init.js"نص مكتوب لكنه مفقودinit.jsالملف، لذلك يفشل الخطاف بصمت.@agnoliaarisian7180/string-argv@0.3.0– حزمة شبه فارغة (ملفات README و LICENSE و package.json) كان غرضها الحقيقي الوحيد هو الاعتماد على@usebioerhold8733/s-format، مع عنوان بريد إلكتروني خاص بالصيانة يعتمد على ProtonMail.
في وقت لاحق من ذلك المساء ، react-native-international-phone-number@0.12.1 نُشر مع @agnoliaarisian7180/string-argv@0.3.0 تمت إضافته كاعتمادية جديدة، مرة أخرى بدون أي نشاط على GitHub Actions. في تلك المرحلة، كانت السلسلة جاهزة ولكنها خاملة، في انتظار تفعيل الحمولة. عندما أبلغت StepSecurity عن الخلل، أكد المسؤول ما كان واضحًا بالفعل من الأدلة: "تعرض حسابي على npm للهجوم وتم الاستيلاء على المكتبة".
قامت الموجة الثالثة (18 مارس) بتحويل البنية التحتية المرحلية إلى سلسلة توصيل برامج ضارة متعددة الطبقات نشطة، ثم قامت بتحسينها على التوالي بسرعة. تم نشر إصدارات جديدة من حزم الترحيل والمكتبة الرئيسية في أقل من ساعة، حيث قام المهاجم بتكرار طريقة إطلاق الحمولة.
كانت السلسلة النهائية تبدو كالتالي:
react-native-international-phone-number@0.12.2/0.12.3 → @agnoliaarisian7180/string-argv@latest → @usebioerhold8733/s-format@latest → postinstall → node child.js → init.js (malware)
قام المهاجم أولاً بتشغيل الحمولة في @usebioerhold8733/s-format@2.0.2 بإضافة شيء كبير ومبهم init.js ملف مطابق تمامًا للملف السابق بايتًا بايتًا install.js من الموجة الأولى. ثم قاموا بتغيير postinstall للإتصال child.js بدلا من init.js، نشرت 2.0.3 مع غياب النص (تجربة أخرى)، وتم شحنها أخيرًا 2.0.4 مع القليل child.js أداة تحميل تقوم ببساطة بالتحقق من init.js وينفذ ذلك عبر child_process.exec مع تجاهل الأخطاء ومخرجات الخطأ القياسي.
في نفس الوقت، @agnoliaarisian7180/string-argv@0.3.1 غيّر اعتماده على s-format من نسخة مثبتة إلى "latest"و react-native-international-phone-number@0.12.2 فعل الشيء نفسه مع string-argv. وقد أدى ذلك إلى إنشاء سلسلة خبيثة ذاتية التحديث حيث يقوم كل تثبيت للحزمة الرئيسية تلقائيًا بسحب أحدث إصدار من الحمولة.
وفي الختام react-native-international-phone-number@0.12.3 تمت إزالة خطاف التثبيت المسبق غير الضروري الآن (للحصول على مظهر أنظف)، وتم الاحتفاظ بسلسلة التبعية الخبيثة، وتم تغيير بريد npm الخاص بالمسؤول إلى حساب ProtonMail آخر لا يملكه المؤلف الأصلي. كان ذلك دليلاً واضحاً على أن المهاجم كان يعزز سيطرته الدائمة على هوية npm، وليس مجرد إعادة استخدام رمز مميز مسرب بشكل انتهازي.
داخل البرمجيات الخبيثة المدعومة من سولانا والتي تستهدف مطوري React Native
في جوهر الأمر، كانت الحمولة التي تعمل في جميع الموجات الثلاث عبارة عن نفس البرامج الضارة المتطورة متعددة المراحل التي تستغل سلسلة كتل سولانا كقناة تحكم وقيادة ديناميكية. استمرت آلية التسليم في التغير، لكن "السلاح" ظل متطابقًا في جميع التكرارات، حتى أنه كان نفس الملف بايتًا ببايت عند نقله من الموجة 1 إلى بنية الموجة 3.
يبدأ النص بتأخير متعمد لمدة 10 ثوانٍ باستخدام setTimeout، وهي خدعة كلاسيكية للتهرب من بيئة اللعب المفتوحة. تمنح العديد من بيئات الاختبار الآلية وأدوات الأمان البرامج النصية نافذة تنفيذ قصيرة فقط قبل أن تقرر عدم حدوث أي شيء مريب، لذلك تنتظر البرامج الضارة ببساطة انتهاء هذه النافذة قبل القيام بأي شيء مثير للاهتمام.
بعد ذلك، يقوم البرنامج بإجراء تصفية جغرافية لتجنب إصابة الأنظمة في روسيا وأجزاء من رابطة الدول المستقلة. يقوم بفحص متغيرات البيئة مثل LANG, LANGUAGE, LC_ALLمعلومات المستخدم المضيف، والمنطقة الزمنية للنظام، وحتى إزاحات التوقيت العالمي المنسق الخام، بحثًا عن قيم تشير إلى لغة روسية (مثل ru_RU or Russian) أو أحد المناطق الزمنية الروسية/دول الكومنولث المستقلة. إذا تطابق أي من هذه الخيارات، فسيتم إنهاء البرنامج النصي فورًا وبصمت.
لن يبدأ البرنامج الضار بالتواصل مع سلسلة كتل سولانا إلا إذا اجتازت البيئة هذا الفحص. يحتوي على عنوان محفظة مُبرمج مسبقًا ويستعلم عنه عبر getSignaturesForAddress يستخدم هذا التصميم طريقة JSON-RPC عبر تسع نقاط نهاية Solana RPC مختلفة، مستضافة لدى مزودين متنوعين. يمنح هذا التصميم المهاجم توافرًا عاليًا، ويجعل حظر النطاقات أو عناوين IP البسيطة غير فعال.
تكمن الحيلة في أن المهاجم يخفي عنوان URL الخاص بالحمولة للمرحلة التالية داخل حقل الملاحظات الخاص بمعاملات Solana إلى تلك المحفظة. تحتوي المذكرة على كتلة من بيانات JSON المشفرة بصيغة base64 والتي link يحتوي الحقل على عنوان URL للمرحلة التالية. من خلال إرسال معاملة جديدة، يمكن للمشغل تغيير عنوان URL الخاص بالحمولة في أي وقت دون تعديل حزم npm المنشورة.
بمجرد استخراج عنوان URL، يقوم البرنامج الخبيث بتنفيذ طلب HTTP إلى خادم المهاجم على العنوان التالي: http://45.32.150.251/إرسال نوع نظام التشغيل في ملف مخصص os رأسية بحيث يمكن لـ C2 إرجاع الملفات الثنائية الخاصة بالمنصة. يحتوي نص الاستجابة على البيانات المشفرة، ولكن يتم إرسال مفتاح AES-256 ومتجه التهيئة اللازمين لفك تشفيرها فقط في رؤوس HTTP (secretkey و ivbase64وبالتالي، فإن أي بيانات جسم مخزنة مؤقتًا أو معترضة تكون عديمة الفائدة في حد ذاتها.
لا يتم تخزين المرحلة الثانية التي تم فك تشفيرها على القرص مطلقًا؛ بل يتم تنفيذها في الذاكرة باستخدام eval(atob(...)) على أنظمة شبيهة بنظام يونكس أو عبر vm.Script على نظام ويندوز مع إمكانية الوصول الكامل إلى مكونات Node الداخلية. بعد ذلك، يقوم البرنامج الخبيث بإسقاط ~/init.json ملف علامة يخزن طابعًا زمنيًا ومعرفًا فريدًا، بحيث لا يُصاب الجهاز نفسه بالعدوى أكثر من مرة كل 48 ساعة. هذا التحديد لمعدل الإصابة يقلل بشكل كبير من التشويش، ويمنح المدافعين عددًا أقل من المؤشرات السلوكية التي يمكنهم الاعتماد عليها.
إن حمولة المرحلة الثالثة التي تم فك تشفيرها بواسطة AES، والتي استعادها الباحثون من خلال إعادة تشغيل نفس خطوات Solana و HTTP، هي عبارة عن برنامج لسرقة بيانات الاعتماد والمحفظة بالإضافة إلى برنامج تحميل، وتركز على نظام التشغيل Windows. إنها ترسخ المثابرة مع schtasks و مبادئ السلوك Run مفتاح التسجيل، يقوم بتنزيل وحدات مشفرة إضافية من 45.32.150.251، ويقوم بتسريب الغنائم الناتجة إلى عنوان IP في نطاق 217.69.3.x.
تقوم هذه الحمولة بتعقب البيانات من محافظ سطح المكتب وامتدادات المتصفح مثل MetaMask و Phantom و Exodus و Atomic و Guarda و Coinomi و Daedalus و OKX Wallet و Trust Wallet و Braavos وغيرها، وتتجول في مجلدات ملفات تعريف المتصفح وأدلة المحافظ المحلية بعد إغلاق Chrome و Firefox بالقوة. علاوة على ذلك، يقوم بسحب رموز npm وبيانات اعتماد GitHub مباشرة من التكوين المحلي ومساعدي بيانات الاعتماد، مما يحول أجهزة المطورين المخترقة إلى منصات إطلاق مثالية لمزيد من هجمات سلسلة التوريد.
والجدير بالذكر أن البرمجية الخبيثة تقوم حتى بتنزيل بيئات تشغيل Node.js الخاصة بها (الإصدار 22.9.0) لكل من x86 و x64 %APPDATA%\_node_x86 و %APPDATA%\_node_x64, ضمان وجود بيئة تنفيذ متسقة حتى عندما لا يكون Node مثبتًا على النظام المستهدف.
روابط إلى ForceMemo والجهة الفاعلة في تهديد GlassWorm
تتطابق البصمة التقنية لحادثة React Native npm هذه بشكل شبه كامل مع حملة سابقة أطلق عليها اسم "ForceMemo"، والتي اخترقت مئات من مستودعات Python على GitHub. استخدمت كلتا العمليتين سولانا كخادم تحكم وسيطرة (C2) مُخفي، ونفس مجموعة نقاط نهاية RPC التسعة، ونفس تنسيق مذكرة JSON مع link نفس منطق التصفية الجغرافية لروسيا/رابطة الدول المستقلة في هذا المجال ~/init.json قفل الاستمرارية وحتى نطاقات البنية التحتية المماثلة المستضافة على Vultr.
على الرغم من اختلاف عناوين محفظة سولانا بين الحملتين، إلا أن كل شيء آخر يشير إلى جهة فاعلة واحدة ذات قدرات عالية، يُعتقد أنها المجموعة المعروفة باسم GlassWorm. استهدفت برمجية ForceMemo الخبيثة المطورين عبر مستودعات GitHub المخترقة، بينما استخدمت برمجية React Native الخبيثة حزم npm وسلاسل تبعياتها. الاستراتيجية واضحة: إعادة استخدام إطار عمل برمجي خبيث متطور ووحداتي، مع دمجه في قنوات توزيع مختلفة للوصول إلى أكبر عدد ممكن من بيئات التطوير.
حملات أخرى خبيثة لـ npm تتعلق بـ React Native و JavaScript
إن اختراق AstrOOnauta ليس سوى جزء واحد من موجة أوسع من الهجمات القائمة على npm والتي تؤثر على تطبيقات React Native بشكل مباشر أو غير مباشر. وقد وثق العديد من موردي الأمن حملات متوازية تركز على مكتبات واجهة المستخدم React Native، وأدوات سطر الأوامر الأساسية، وحتى المكونات الإضافية العامة للبناء التي تعتمد عليها العديد من قواعد بيانات React Native.
كشفت شركة Aikido Security في يونيو 2025 عن عملية اختراق كبيرة في سلسلة التوريد، حيث تم إدخال ثغرات أمنية في ما لا يقل عن 16 حزمة برمجية متعلقة بـ React Native. @react-native-aria/* نطاق بلس @gluestack-ui/utils، حيث يبلغ إجمالي عدد التنزيلات الأسبوعية حوالي مليون تنزيل. وقع الاختراق الأولي في 6 يونيو 2025، بدءًا من @react-native-aria/focus@0.2.10ثم توسعت بسرعة لتشمل التركيز الإضافي، والتراكب، والتفاعل، والتبديل، والمفتاح، ومربع الاختيار، والزر، والقائمة، وقائمة الاختيار، وعلامات التبويب، وقائمة التحرير والسرد، والكشف، وشريط التمرير، وحزم الفواصل، وأدوات GlueStack في 7 يونيو.
كانت البرمجية الخبيثة المستخدمة في تلك الحملة عبارة عن حصان طروادة للوصول عن بُعد (RAT) مصمم خصيصًا لبيئات ويندوز، ويستمر في العمل تحت %LOCALAPPDATA%\Programs\Python\Python3127 والاتصال بخوادم C2 في 136.0.9[.]8 و 85.239.62[.]36. تضمنت قدراته تنفيذ أوامر عشوائية، وتحميل/تنزيل الملفات، والوصول عن بُعد لفترات طويلة. وكانت خاصية استمرارية عمله تعني أن مجرد الترقية إلى إصدار نظيف من مكتبة React Native لا يكفي لتنظيف الأجهزة المصابة بالفعل.
كشفت حملة أخرى طويلة الأمد قام بها فريق أبحاث التهديدات في شركة Socket عن استخدام أساليب انتحال أسماء النطاقات والتقليد لزرع حزم مدمرة تستهدف بشكل صريح أطر عمل JavaScript الشائعة مثل React و Vue و Vite و Quill. يستخدم المهاجم اسمًا مستعارًا في npm xuxingfeng، قام بنشر مزيج من الحزم المشروعة والضارة على مدى أكثر من عامين، مما خلق انطباعاً سطحياً بأنه جهة صيانة جديرة بالثقة.
حزم مثل vite-plugin-bomb, vite-plugin-bomb-extend, vite-plugin-react-extend, vite-plugin-vue-extend و vue-plugin-bomb لم يتم تصميمها لسرقة البيانات، بل لإفساد المشاريع أو تدميرها بشكل فعال. قاموا بتنفيذ هجمات متعددة المراحل يتم تفعيلها بتواريخ محددة، وحذفوا ملفات إطار العمل الهامة تحت node_modules (Vue، React، Vite، TypeScript، Ant Design Vue، Pinia، ECharts وغيرها)، وأحيانًا يتم استخدامها بالتزامن مع عمليات إيقاف تشغيل النظام القسري كل ثانية باستخدام shutdown -s -t 5.
طرد واحد كريه بشكل خاص، js-hood، تم التلاعب بنماذج جافا سكريبت الأساسية مثل Array.prototype.filter, map, push, pop ومتعددة String طرقباستبدالها بدوال تبدو صحيحة نحويًا ولكنها تُرجع بيانات عشوائية. ينتج عن ذلك تطبيقات تستمر في العمل ولكنها تُنتج نتائج تالفة وغير حتمية يصعب للغاية تصحيح أخطائها.
استخدم quill-image-downloader اتخذت السلسلة منحى آخر، حيث ركزت على تخريب التخزين من جانب العميل. لقد قامت الشركة بشحن بنية مكونة من ثلاثة ملفات، والتي تقوم، بعد تاريخ تفعيل محدد، بالتكرار على جميع المفاتيح في localStorage, sessionStorage ويقوم هذا النظام بتشفير بيانات ملفات تعريف الارتباط، ثم يقوم بتشويش قيمها جزئيًا بأحرف عشوائية مع الحفاظ على بنيتها. وتتعرض رموز المصادقة وسلال التسوق وتفضيلات المستخدم وأي حالة من جانب المتصفح للتلف بشكل طفيف، مما يتسبب في أعطال متقطعة قد تعزوها العديد من الفرق في البداية إلى أخطاء في التطبيق.
كشف بحث منفصل أجرته شركة OP Innovate عن مجموعة من عشر حزم npm خبيثة انتحلت صفة مكتبات معروفة مثل TypeScript وdiscord.js وethers.js وnodemon. react-router-dom و zustand. بمجرد تثبيتها، تعرض هذه الحزم نافذة CAPTCHA مزيفة، وتحدد بصمة الجهاز المضيف، ثم تقوم بتنزيل برنامج كبير لسرقة المعلومات يعمل على أنظمة تشغيل متعددة من خادم تحكم وسيطرة (C2) في 195.133.79.43، مع دعم صريح لأنظمة التشغيل ويندوز وماك أو إس ولينكس.
وأخيرًا، أظهرت حملة CanisterWorm، التي فصّلها Aikido، إلى أي مدى يرغب المهاجمون في استغلال npm كوسيلة توصيل. تم اختراق أكثر من 135 حزمة من حساب ناشر، وتم تزويدها ببرامج نصية تُنفذ قبل أي خطوة من خطوات بناء التطبيق. تختلف سلوكيات المراحل اللاحقة تبعًا لموقعها، سواءً على جهاز تطوير محلي، أو مهمة تكامل مستمر، أو عقدة بناء مُحاوية. وتتصل هذه الحزم بخادم إنترنت لامركزي (ICP) يعمل كمركز تحكم وسيطرة خفي، مما يسمح للمشغلين بتغيير سلوكها فورًا دون الحاجة إلى تعديل سجل npm.
ثغرات أمنية خطيرة في أدوات React Native: ثغرة تنفيذ التعليمات البرمجية عن بُعد في واجهة سطر الأوامر المجتمعية
لا تأتي جميع المخاطر الأمنية لـ React Native من حزم خبيثة صريحة؛ فبعضها ينبع من ثغرات خطيرة في الأدوات المستخدمة على نطاق واسع. ومن الحالات البارزة CVE-2025-11953 في React Native Community CLI، وهي حزمة يتم سحبها ملايين المرات كل أسبوع من قبل المطورين على أنظمة Windows و macOS و Linux.
سمح هذا الخلل بتنفيذ التعليمات البرمجية عن بعد (RCE) بدون مصادقة عبر طلبات POST مصممة خصيصًا لخادم التطوير المحلي الذي تم تشغيله بواسطة CLI. لأن العديد من المطورين يعرضون خوادمهم الخاصة بالمترو/التطوير على الشبكة لأغراض تصحيح الأخطاء أو اختبار الأجهزة المحمولة، يمكن لمهاجم قريب (أو شخص يمكنه توجيه حركة المرور إلى تلك المنافذ) تشغيل أوامر عشوائية على جهاز المطور.
يتجاوز التأثير بكثير محطة عمل واحدة للمطور: بمجرد أن يتمكن المهاجم من تنفيذ التعليمات البرمجية على جهاز التطوير، يستطيع التسلل إلى شبكات الشركة، وسرقة بيانات الاعتماد، وإفساد عمليات البناء، أو التلاعب بخطوط أنابيب التكامل المستمر/التسليم المستمر التي تتم مزامنتها من ذلك الجهاز. إنه مثال نموذجي على كيف أن "مجرد أداة تطوير محلية" تُعد جزءًا من نقاط الضعف التي يمكن استغلالها في بيئة الإنتاج عند العمل على أنظمة متصلة بالسحابة.
إن إجراءات التخفيف الموصى بها بسيطة ولكنها غير قابلة للتفاوض: التحديث إلى React Native Community CLI 12.5.1 أو أعلى، ومراجعة سجلات طلبات POST المشبوهة أو العمليات غير المتوقعة التي يقوم بها خادم التطوير، وتقييد الوصول إلى الخوادم المحلية ودمج أدوات التطوير في استراتيجية اكتشاف التهديدات الخاصة بك. تعامل مع أي نقطة نهاية خاصة بـ DevOps أو المطورين على أنها هدف ذو قيمة عالية، لأن هذه هي الطريقة التي يراها بها المهاجمون المعاصرون بالضبط.
كيف استجاب المدافعون: تحليل الذكاء الاصطناعي، وفترات التهدئة، والتحصينات المشددة
الجانب الإيجابي في هذه القصص هو أن مجتمع الأمن أصبح أسرع وأكثر تطوراً في اكتشاف التهديدات التي تستهدف سلسلة التوريد ضد React Native ومجال JavaScript الأوسع. تستثمر أدوات مثل StepSecurity و Socket و Aikido Security بكثافة في التحليل السلوكي والمقارنة الآلية ونماذج التعلم الآلي التي تفحص إصدارات npm الجديدة في غضون دقائق من النشر.
في هجوم AstrOOnauta، اكتشف محلل حزم الذكاء الاصطناعي الخاص بشركة StepSecurity الإصدارات الخبيثة في أقل من خمس دقائق، وفتح مشكلات على GitHub مع تحليلات فنية كاملة، ثم أبلغ لاحقًا عن حزم البنية التحتية التي حددها المهاجم إلى npm لإزالتها. قام الفريق بتوثيق كل موجة، وتتبع رؤوس git، وتحليل التعليمات البرمجية المبهمة، وأظهر دليلاً على استخدام Solana C2 وقدم إرشادات تصحيحية خطوة بخطوة للمشرف.
إلى جانب الكشف، بدأت الضوابط الوقائية تكتسب زخماً في مسارات التكامل المستمر. على سبيل المثال، تتيح أداة فحص فترة التهدئة لحزم npm من StepSecurity للمؤسسات حظر التبعيات التي نُشرت قبل ساعات قليلة فقط، مما يمنح الماسحات الضوئية والبشر وقتًا كافيًا لفحصها. ويقوم فحص التحديثات المخترقة بالرجوع إلى قائمة محدثة باستمرار من الحزم المعروفة بخطورتها، ويرفض طلبات السحب التي تحاول إضافة هذه الحزم أو ترقيتها.
تقوم الأدوات التي تراعي الشبكة مثل Harden-Runner بتقييد الاتصالات الصادرة في GitHub Actions ووظائف التكامل المستمر الأخرى إلى قائمة مسموح بها من نقاط النهاية المتوقعة. في عالم حيث تقوم البرامج الضارة بجلب حمولاتها من عقد Solana RPC أو عناوين URL الخاصة بتقويم Google أو نطاقات عناوين IP الخاصة بـ Vultr أو حاويات ICP، فإن تأمين الخروج من أنظمة البناء الخاصة بك يمكن أن يكون الفرق بين اختلاف حزمة سيئ واختراق كامل.
أما فيما يتعلق بالاستجابة، فإن ميزات مثل البحث عن الحزم على مستوى المؤسسة ومراكز التهديدات تساعد الفرق على تحديد نطاق الانفجار بسرعة. بمجرد تحديد حزمة أو مكون إضافي مخترق لـ React Native، يمكن لفرق الأمن أن ترى المستودعات والفروع وملفات القفل التي تتضمنها، والوظائف التي نفذتها، والأجهزة التي اتصلت بعناوين IP المشبوهة - ثم تحديد أولويات المعالجة وفقًا لذلك عبر عشرات أو مئات من قواعد البيانات.
إجراءات عملية لفرق React Native التي تواجه برامج ضارة من npm
بالنسبة لمطوري React Native ومهندسي الأمن على حد سواء، فإن الدفاع ضد الهجمات على مستوى npm يتعلق بالجمع بين النظافة على الأجهزة الفردية والضوابط في CI/CD وإدارة التبعيات. لن ينقذك أي إجراء وقائي منفرد، لكن الدفاعات متعددة الطبقات تقلل بشكل كبير من احتمالات تحول الحزمة الخبيثة إلى اختراق كامل.
إذا كنت تستخدم الحزم المخترقة المذكورة سابقًا، فهناك بعض الفحوصات الفورية التي يجب إجراؤها. بخصوص حادثة رواد الفضاء، دبوس react-native-international-phone-number لإصدار 0.11.7 و react-native-country-select إلى 0.4.0تجنب جميع الإصدارات المصنفة على أنها ضارة أو حلها إلى @latest وهذا يشير حاليًا إلى إصدار مخترق.
افحص مجلدك الرئيسي بحثًا عن ملف باسم init.json ضمن ملف تعريف المستخدم (على سبيل المثال ~/init.json على Unix و ~\init.json على نظام التشغيل Windows). يشير وجودها إلى أن البرمجية الخبيثة القائمة على سولانا قد نُفذت مرة واحدة على الأقل. كما يُنصح بمراجعة سجلات الشبكة الصادرة من محطات عمل المطورين وخوادم التكامل المستمر بحثًا عن اتصالات بـ 45.32.150.251، أو نقاط نهاية Solana RPC المستخدمة في الحملات، أو عناوين C2 الأخرى المذكورة سابقًا (مثل 136.0.9[.]8, 85.239.62[.]36, 195.133.79.43, 217.69.3.152).
تحقق الخاص بك node_modules وملفات القفل للتبعيات الدالة مثل @agnoliaarisian7180/string-argv, @usebioerhold8733/s-format والخبيثة @react-native-aria/* or @gluestack-ui/utils الإصدارات المدرجة في التنبيهات. إذا عثرت على أي منها، فتعامل مع الجهاز على أنه مُعرّض للاختراق، وقم بتغيير جميع بيانات الاعتماد الحساسة: رموز npm، ورموز الوصول إلى GitHub، ومفاتيح SSH، ومفاتيح موفر الخدمة السحابية، وأي أسرار موجودة في .env أو ملفات التكوين أثناء التثبيت.
في المستقبل، حسّن وضع سلسلة التوريد الخاصة بك لأعمال React Native: قم دائمًا بتثبيت ملفات القفل وفرضها (package-lock.json, yarn.lock, pnpm-lock.yamlقم بتفعيل المصادقة الثنائية على جميع حسابات npm التي تتمتع بصلاحيات النشر، وقم بتهيئة نظام التكامل المستمر لديك لإيقاف عمليات البناء عند ظهور تبعيات جديدة دون مراجعة. يُنصح بتشغيلها مع --ignore-scripts عند تثبيت حزم الطرف الثالث في سياقات غير موثوقة، وربط أدوات فحص التبعيات بكل من سير العمل المحلي والتكامل المستمر.
وأخيرًا، تعامل مع بيئات التطوير - وخاصة تلك المستخدمة لتطبيقات React Native التي تربط بين تطبيقات الهاتف المحمول والويب وواجهات برمجة التطبيقات الخلفية - كجزء من سطح هجوم الإنتاج الخاص بك. سواء كان التهديد عبارة عن الاستيلاء على حساب، أو زرع برمجيات خبيثة مدعومة من Solana في مكون إدخال الهاتف، أو إضافة Vite مزيفة تحذف React من node_modulesسواء كان ذلك تكامل Quill خبيثًا يقوم بتشويش التخزين من جانب العميل، أو تنفيذ التعليمات البرمجية عن بعد في React Native Community CLI، فإن القاسم المشترك هو أن المهاجمين يرون الآن أدوات المطورين كواحدة من أكثر الطرق فعالية للوصول إلى جواهر مؤسستك.

