ثغرة React Native في Metro - حدث مشروعك الان

x32x01
  • بواسطة x32x01 ||
تحذير مهم لمطوّري React Native: ثغرة في Metro لازم تتعامل معاها حالاً 🚨
لو شغال بمشروع React Native وبتشغّل السيرفر المحلي (Metro) على جهازك، يبقى لازم تقرأ البوست ده كله. في ثغرة خطيرة تم الكشف عنها (CVE-2025-11953) بتخلي الـ Metro development server يشتغل على واجهة شبكية عامة (زي 0.0.0.0) وتتعرض لحقن أوامر نظامية عن طريق endpoint معين - وده ممكن يخلي حد على نفس الشبكة أو صفحة خبيثة يقدر يشغّل أوامر على جهازك. الباحثين نصحوا بالتحديث فوراً أو على الأقل تقييد الوصول بسياج محلي.

هنا هاقولك كل اللي محتاج تعمله: إزاي تتأكد لو إنت معرض للخطر، إزاي تصلحها فوراً، وإزاي تقلل أي مخاطرة لحد ما تعمل تحديث نهائي - كل ده بطريقة بسيطة وعملية. 💪

إيه اللي حصل بسرعة؟ ومين المتضرر؟ ⚠️

باختصار: حزمة @react-native-community/cli (اللي بتشغل Metro عادة لما تكتب npx react-native start أو npm start) كانت بتربط السيرفر على كل الواجهات بشكل افتراضي، وفيه endpoint بيقبَل مدخلات تتحول لاستدعاء الدالة open() من حزمة open، واللي بتقدر تستدعي أوامر نظامية لو المدخل مش متعامل معاه صح. النتيجة: ممكن تنفيذ أوامر عن بُعد على الجهاز اللي شغّل السيرفر. ده تصنيف CVSS عالي جداً (9.8) ولازم نتصرف.

المتضررين: أي مطوّر بيشغّل Metro على جهازه خصوصاً لو السيرفر متاح على شبكة عامة أو wi-fi مش مؤمنة، أو لو جهازك مربوط بشبكات مشتركة. بعض الأدوات/أطر زي Expo مش متأثرة بنفس الطريقة لو بتستخدم CLI مختلف.



ازاي أتعرف لو جهازك معرض للخطر؟ 🔎

في شوية خطوات سهلة تقدر تعملها دلوقتي:
  1. شوف لو Metro شغال وبيستمع على الـ port الافتراضي (8081):
Bash:
# لينوكس / ماك
ss -tulpn | grep 8081
# أو
lsof -i :8081

# ويندوز (في PowerShell أو CMD)
netstat -ano | findstr 8081
لو النتيجة بتبيّن إن السيرفر مرتبط بـ 0.0.0.0:8081 يبقى معرض. لو مكتوب 127.0.0.1:8081 يبقى محصور على الجهاز المحلي.
  1. شوف نسخة الحزمة اللي عندك:
Bash:
# في مجلد المشروع
npm list @react-native-community/cli-server-api
# أو لو منصب جلوبال
npm list -g @react-native-community/cli-server-api
لو النسخة أقل من 20.0.0 (أو ما مش متوافقة مع التحديث الرسمي) يبقى لازم تحدث. مصادر الأمن الرسمية بتنصح بالتحديث للنسخة 20.0.0 أو أحدث كحل نهائي.



إيه اللي أعمله دلوقتي - خطوات سريعة وآمنة (mitigation) ✅

لو مش تقدر تحدث فوراً، اعمل الـ workarounds دي على طول علشان تقلل المخاطرة:
  1. شغّل Metro على localhost بس (ربط السيرفر على واجهة الجهاز بس):
Bash:
npx react-native start --host 127.0.0.1
# أو لو بتستخدم CLI بشكل مباشر
npx @react-native-community/cli start --host 127.0.0.1
ده يمنع أي حد على الشبكة من الوصول للسيرفر لو مش على نفس الجهاز. JFrog والباحثين نصحوا بالحل ده كحل مؤقت.
  1. حدّ من الوصول على مستوى الشبكة:
    • افصل جهازك من شبكات عامة أو تأكد إن الشبكة مؤمنة.
    • لو عندك جدار ناري (firewall)، امنع الوصول للـ port 8081 من الشبكة.
    • على مستوى الـ router، فعل قواعد تمنع الوصول المحلي غير الموثوق.
  2. حدّث الحزمة فوراً لو تقدر:
Bash:
# في مشروعك
npm install @react-native-community/cli-server-api@20.0.0 --save-dev
# أو لو منصب جلوبال
npm install -g @react-native-community/cli-server-api@20.0.0
بعد كده اعمل restart للـ Metro وتأكد إن النسخة الجديدة شغالة. الحَل النهائي هو التحديث للنسخة اللي غَلَبت الثغرة.
  1. لو مش تقدر تحدث فوراً استخدم combination: شغّل --host 127.0.0.1 + قفل الشبكة + راقب اللوجس.



أوامر مفيدة للفحص وللتحديث - انسخها ونفذها 🚀

Bash:
# فحص النسخة
npm list @react-native-community/cli-server-api

# تحديث محلي
npm install @react-native-community/cli-server-api@20.0.0 --save-dev

# أو تحديث جلوبال (لو انت منصب جلوبالي)
npm install -g @react-native-community/cli-server-api@20.0.0

# تشغيل Metro محلي بس
npx react-native start --host 127.0.0.1

# فحص لو Metro مستمع على كل الواجهات
ss -tulpn | grep 8081
lsof -i :8081

نصايح عملية للحماية بعد التحديث 🔐

  • دايماً شغّل التحديثات الأمنية أول ما تطلع، خصوصاً مكتبات الـ CLI والأدوات اللي بتتعامل مع الشبكة. (ده درس مهم من المشكلة دي).
  • لو بتشتغل ضمن فريق، فرض إن كل واحد يعمل نفس التحديثات على جهازه.
  • حط سياسات تمنع ربط بيئة التطوير لشبكات عامة بدون VPN آمن.
  • فعل برامج المراقبة والـ IDS لو عندك بيئة حساسة أو شبكات كبيرة.
  • سجّل الوصول والعمليات في اللوجز علشان تقدر ترجع وتعرف لو حصل حاجة.

الخلاصة - خلّيها في دماغك 🧠

  • في ثغرة خطيرة اتكتشفت في حزمة React Native CLI بتأثر على Metro وتخلي السيرفر يقدر ينفّذ أوامر.
  • الحل النهائي: حدّث @react-native-community/cli-server-api للنسخة 20.0.0 أو أحدث.
  • لو مش تقدر تحدث فوراً: شغّل Metro مربوط على 127.0.0.1، قفل الوصول بالشبكة، واتأكد باستخدام ss/lsof/netstat.
 
المواضيع ذات الصلة
x32x01
الردود
0
المشاهدات
386
x32x01
x32x01
x32x01
الردود
0
المشاهدات
425
x32x01
x32x01
x32x01
الردود
0
المشاهدات
418
x32x01
x32x01
x32x01
الردود
0
المشاهدات
387
x32x01
x32x01
x32x01
الردود
0
المشاهدات
378
x32x01
x32x01
x32x01
الردود
0
المشاهدات
390
x32x01
x32x01
x32x01
الردود
0
المشاهدات
415
x32x01
x32x01
x32x01
الردود
0
المشاهدات
34
x32x01
x32x01
x32x01
الردود
0
المشاهدات
395
x32x01
x32x01
x32x01
الردود
0
المشاهدات
379
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,999
المشاركات
2,199
أعضاء أكتب كود
479
أخر عضو
as6318380@gmail
عودة
أعلى