Docker-आधारित लैब जो CVE-2026-29057 Next.js request smuggling को पुनरुत्पादित करती है, जिसमें raw chunked HTTP payload के साथ vulnerable 15.5.12 की तुलना patched 15.5.13 से की जाती है।
यह रिपॉज़िटरी CVE-2026-29057 के लिए एक केंद्रित प्रस्तुति लैब है। यह एक कमज़ोर Next.js टारगेट (15.5.12) की तुलना पैच किए गए रिलीज़ (15.5.13) से करती है, समान टोपोलॉजी और रॉ HTTP पेलोड का उपयोग करते हुए।
इसका उपयोग केवल एक पृथक लैब में करें। रिक्वेस्ट-डिसिंक्रोनाइज़ेशन प्रोब्स वास्तविक वातावरणों में साझा कनेक्शनों को बाधित कर सकते हैं।
यह रिपॉज़िटरी Nayaka Ghana Subrata की मूल Next.js Proof of Concept रिपॉज़िटरी से अनुकूलित है। मूलभूत प्रूफ-ऑफ-कॉन्सेप्ट कार्य के लिए पूरा श्रेय मूल लेखक को जाता है।
मैंने उस कार्य को पुनर्गठित और संशोधित किया है ताकि यह विशेष रूप से 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 को रिक्वेस्ट लॉग के रूप में नामित करता है। यह स्वयं फ़्लैग को प्रकट नहीं करता है।मैनिफ़ेस्ट लैब कथा के लिए एक जानबूझकर सूचना-प्रकटीकरण कमज़ोरी है। यह CVE-2026-29057 से अलग है; CVE वह रिक्वेस्ट-फ़्रेमिंग बायपास प्रदान करता है जो प्रकट किए गए बैकएंड रूट तक पहुँचता है।
रूट नाम लैब फ़िक्स्चर हैं, किसी वास्तविक शिकार से पुनर्प्राप्त पथ नहीं। 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