
ماسح ضوئي سلبي للثغرات الأمنية لـ CVE-2025-55182 و CVE-2025-66478، يكتشف تنفيذ الأوامر عن بعد غير المصادق عليه في مكونات خادم React عبر بصمة الإطار، وتحليل الإصدار، واستقصاء نقطة نهاية RSC.
أداة كشف تنفيذ الأوامر عن بُعد في بروتوكول Flight لمكونات خادم React
يحدد هذا الماسح الأنظمة التي قد تكون معرضة للثغرات CVE-2025-55182 (React) و CVE-2025-66478 (Next.js)، وهي ثغرات حرجة لتنفيذ الأوامر عن بُعد دون مصادقة في بروتوكول "Flight" لمكونات خادم React (RSC).
عوامل الخطر الرئيسية:
ثغرة حرجة في إلغاء التسلسل غير الآمن في تنفيذ مكونات خادم React. يفشل بروتوكول "Flight" (RSC) في التحقق بشكل صحيح من هيكل وأنواع الحمولات الواردة، مما يسمح للمهاجمين بحقن بيانات ضارة تؤثر على التنفيذ على جانب الخادم.
مهاجم → طلب HTTP POST مصمم → نقطة نهاية RSC → إلغاء تسلسل → تنفيذ أوامر عن بُعد
يتطلب الهجوم فقط طلب HTTP مصمم خصيصًا لأي نقطة نهاية لدوال الخادم. لا حاجة للمصادقة، والإعدادات الافتراضية معرضة للخطر.
يستخدم الماسح البصمة السلبية واستكشاف البروتوكول لتحديد الأنظمة المعرضة للخطر. لا يحاول استغلال الثغرات.
┌─────────────────────────────────────────────────────────────────┐
│ خط أنابيب الكشف │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 1. كشف الإطار │
│ ├── رؤوس HTTP (X-Powered-By: Next.js) │
│ ├── مصدر الصفحة (__NEXT_DATA__، قطع React الأثرية) │
│ └── قوائم البناء │
│ │
│ 2. بصمة الإصدار │
│ ├── سلاسل الإصدار المضمنة في حزم JS │
│ ├── أنماط إصدار الحزمة │
│ └── تحليل قائمة البناء │
│ │
│ 3. اكتشاف نقاط نهاية RSC │
│ ├── إرسال رؤوس RSC (RSC: 1, Accept: text/x-component) │
│ ├── تحليل Content-Type للاستجابة │
│ └── كشف علامات بروتوكول Flight في الاستجابة │
│ │
│ 4. استكشاف إجراءات الخادم │
│ ├── طلب POST بحمولة Flight ضئيلة │
│ ├── التحقق من معالجة إلغاء التسلسل │
│ └── تحديد نقاط نهاية الإجراءات │
│ │
│ 5. تقييم الثغرة │
│ ├── ربط الإصدار بالنطاقات المعروفة المعرضة │
│ ├── وزن وجود نقطة نهاية RSC │
│ └── إنشاء حكم بدرجة ثقة │
│ │
└─────────────────────────────────────────────────────────────────┘
يستخدم بروتوكول Flight تنسيقًا سلكيًا محددًا:
0:["$","div",null,{"children":"Hello"}]
1:["$","$L1",null,{}]
2:{"name":"ServerComponent"}
يبحث الماسح عن:
text/x-component{number}:{payload}$, $L, $F, $@, $undefinedيبحث عن أنماط الإصدار في:
/_next/static/chunks/)[email protected])requests# استنساخ أو تنزيل ملفات الماسح
# تثبيت التبعيات
pip install -r requirements.txt
# التحقق من التثبيت
python3 cve-2025-55182-scanner.py --help
# هدف واحد
python3 cve-2025-55182-scanner.py -t https://example.com
# مع إخراج مفصل
python3 cve-2025-55182-scanner.py -t https://example.com -v
# إنشاء ملف الأهداف (رابط واحد لكل سطر)
echo "https://app1.example.com" > targets.txt
echo "https://app2.example.com" >> targets.txt
# مسح جميع الأهداف
python3 cve-2025-55182-scanner.py -f targets.txt -o results.json
python3 cve-2025-55182-scanner.py -t https://example.com \
--timeout 15 \
--threads 10 \
--user-agent "SecurityAudit/1.0" \
-v \
-o scan_results.json
لتحليل أعمق للبروتوكول:
python3 rsc_analyzer.py https://example.com 2>/dev/null
يوفر هذا تحليلاً تفصيليًا لبروتوكول Flight وتعداد المكونات.
======================================================================
الهدف: https://app.example.com
الحالة: VULNERABLE
الإطار: Next.js
الإصدار: 19.1.0
نقاط نهاية RSC: /, /_next/data
الأدلة:
- رأس X-Powered-By: Next.js
- إصدار React المكتشف: 19.1.0
- استجابة RSC Flight في / (Content-Type: text/x-component)
- علامات بروتوكول Flight مكتشفة في /
التوصيات:
→ حرج: التصحيح الفوري مطلوب!
→ ترقية React إلى 19.0.1 أو 19.1.2 أو 19.2.1
→ ترقية Next.js إلى أحدث إصدار مصلح (15.0.5+ أو 16.0.7)
→ تمكين قواعد WAF لحظر حمولات RSC الضارة
→ مراقبة طلبات POST الشاذة إلى نقاط نهاية RSC
======================================================================
{
"target": "https://app.example.com",
"status": "VULNERABLE",
"framework": "Next.js",
"version": "19.1.0",
"rsc_endpoints": ["/", "/_next/data"],
"evidence": [
"X-Powered-By header: Next.js",
"React version detected: 19.1.0",
"RSC Flight response at / (Content-Type: text/x-component)"
],
"recommendations": [
"CRITICAL: Immediate patching required!",
"Upgrade React to 19.0.1, 19.1.2, or 19.2.1"
]
}
✅ وجود سلسلة إصدار صريحة في الحزم
✅ رأس X-Powered-By يكشف الإصدار
✅ وجود مؤشرات RSC متعددة
✅ تأكيد استجابة بروتوكول Flight
✅ يقبل الخادم طلبات POST الخاصة بـ RSC
❌ عدم توفر معلومات الإصدار
❌ إخفاء WAF/CDN للاستجابات
❌ تنفيذ إطار مخصص
❌ التخزين المؤقت الثقيل يمنع الاستكشاف
❌ تحديد المعدل يمنع الكشف
| السيناريو | لماذا يحدث | التخفيف |
|---|---|---|
| سلسلة إصدار قديمة مخبأة | ذاكرة تخزين مؤقت لـ CDN/البناء | تحقق من نقاط نهاية متعددة |
| تعطيل RSC بعد التحديث | تغيير التكوين دون إعادة بناء | تحقق من تاريخ البناء |
| تنفيذ RSC غير قياسي |
| العامل | التأثير على الكشف |
|---|---|
| Cloudflare/WAF | قد يمنع الاستكشافات، يخفي الرؤوس |
| التخزين المؤقت لـ CDN |
بالنسبة للنتائج الحرجة، تحقق دائمًا من خلال:
npm audit أو yarn auditالإجراءات الفورية (0-24 ساعة):
التصحيح فورًا
npm install [email protected] [email protected]
npm install [email protected] # أو أحدث إصدار مصلح
تمكين قواعد WAF - قامت Cloudflare وAkamai وAWS WAF بنشر قواعد حماية
مراقبة السجلات بحثًا عن طلبات POST مشبوهة إلى نقاط نهاية RSC
الإجراءات قصيرة المدى (24-72 ساعة):
package.json# مسح جميع أصول الشركة دفعة واحدة
cat domains.txt | while read domain; do
python3 cve-2025-55182-scanner.py -t "$domain" -o "results_${domain//\//_}.json"
done
# تجميع النتائج
jq -s '[.[] | select(.status == "VULNERABLE" or .status == "LIKELY_VULNERABLE")]' results_*.json > critical_findings.json
# مثال GitHub Actions
- name: CVE-2025-55182 Check
run: |
python3 cve-2025-55182-scanner.py -t ${{ env.APP_URL }} -o results.json
if grep -q '"status": "VULNERABLE"' results.json; then
echo "::error::Critical vulnerability detected!"
exit 1
fi
| الإصدار | التاريخ | التغييرات |
|---|---|---|
| 1.0.0 | 2025-12-03 | الإصدار الأولي |
هذه الأداة مقدمة لاختبار الأمان المصرح به فقط. استخدمها فقط ضد الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها. لا يتحمل المؤلفون أي مسؤولية عن سوء الاستخدام أو الضرر الناجم عن هذه الأداة.
| الحزمة | الإصدارات المعرضة | الإصدارات المصلحة |
|---|
| react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
| Next.js | 14.3.0-canary.77+, 15.x, 16.0.0-16.0.6 | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, 16.0.7 |
| المؤشر | طريقة الكشف | الثقة |
|---|
X-Powered-By: Next.js | فحص رأس HTTP | عالية |
علامة البرنامج النصي __NEXT_DATA__ | تحليل مصدر HTML | عالية |
مسارات الأصول /_next/ | تحليل مصدر HTML | متوسطة |
| علامات ترطيب React | تحليل مصدر HTML | متوسطة |
| الخيار | الوصف | الافتراضي |
|---|
-t, --target | رابط الهدف الواحد | - |
-f, --file | ملف بقائمة الأهداف | - |
-o, --output | ملف الإخراج بتنسيق JSON | - |
-v, --verbose | عرض الأدلة التفصيلية | False |
--timeout | مهلة الطلب (بالثواني) | 10 |
--threads | عدد الخيوط المتزامنة | 5 |
--verify-ssl | التحقق من شهادات SSL | False |
--user-agent | وكيل مستخدم مخصص | Mozilla/5.0... |
--no-banner | إخفاء الشعار | False |
| الحالة | المعنى | الإجراء المطلوب |
|---|
| 🔴 VULNERABLE | تم اكتشاف إصدار معرض مؤكد | التصحيح الفوري |
| 🔴 LIKELY_VULNERABLE | React 19.x مع RSC، الإصدار في النطاق المعرض | التصحيح العاجل |
| 🟡 POTENTIALLY_VULNERABLE | تم العثور على نقاط نهاية RSC، الإصدار غير معروف | التحقيق والتصحيح |
| 🟢 NOT_VULNERABLE | تم تأكيد الإصدار المصلح | راقب التحديثات |
| 🔵 UNKNOWN | تعذر تحديد الحالة | التحقق اليدوي مطلوب |
| ⚪ ERROR | فشل المسح | أعد المحاولة أو تحقق يدويًا |
| نوع النتيجة | الثقة | الشرح |
|---|
| VULNERABLE مع إصدار | عالية (+90%) | تطابق سلسلة الإصدار مع إصدار معرض معروف |
| VULNERABLE عبر الرأس | عالية (+85%) | كشف X-Powered-By عن إصدار معرض |
| LIKELY_VULNERABLE | متوسطة-عالية (70-85%) | تم اكتشاف React 19.x و RSC نشط، والإصدار لم يتم تصحيحه صراحة |
| POTENTIALLY_VULNERABLE | متوسطة (50-70%) | تستجيب نقاط نهاية RSC، لكن الإصدار غير معروف |
| NOT_VULNERABLE | عالية (+85%) | تم اكتشاف إصدار مصلح صراحة |
| UNKNOWN | منخفضة (<50%) | معلومات غير كافية تم جمعها |
| إطار مخصص |
| تحقق يدويًا |
| السيناريو | لماذا يحدث | التخفيف |
|---|
| إزالة الإصدار من الحزم | تحسين الإنتاج | تحقق من قوائم البناء |
| حظر WAF للاستكشافات | ضوابط أمنية | اختبر من عنوان IP مصرح به |
| RSC على مسارات غير قياسية | توجيه مخصص | وسّع قائمة كلمات المسار |
| SPA بدون مؤشرات SSR | عرض من جانب العميل فقط | تحقق من نقاط نهاية API |
| قد يقدم معلومات إصدار قديمة |
| موازنات التحميل | قد توجه إلى إصدارات تطبيق مختلفة |
| Kubernetes/الحاويات | قد تختلف كل حاوية |
| علامات الميزات | قد يتم تمكين RSC بشكل مشروط |