- بواسطة x32x01 ||
تحذير مهم لمطوّري React Native: ثغرة في Metro لازم تتعامل معاها حالاً 
لو شغال بمشروع React Native وبتشغّل السيرفر المحلي (Metro) على جهازك، يبقى لازم تقرأ البوست ده كله. في ثغرة خطيرة تم الكشف عنها (CVE-2025-11953) بتخلي الـ Metro development server يشتغل على واجهة شبكية عامة (زي 0.0.0.0) وتتعرض لحقن أوامر نظامية عن طريق endpoint معين - وده ممكن يخلي حد على نفس الشبكة أو صفحة خبيثة يقدر يشغّل أوامر على جهازك. الباحثين نصحوا بالتحديث فوراً أو على الأقل تقييد الوصول بسياج محلي.
هنا هاقولك كل اللي محتاج تعمله: إزاي تتأكد لو إنت معرض للخطر، إزاي تصلحها فوراً، وإزاي تقلل أي مخاطرة لحد ما تعمل تحديث نهائي - كل ده بطريقة بسيطة وعملية.
إيه اللي حصل بسرعة؟ ومين المتضرر؟
باختصار: حزمة
المتضررين: أي مطوّر بيشغّل Metro على جهازه خصوصاً لو السيرفر متاح على شبكة عامة أو wi-fi مش مؤمنة، أو لو جهازك مربوط بشبكات مشتركة. بعض الأدوات/أطر زي Expo مش متأثرة بنفس الطريقة لو بتستخدم CLI مختلف.
ازاي أتعرف لو جهازك معرض للخطر؟
في شوية خطوات سهلة تقدر تعملها دلوقتي:
لو النتيجة بتبيّن إن السيرفر مرتبط بـ 0.0.0.0:8081 يبقى معرض. لو مكتوب 127.0.0.1:8081 يبقى محصور على الجهاز المحلي.
لو النسخة أقل من 20.0.0 (أو ما مش متوافقة مع التحديث الرسمي) يبقى لازم تحدث. مصادر الأمن الرسمية بتنصح بالتحديث للنسخة 20.0.0 أو أحدث كحل نهائي.
إيه اللي أعمله دلوقتي - خطوات سريعة وآمنة (mitigation)
لو مش تقدر تحدث فوراً، اعمل الـ workarounds دي على طول علشان تقلل المخاطرة:
ده يمنع أي حد على الشبكة من الوصول للسيرفر لو مش على نفس الجهاز. JFrog والباحثين نصحوا بالحل ده كحل مؤقت.
بعد كده اعمل restart للـ 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 مختلف.
ازاي أتعرف لو جهازك معرض للخطر؟
في شوية خطوات سهلة تقدر تعملها دلوقتي:- شوف لو Metro شغال وبيستمع على الـ port الافتراضي (8081):
Bash:
# لينوكس / ماك
ss -tulpn | grep 8081
# أو
lsof -i :8081
# ويندوز (في PowerShell أو CMD)
netstat -ano | findstr 8081 - شوف نسخة الحزمة اللي عندك:
Bash:
# في مجلد المشروع
npm list @react-native-community/cli-server-api
# أو لو منصب جلوبال
npm list -g @react-native-community/cli-server-api إيه اللي أعمله دلوقتي - خطوات سريعة وآمنة (mitigation)
لو مش تقدر تحدث فوراً، اعمل الـ workarounds دي على طول علشان تقلل المخاطرة:- شغّل Metro على localhost بس (ربط السيرفر على واجهة الجهاز بس):
Bash:
npx react-native start --host 127.0.0.1
# أو لو بتستخدم CLI بشكل مباشر
npx @react-native-community/cli start --host 127.0.0.1 - حدّ من الوصول على مستوى الشبكة:
- افصل جهازك من شبكات عامة أو تأكد إن الشبكة مؤمنة.
- لو عندك جدار ناري (firewall)، امنع الوصول للـ port 8081 من الشبكة.
- على مستوى الـ router، فعل قواعد تمنع الوصول المحلي غير الموثوق.
- حدّث الحزمة فوراً لو تقدر:
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 - لو مش تقدر تحدث فوراً استخدم 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.