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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
React2Shell — بحثي حول CVE-2025-55182 | Kitploit
أدوات/GitHubGitHub/i3r1h0n/react2shell
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمتطوير الحمولات
GitHubi3r1h0n/react2shell

React2Shell

بحثي حول CVE-2025-55182

عرض المستودع
منذ 8 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة

React2Shell (CVE-2025-55182)

نظرة عامة

هذا المستودع هو بحثي حول CVE-2025-55182، والذي يُشار إليه أيضًا بثغرة React2Shell. يتكوّن المستودع من جزأين رئيسيين: بيئة الاختبار (stand) والاستغلال (exploit).

المراجع

بعض المعلومات حول هذا الخلل الأمني:

  • NIST
  • مقال HackerOne
  • ملخص من Vercel
  • مقال من WIZ
  • الصفحة الشخصية للمؤلف
  • إثبات المفهوم الأصلي

السبب الجذري

الثغرة هي في الأساس نقص في التحقق من إدخال المستخدم. لكن الأمر ليس بهذه البساطة =)

يستخدم جزء React Client وجزء React Server بروتوكول React Flight Protocol لتبادل البيانات. إليك محاضرة جيدة حوله، لتتعرف عليه بسرعة.

مثال على أجزاء رسائل React Flight Protocol:

root@kitploit:~
{
    "0": (None, '["$1"]'),
    "1": (None, '{"object":"fruit","name":"$2:fruitName"}'),
    "2": (None, '{"fruitName":"cherry"}'),
}

يمكن لأجزاء RFP أن تشير إلى بعضها البعض باستخدام عامل $. عندما يتم إلغاء تسلسل هذه الأجزاء لاحقًا على الخادم، يتم حل هذه الروابط. الأمر الأساسي هنا هو أنه يمكننا الوصول إلى النموذج الأولي للكائن (prototype) منه.

من خلال التلاعب بالنموذج الأولي، يمكننا إجبار V8 على انتظار .then() الخاص بنا. قد تبدو الحمولة الناتجة هكذا:

root@kitploit:~
{
    "then": "$1:__proto__:then",
    "status": "resolved_model",
    "reason": -1,
    "value": '{"then": "$B0"}',
    "_response": {
        "_prefix": f"return foo; ",
        "_formData": {
            "get": "$1:constructor:constructor",
        },
    },
}

لن أدخل في تفاصيل عميقة حول كيفية عمل سلسلة الأدوات (gadget chain) هذه فعليًا؛ إذا كنت تريد معرفة المزيد، اقرأ تحليلًا رائعًا هنا من إعداد Moritz Sanft.

يمكنك أيضًا الاطلاع على مقارنة الإصدارات على GitHub، قبل وبعد التصحيح، إذا أردت التعمق أكثر في هذا الخلل.

بيئة الاختبار (Stand)

لقد أنشأت تطبيقًا بسيطًا بـ react/next.js يستخدم (انظر stand/package.json):

root@kitploit:~
"dependencies": {
  "next": "16.0.6",
  "react": "19.2.0",
  "react-dom": "19.2.0"
},

مجرد صفحة بسيطة تحتوي على نص، تم إنشاؤها باستخدام create-next-app:

لبدء التشغيل، نفّذ الأمر التالي في مجلد stand:

root@kitploit:~
docker compose up --build -d

ثم انتقل إلى http://localhost:3000 في متصفحك.

الاستغلال (Exploit)

عملية الاستغلال مباشرة. كل ما نحتاجه هو إرسال أجزاء RFP مُنشأة خصيصًا مع حمولتنا إلى الخادم عبر طلب Post. انظر exploit/src/main.py. يتضمن أيضًا فحصًا بسيطًا لمعرفة ما إذا كان الخادم ثغرة أم لا، حيث يحاول تشغيل أمر whoami، وإذا تجاوز الوقت المحدد، فمن المرجح أن الخادم يستخدم إصدارًا مصححًا.

يمكنك رؤية حمولة RFP في exploit/resource/chunk.json.

قبل تشغيل الاستغلال، لا تنسَ إعداد مستمع netcat وتحديث exploit/resource/config.toml بالمضيف والمنفذ الخاصين بك، للحصول على قشرة عكسية (reverse shell).

استمتع بالاختراق!

التقدير

احترام كبير لـ Lachlan Davidson، الذي اكتشف الثغرة، وmaple الذي وجد أداة جيدة، وأيضًا Moritz Sanft، الذي شارك إثبات المفهوم الخاص به وكتب تحليلًا رائعًا.

إنتاج I3r1h0n.

تنزيل الأداة