
react CVE-2025-55182
الخطورة: حرجة — CVSS 10.0
CWE: CWE-502 (إلغاء تسلسل البيانات غير الموثوقة)
البائع: Meta (Facebook)
تاريخ الإفصاح: 3 ديسمبر 2025
CVE-2025-55182 هي ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) بدون مصادقة وبأقصى درجة خطورة في React Server Components (RSC)، وتُعرف باسم React2Shell. يكمن الخلل في كيفية قيام React بفك ترميز الحمولات المرسلة إلى نقاط نهاية Server Function عبر بروتوكول Flight. يمكن للمهاجم إرسال طلب HTTP POST واحد مصمم بعناية إلى خادم ضعيف وتنفيذ تعليمات برمجية عشوائية — دون الحاجة إلى بيانات اعتماد أو تفاعل من المستخدم.
التطبيقات التي لا تعرض نقاط نهاية Server Function بشكل صريح تظل عرضة للخطر إذا كانت تدعم React Server Components.
| الحزمة | الإصدارات الضعيفة | الإصدارات المُصححة |
|---|---|---|
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 |
الأطر المتأثرة (عند استخدام حزم React الضعيفة): Next.js 15.x / 16.x (App Router), React Router, Waku, RedwoodSDK, Parcel RSC, Vite RSC plugin.
سلسلة المتجه: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
تستخدم React Server Components تنسيقاً ثنائياً يُسمى بروتوكول Flight لبث أشجار المكونات من الخادم إلى العميل. يتعامل البروتوكول نفسه مع Server Functions (المعروفة سابقاً باسم Server Actions) — وهي نقاط نهاية قابلة للاستدعاء تقبل وسائط مُسلسلة من المتصفح.
تكمن الثغرة في وحدة إلغاء التسلسل: فعند معالجة React لحمولة Flight يمكن خداعها لإنشاء كائنات عشوائية على جانب الخادم، مما يؤدي إلى تنفيذ كامل للتعليمات البرمجية عن بُعد. ونظراً لأن نقطة نهاية Flight تكون مكشوفة افتراضياً كلما تم تفعيل RSC، ولأنه لا توجد بوابة مصادقة على مستوى البروتوكول، فإن استغلال الثغرة يتطلب فقط وصولاً شبكياً إلى الخادم.
يستخدم القالب المرفق CVE-2025-55182.yaml ثلاث طرق كشف متكاملة.
يرسل طلب POST بسيطاً مع Content-Type: text/x-component إلى المسار الجذر. يستجيب خادم RSC الضعيف (أو الذي يمكن الوصول إليه) بنفس نوع المحتوى وجسم دفق Flight تبدأ صفوفه بمعرفات صفوف أبجدية رقمية متبوعة بنقطتين رأسيتين (مثل 0:، 1:) أو رموز مرجع React ($L, $S, $I, $@).
POST / HTTP/1.1
Content-Type: text/x-component
Accept: text/x-component, */*
شرط المطابقة: HTTP 200 + ترويسة text/x-component + تعبير نمطي لدفق Flight في الجسم.
تشير Next.js إلى طلبات RSC عبر ترويسة RSC: 1 ومعامل الاستعلام ?_rsc=. يحاكي هذا الطلب عملية جلب مسبق من المتصفح للتأكد من أن نقطة نهاية Flight في App Router قابلة للوصول.
GET /?_rsc=1 HTTP/1.1
Accept: text/x-component
RSC: 1
Next-Router-State-Tree: %5B%22%22%2C%7B%7D%5D
شرط المطابقة: HTTP 200 + ترويسة text/x-component.
يرسل حمولة Flight تالفة وبسيطة مع ترويسة Next-Action (الآلية المستخدمة لاستدعاء Server Functions). يحاول الخادم الضعيف إلغاء تسلسل الحمولة؛ وحتى الاستجابة الخطأ التي تتضمن ترويسات خاصة بـ RSC تؤكد وجود نقطة النهاية.
POST / HTTP/1.1
Content-Type: text/x-component
Next-Action: 0000000000000000000000000000000000000000
شرط المطابقة: HTTP 200/400/500 + ترويسة text/x-component أو x-action-revalidated.
يفحص ملفات *.json المحلية (مثل package-lock.json, yarn.lock) بحثاً عن أسماء الحزم الضعيفة مع تعبير نمطي للإصدارات يطابق 19.0.0, 19.1.0, 19.1.1, أو 19.2.0. مفيد لتدقيق المستودعات أو خطوط أنابيب CI دون إرسال أي حركة مرور شبكية.
# Install / update Nuclei
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
nuclei -target CVE-2025-55182.yaml -u https://target.example.com
nuclei -target CVE-2025-55182.yaml -l targets.txt
nuclei -target CVE-2025-55182.yaml -target ./path/to/project
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -v -je results.json
nuclei -target CVE-2025-55182.yaml -u https://target.example.com -rl 10 -timeout 10
قم بالترقية فوراً إلى إصدار مُصحح:
# npm
npm install react-server-dom-webpack@latest
# yarn
yarn upgrade react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
# pnpm
pnpm update react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
الحد الأدنى من الإصدارات الآمنة لكل فرع:
| الفرع | الحد الأدنى من الإصدار الآمن |
|---|---|
| 19.0.x | 19.0.1 |
| 19.1.x | 19.1.2 |
| 19.2.x | 19.2.1 |
إجراءات تخفيف مؤقتة (إذا لم تكن الترقية ممكنة فوراً):
text/x-component في طلبات POST الواردة (قواعد Google Cloud Armor متاحة علناً لهذه الثغرة).package-lock.json أو node_modules أو SBOM.هذا القالب مخصص لاختبار الأمن المصرح به وتقييم الثغرات فقط. قد يكون تشغيله ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها غير قانوني. لا يتحمل المؤلفون أي مسؤولية عن سوء الاستخدام.
| المقياس | القيمة |
|---|
| متجه الهجوم | الشبكة |
| تعقيد الهجوم | منخفض |
| الامتيازات المطلوبة | لا شيء |
| تفاعل المستخدم | لا شيء |
| النطاق | متغير |
| السرية | عالية |
| السلامة | عالية |
| التوافر | عالية |
| النتيجة الإجمالية | 10.0 (حرجة) |