
استغلال إثبات المفهوم لـ CVE-2025-29927، ثغرة تجاوز الوسيط في Next.js. يتضمن حمولات خاصة بالإصدار ومختبرًا قائمًا على Docker لاختبار الوصول غير المصرح به إلى المسارات المحمية.

جميع إصدارات Next.js من 11.1.4 حتى 13.5.6، وإصدارات 14.x قبل 14.2.25، وإصدارات 15.x قبل 15.2.3 متأثرة بهذه الثغرة. ويكون التأثير كبيرًا بشكل خاص على التطبيقات التي تعتمد على الوسيطة (middleware) لتنفيذ ضوابط الوصول، حيث يمكن للمهاجمين الحصول على وصول غير مصرح به إلى الموارد المحمية دون مصادقة.
تنبع الثغرة CVE-2025-29927 من عيب في التصميم في طريقة معالجة Next.js لترويسة x-middleware-subrequest. كانت هذه الترويسة مخصصة في الأصل للاستخدام الداخلي داخل إطار عمل Next.js لمنع حلقات تنفيذ الوسيطة اللانهائية.
عندما يستخدم تطبيق Next.js الوسيطة، يتم استدعاء الدالة runMiddleware لمعالجة الطلبات الواردة. وكجزء من وظيفتها، تتحقق هذه الدالة من وجود ترويسة x-middleware-subrequest. إذا كانت هذه الترويسة موجودة وتحتوي على قيمة محددة، يتم تخطي تنفيذ الوسيطة بالكامل، ويتم توجيه الطلب مباشرة إلى وجهته الأصلية عبر NextResponse.next().
تكمن الثغرة في أن هذا الفحص للترويسة يمكن استغلاله من قبل مستخدمين خارجيين. بإضافة ترويسة بالقيمة الصحيحة إلى طلب، يمكن للمهاجم تجاوز أي آليات حماية قائمة على الوسيطة تمامًا.
x-middleware-subrequestاستنساخ المستودع:
git clone <repository_url>
الانتقال إلى دليل المشروع:
cd nextjs-docker-app
بناء صورة Docker:
docker build -t nextjs-app .
تشغيل حاوية Docker:
docker run -p 3000:3000 nextjs-app
الوصول إلى التطبيق في المتصفح على http://localhost:3000.
تختلف طريقة الاستغلال قليلاً اعتمادًا على إصدار Next.js:
في هذه الإصدارات، كان يجب تسمية ملفات الوسيطة _middleware.ts ووضعها داخل مجلد pages. كانت قيمة middlewareInfo.name تتكون من اسم الدليل واسم الملف:
x-middleware-subrequest: pages/_middleware
بالنسبة للمسارات المتداخلة، قد يكون هناك عدة ملفات وسيطة على مستويات مختلفة، مما ينتج عنه عدة قيم محتملة للترويسة:
x-middleware-subrequest: pages/dashboard/_middleware
أو
x-middleware-subrequest: pages/dashboard/panel/_middleware
بدءًا من الإصدار 12.2، غيّرت Next.js اصطلاحات الوسيطة. يجب تسمية الملف middleware.ts (بدون الشرطة السفلية) ولا يجب أن يكون موجودًا في مجلد pages بعد الآن. بالنسبة لهذه الإصدارات، تكون الحمولة أبسط:
x-middleware-subrequest: middleware
بالإضافة إلى ذلك، تسمح Next.js ببنية مشروع بديلة مع دليل /src. في مثل هذه الحالات، ستكون الحمولة:
x-middleware-subrequest: src/middleware
بالنسبة للإصدارات 13.2.0 وما فوق، قدمت Next.js حدًا أقصى لعمق التكرار لتنفيذ الوسيطة. تم تنفيذ ذلك لمنع الحلقات اللانهائية ولكنه لا يؤثر على الثغرة. يظل الاستغلال كما هو، حيث يتم فحص الترويسة قبل أي فحوصات لعمق التكرار.
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
بدلاً من ذلك، للمشاريع التي تستخدم بنية دليل /src:
x-middleware-subrequest: src/middleware:src/middleware:src/middleware:sr
=======
# cve-2025-29927
>>>>>>> 56c7b2dcd548caf771750519107bf7c57749a864