مختبر قائم على Docker يعيد إنتاج تهريب الطلبات CVE-2026-29057 في Next.js، ويقارن الإصدار المصاب 15.5.12 مع الإصدار المُرقَّع 15.5.13 باستخدام حمولة HTTP مجزأة خام.
هذا المستودع هو مختبر عرض تقديمي مُركّز على CVE-2026-29057. وهو يقارن هدف Next.js المُعرّض للثغرة (15.5.12) مع الإصدار المُرقّع (15.5.13) باستخدام نفس البنية ونفس حِمل HTTP الخام.
استخدمه فقط في مختبر معزول. يمكن لفحوصات إلغاء تزامن الطلبات أن تُعطّل الاتصالات المشتركة في البيئات الحقيقية.
هذا المستودع مُقتبس من مستودع إثبات المفهوم الأصلي لـ Next.js من Nayaka Ghana Subrata. يعود الفضل الكامل للمؤلف الأصلي على العمل التأسيسي لإثبات المفهوم.
لقد أعدت تنظيم ذلك العمل وتعديله ليركّز تحديدًا على CVE-2026-29057، بما في ذلك مواد العرض التقديمي، والعرض التوضيحي الموجّه، وسيناريو المختبر، والتعليقات التوضيحية، والمقارنة بين النسخة المُعرّضة والنسخة المُرقّعة. هذا المستودع هو اقتباس تعليمي ولا ينبغي الخلط بينه وبين مستودع المؤلف الأصلي.
DELETE /api/workspace/tasks/1042.GET /secret.Transfer-Encoding ويضيف Content-Length: 0، بينما لا تزال بايتات الجسم تُمرَّر.| الهدف | Next.js | طلبات الواجهة الخلفية |
|---|---|---|
| مُعرّض للثغرة | 15.5.12 | DELETE /api/workspace/tasks/1042، ثم GET /secret |
| مُرقّع | 15.5.13 | DELETE /api/workspace/tasks/1042 فقط |
.
├── docker-compose.yml
├── DEMO-RUNBOOK.md
├── PRESENTATION-SCRIPT.md
├── PRESENTATION-QA.md
├── pocs/cve-2026-29057/
│ ├── app/
│ ├── support/server.js
│ ├── next.config.js
│ └── Dockerfile
└── scripts/run-cve-2026-29057.mjs
المتطلبات: Docker Compose و Node.js 18 أو أحدث.
docker compose up --build cve-2026-29057-vuln cve-2026-29057-fixed
node scripts/run-cve-2026-29057.mjs http://localhost:3105
node scripts/run-cve-2026-29057.mjs http://localhost:3106
الدليل المتوقع من النسخة المُعرّضة للثغرة:
[after] {"backendRequests":["DELETE /api/workspace/tasks/1042","GET /secret"],"flag":"FLAG{one_stream_two_requests}"}
PoC result: vulnerable behavior reproduced.
Flag: FLAG{one_stream_two_requests}
الدليل المتوقع من النسخة المُرقّعة:
[after] {"backendRequests":["DELETE /api/workspace/tasks/1042"],"flag":null}
PoC result: smuggled request was not observed. This usually means the target is patched.
الدليل ذو المعنى هو الدليل التفاضلي: تبقى البنية والحِمل دون تغيير؛ فقط إصدار Next.js هو ما يختلف.
لا يتطلب المختبر من المُقدِّم أن يتظاهر بأن المهاجم يعرف كلا المسارين بطريقة سحرية:
DELETE /api/workspace/tasks/1042، لذا يأتي مسار الناقل مباشرةً من حركة التطبيق الطبيعية./robots.txt. يُشير إلى الملف /ops/release-manifest المنشور عن طريق الخطأ./api/workspace/ كبادئة الخدمة العامة، ويُسرّب /secret كمسار داخلي، ويُسمّي /api/state كسجل الطلبات. لا يكشف عن العلامة (flag) نفسها.الملف هو ضعف إفصاح عن المعلومات متعمّد لأجل سردية المختبر. وهو منفصل عن CVE-2026-29057؛ إذ تُوفّر الثغرة تجاوز تأطير الطلبات الذي يصل إلى مسار الواجهة الخلفية المُفصح عنه.
أسماء المسارات هي عناصر ثابتة في المختبر، وليست مسارات مُستعادة من ضحية حقيقية. أضاف التصحيح الرسمي من Vercel اختبار انحدار يُعرّف /rewrites/:path*، ويستخدم /rewrites/poc كناقل، ويُنشئ /secret على الواجهة الخلفية للاختبار. يمنح هذا المختبر الناقل اسمًا بشكل منتج مع الحفاظ على بنية ذلك الاختبار.
docker-compose.yml — النسخ المُعرّضة للثغرة مقابل المُرقّعة.pocs/cve-2026-29057/next.config.js — حدود إعادة الكتابة الخارجية.pocs/cve-2026-29057/support/server.js — محلّلات الوسيط والواجهة الخلفية.scripts/run-cve-2026-29057.mjs — الحِمل الخام المُجزّأ ومدقّق النتائج.pocs/cve-2026-29057/app/api/ — نقاط نهاية إعادة تعيين الأدلة والقراءة.docker compose down