
CVE-2025-29927 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो Next.js मिडलवेयर प्राधिकरण बायपास है। इसमें एक कमजोर टारगेट लैब और Python स्क्रिप्ट शामिल है, जो क्राफ्टेड x-middleware-subrequest हेडर भेजकर बायपास को सत्यापित करती है।
एक स्थानीय प्राधिकरण लैब (VMware: Ubuntu टारगेट मशीन + Kali अटैक मशीन) पर CVE-2025-29927 (Next.js Middleware Authorization Bypass) सत्यापित करने के लिए एक छोटा GitHub प्रोजेक्ट।
⚠️ अस्वीकरण: यह प्रोजेक्ट केवल सुरक्षा शिक्षा, CTF और आपके अपने/स्पष्ट रूप से अधिकृत लैब वातावरण के लिए है। किसी भी अनधिकृत सिस्टम पर उपयोग सख्त वर्जित है। इस प्रोजेक्ट के दुरुपयोग से होने वाले परिणामों की जिम्मेदारी उपयोगकर्ता की होगी।
| आइटम | विवरण |
|---|---|
| CVE | CVE-2025-29927 |
| सार्वजनिक तिथि | 2025-03-25 (Next.js आधिकारिक सुरक्षा बुलेटिन) |
| प्रभावित घटक | Vercel Next.js (Node.js फुल-स्टैक फ्रेमवर्क) |
| भेद्यता प्रकार | प्राधिकरण बायपास / Improper Authorization (CWE-863) |
| प्रभावित संस्करण | < 12.3.5、< 13.5.9、< 14.2.25、< 15.2.3 |
| सुधार संस्करण | 12.3.5 / 13.5.9 / 14.2.25 / 15.2.3 और उससे ऊपर |
| खतरा स्तर | Critical / उच्च जोखिम (विशिष्ट स्कोर NVD पेज देखें) |
भेद्यता सामने आने के बाद बड़ी संख्या में प्रोडक्शन एडमिन पैनल, पेमेंट कॉलबैक और आंतरिक पेज API बायपास हो गए। Metasploit और ProjectDiscovery Nuclei दोनों ने डिटेक्शन मॉड्यूल शामिल किए हैं, जो 2025 के सबसे प्रतिनिधि "फ्रेमवर्क-स्तरीय प्राधिकरण बायपास" भेद्यताओं में से एक है।
Next.js "प्रमाणीकरण लॉजिक" को middleware (मिडलवेयर) में लिखने की अनुमति देता है, उदाहरण के लिए:
export function middleware(request) {
if (!isLogin(request)) return NextResponse.redirect("/login"); // लॉगिन नहीं → रोकें
return NextResponse.next();
}
समस्या यह है कि Next.js आंतरिक रूप से एक क्लाइंट द्वारा जाली बनाए जा सकने वाले रिक्वेस्ट हेडर पर निर्भर करता है ताकि यह निर्धारित किया जा सके कि "क्या यह रिक्वेस्ट पहले ही मिडलवेयर निष्पादित कर चुका है":
x-middleware-subrequest: middleware
प्रभावित संस्करणों में, जब तक बाहरी रिक्वेस्ट इस आंतरिक हेडर को ले जाती है, Next.js गलती से मान लेता है कि मिडलवेयर पहले ही चल चुका है,
इसलिए पूरा प्रमाणीकरण मिडलवेयर स्किप हो जाता है। हमलावर को किसी खाते की आवश्यकता नहीं होती, बस इस हेडर के साथ
/admin जैसे संरक्षित रूट तक पहुंचने पर सीधे 200 मिलता है — जबकि पेज स्वयं आमतौर पर मिडलवेयर पर भरोसा करता है और दोबारा सत्यापन नहीं करता,
इस प्रकार प्राधिकरण जांच विफल हो जाती है (ट्रस्ट बाउंड्री त्रुटि)।
💡 सार्वजनिक शोषण में सबसे सामान्य मान मिडलवेयर पथ को बार-बार जोड़ने का रूप है, उदाहरण के लिए
middleware:middleware:middleware:middleware:middleware; एकलmiddlewareकुछ संस्करणों/निर्देशिका संरचनाओं में काम नहीं करता (इस लैब में 14.2.24 पर परीक्षण किया गया)। यह PoC कई उम्मीदवार मानों को पोल करेगा, किसी एक के हिट होने पर बायपास सफल होगा।
CVE-2025-29927-PoC/
├── README.md # यह दस्तावेज़ (भेद्यता विवरण + VMware लैब ट्यूटोरियल)
├── LICENSE # MIT
├── .gitignore
├── exploit.py # ★ Python3 शुद्ध मानक लाइब्रेरी सत्यापन PoC (Kali/किसी भी मशीन पर चलाएं)
├── target/ # ★ स्व-निर्मित भेद्यता लैब (Ubuntu टारगेट मशीन पर कॉपी करें)
│ ├── package.json # [email protected] लॉक (प्रभावित संस्करण)
│ ├── middleware.js # वास्तविक प्रोडक्शन "प्रमाणीकरण मिडलवेयर" का अनुकरण
│ ├── pages/
│ │ ├── index.js # होम पेज
│ │ ├── login.js # लॉगिन पेज (प्रदर्शन के लिए यहां रीडायरेक्ट होता है)
│ │ └── admin.js # ★ संरक्षित एडमिन पैनल, सर्वर-साइड flag.txt पढ़ता है
│ ├── flag.txt # लैब फ्लैग: FLAG{...}
│ ├── setup.sh # टारगेट मशीन पर एक-क्लिक Node 20 + npm install + build
│ └── start.sh # प्रोडक्शन मोड में 0.0.0.0:3000 पर सुनें
└── tests/
└── mock_target.py # Node-मुक्त सिम्युलेटेड टारगेट (केवल डेवलपमेंट स्व-परीक्षण के लिए)
┌───────────────────────────────────────────────────────────┐
│ VMware Workstation Pro 17 (होस्ट: Windows) │
│ नेटवर्क: NAT (डिफ़ॉल्ट VMnet8), दोनों VM एक ही सबनेट, पिंग कर सकते हैं │
│ │
│ ┌──────────────────┐ ┌─────────────────────┐ │
│ │ टारगेट Ubuntu 24.04 │ │ अटैक Kali Linux │ │
│ │ │ http │ │ │
│ │ Node 20 + Next │◄───────│ python3 exploit.py │ │
│ │ 14.2.24 :3000 │ GET │ │ │
│ └──────────────────┘ └─────────────────────┘ │
│ IP: <TARGET_IP> IP: <ATTACKER_IP> │
└───────────────────────────────────────────────────────────┘
| उद्देश्य | इमेज/सॉफ्टवेयर | अनुशंसित संस्करण |
|---|---|---|
| वर्चुअल मशीन सॉफ्टवेयर | VMware Workstation Pro 17 (व्यक्तिगत उपयोग के लिए निःशुल्क) | 17.x |
| टारगेट मशीन इमेज | Ubuntu Server LTS ISO | 24.04.x |
| अटैक मशीन | Kali Linux (आधिकारिक VMware प्रीसेट इमेज या ISO इंस्टॉल) | 2025.x |
| (वैकल्पिक) | होस्ट मशीन पर 8 GB से अधिक RAM, 50 GB से अधिक डिस्क | — |
निम्नलिखित चरण सभी Ubuntu टारगेट मशीन पर निष्पादित करें।
# तरीका A: प्रोजेक्ट को अपने GitHub पर पुश करके clone करें (अनुशंसित, GitHub पर पुश करना हो तो यही उपयोग करें)
git clone https://github.com/<आपका उपयोगकर्ता नाम>/CVE-2025-29927-PoC.git
cd CVE-2025-29927-PoC
# तरीका B: होस्ट से scp करें
# scp -r CVE-2025-29927-PoC ubuntu@<TARGET_IP>:~/
cd CVE-2025-29927-PoC/target
sudo bash setup.sh # Node 20(LTS) + npm install + next build इंस्टॉल करें
setup.sh आंतरिक रूप से करता है: apt अपडेट → curl/CA/build टूल इंस्टॉल → NodeSource से
Node.js 20 LTS इंस्टॉल → npm install ([email protected] आदि निर्भरताएं लाएं) → npm run build।
bash start.sh
# "▲ Next.js 14.2.24" और "Local: http://0.0.0.0:3000" दिखे तो सफल
एक और टर्मिनल खोलकर पहले स्थानीय स्मोक टेस्ट करें:
curl -s http://127.0.0.1:3000 # होम पेज, 200
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3000/admin
# अपेक्षित आउटपुट 307 —— बिना कुकी के middleware द्वारा रोका गया (प्रमाणीकरण सामान्य रूप से काम कर रहा है)
curl -s http://127.0.0.1:3000/admin # body देखें, रीडायरेक्ट के बाद लॉगिन पेज की सामग्री होनी चाहिए
टारगेट मशीन फ़ायरवॉल डिफ़ॉल्ट रूप से इनबाउंड को नहीं रोकता; यदि आपने ufw चालू किया है:
sudo ufw allow 3000/tcp।