
यह एक CVE-2025-29927 स्कैनर है।
यह एक पेशेवर-ग्रेड स्कैनर है जिसे Next.js अनुप्रयोगों में CVE-2025-29927 मिडलवेयर बाईपास भेद्यता का पता लगाने के लिए डिज़ाइन किया गया है।
X-Middleware-Subrequest हेडर के साथ आंतरिक पथों का परीक्षण करता हैpip install -r requirements.txt playwright install
### स्कैनर चलाएँ```bash
python main.py --domain https://example.com --threads 10 --timeout 10 --save
python main.py --help
| विकल्प | विवरण |
|----------------|------------------------------------------------|
| `--domain` | लक्ष्य साइट का आधार URL (आवश्यक) |
| `--user-agent` | कस्टम उपयोगकर्ता-एजेंट (डिफ़ॉल्ट: Chrome स्ट्रिंग) |
| `--timeout` | अनुरोध टाइमआउट (डिफ़ॉल्ट: 10 सेकंड) |
| `--proxy` | प्रॉक्सी पता (वैकल्पिक) |
| `--save` | परिणाम `results.txt` में सहेजें |
| `--threads` | थ्रेड्स की संख्या (डिफ़ॉल्ट: 10) |
| `--wordlist` | Worlist में सामान्य पथ शामिल करें |
---
## 🐳 Docker उपयोग
### Docker इमेज बनाएं```bash
docker build -t cve-scanner .
docker run -it --rm cve-scanner --domain https://example.com --save
---
## ⚙️ GitHub Actions
इस प्रोजेक्ट में एक GitHub Actions वर्कफ़्लो शामिल है जो push पर सेटअप का परीक्षण करता है। यह:
- निर्भरताएँ स्थापित करता है
- Playwright ब्राउज़र स्थापित करता है
- `--help` जाँच चलाता है
देखें `.github/workflows/python.yml`।
---
## 🧱 संरचना```
.
├── main.py # Entry point
├── config.py # CLI parser
├── crawler.py # Playwright crawler
├── scanner.py # Multi-threaded vulnerability testing
├── requirements.txt
├── Dockerfile
└── .github/workflows
CVE-2025-29927 भेद्यता का अवलोकन
CVE-2025-29927 एक गंभीर Next.js सुरक्षा दोष है जो हमलावरों को मिडलवेयर-आधारित प्रमाणीकरण और प्राधिकरण को बायपास करने की अनुमति देता है। HTTP अनुरोधों में एक विशेष आंतरिक हेडर (X-Middleware-Subrequest) शामिल करके, एक हमलावर Next.js सर्वर को मिडलवेयर निष्पादन को छोड़ने के लिए धोखा दे सकता है, जिससे संरक्षित रूट्स तक पहुंच प्राप्त होती है। व्यवहार में, एक अनुरोध जो सामान्यतः प्रमाणीकरण मिडलवेयर द्वारा ब्लॉक कर दिया जाएगा (जैसे 401/403 लौटाना या लॉगिन पर रीडायरेक्ट करना) यदि यह हेडर मौजूद है तो सामान्य रूप से संसाधित हो जाता है, जिससे सुरक्षा जांचें प्रभावी रूप से बायपास हो जाती हैं। यह भेद्यता Next.js संस्करण 11.1.4 से 15.2.2 को प्रभावित करती है, और प्रशासकों से अनुरोध है कि वे अपने अनुप्रयोगों की सुरक्षा के लिए पैच लगाएं या शमन लागू करें (जैसे कि प्रॉक्सी पर इस हेडर को हटाना)।
किसी वेब एप्लिकेशन में इस भेद्यता का पता लगाने के लिए आंतरिक एंडपॉइंट्स की खोज करना और यह देखने के लिए दुर्भावनापूर्ण हेडर के साथ उनका परीक्षण करना आवश्यक है कि क्या अनधिकृत पहुंच संभव है। नीचे एक डिज़ाइन योजना दी गई है जो एक उन्नत Python स्क्रिप्ट के लिए है जो किसी लक्ष्य वेबसाइट को क्रॉल करेगी (पूर्ण JavaScript समर्थन के साथ) और CVE-2025-29927 के लिए स्कैन करेगी, सभी निर्दिष्ट आवश्यकताओं को पूरा करते हुए।
JavaScript-रेंडर की गई सामग्री सहित गहन क्रॉलिंग की आवश्यकता को पूरा करने के लिए, हम Playwright का उपयोग करेंगे (Selenium की तुलना में इसकी गति और आधुनिक API के लिए पसंदीदा)। Playwright एक शक्तिशाली हेडलेस ब्राउज़र ऑटोमेशन लाइब्रेरी है जो डायनामिक वेब ऐप और आधुनिक JS फ्रेमवर्क को संभाल सकती है। Selenium की तुलना में, Playwright अधिक आधुनिक API (Chrome DevTools प्रोटोकॉल पर निर्मित) प्रदान करता है और सिंक्रोनस और एसिंक्रोनस दोनों ऑपरेशन का समर्थन करता है, जो हमारे उपयोग के मामले के लिए बेहतर प्रदर्शन दे सकता है। मुख्य लाइब्रेरीज़ और उनके इंस्टॉलेशन निर्देशों में शामिल हैं:
playwright – हेडलेस ब्राउज़र ऑटोमेशन के लिए (SPAs या JS की आवश्यकता वाले पेज लोड करने के लिए) (इंस्टॉल: pip install playwright और ब्राउज़र बाइनरी प्राप्त करने के लिए playwright install चलाएं)।
requests या httpx – स्कैनिंग चरण के दौरान HTTP अनुरोध भेजने के लिए। हम सादगी के लिए requests या async समर्थन के लिए httpx/aiohttp का उपयोग कर सकते हैं (इंस्टॉल: pip install requests या pip install httpx)।
bs4 (BeautifulSoup) – HTML पार्स करने और आवश्यकतानुसार लिंक निकालने के लिए। Playwright सीधे DOM से क्वेरी कर सकता है, लेकिन पेज की HTML सामग्री पर BeautifulSoup का उपयोग करना एंकर टैग खोजने के लिए सीधा है (इंस्टॉल: pip install beautifulsoup4)।
concurrent.futures (बिल्ट-इन) या asyncio – समवर्तीता लागू करने के लिए। मल्टी-थ्रेडिंग के लिए, Python के concurrent.futures.ThreadPoolExecutor का उपयोग किया जाएगा (कोई अतिरिक्त इंस्टॉल नहीं)। यदि async दृष्टिकोण का उपयोग किया जाता है, तो Python के asyncio को httpx के साथ समानांतर अनुरोधों के लिए इस्तेमाल किया जा सकता है।
(वैकल्पिक) argparse – कमांड-लाइन तर्कों को पार्स करने के लिए यदि हम इंटरैक्टिव मेनू के बजाय CLI इंटरफ़ेस चाहते हैं (बिल्ट-इन मॉड्यूल)।
(वैकल्पिक) rich या colorama – पठनीयता बढ़ाने के लिए रंगीन या स्वरूपित कंसोल आउटपुट के लिए (इंस्टॉल: pip install rich या pip install colorama)।
औचित्य: Playwright को डायनामिक सामग्री को बिना अत्यधिक जटिलता के स्क्रैप करने की क्षमता के लिए चुना गया है। “Playwright का उपयोग करके हम हेडलेस ब्राउज़रों को स्वचालित कर सकते हैं... वेब पर इंसानों की तरह नेविगेट करने के लिए, जो इसे डायनामिक JavaScript-संचालित वेबसाइटों को स्क्रैप करने के लिए बहुत अच्छा बनाता है”। यह सुनिश्चित करता है कि हमारा क्रॉलर उन लिंक्स या UI तत्वों को देख सके जो स्क्रिप्ट द्वारा उत्पन्न होते हैं (जिन्हें एक साधारण requests-आधारित क्रॉलर मिस करेगा)।
क्रॉलर मॉड्यूल लक्ष्य साइट की गहन क्रॉलिंग करने के लिए Playwright को हेडलेस मोड में उपयोग करेगा। उद्देश्य परीक्षण के लिए आंतरिक पथों (एंडपॉइंट्स) की खोज करना है, जिसमें केवल JS निष्पादन के बाद प्रकट होने वाले भी शामिल हैं। क्रॉलर के लिए मुख्य डिज़ाइन बिंदु:
हेडलेस ब्राउज़र नेविगेशन: Playwright के माध्यम से एक ब्राउज़र उदाहरण (जैसे Chromium) को हेडलेस मोड में लॉन्च करें। उपयोगकर्ता द्वारा निर्दिष्ट कस्टम User-Agent के साथ एक ब्राउज़र कॉन्टेक्स्ट का उपयोग करें (अगले भाग में इस पर और अधिक)। उदाहरण के लिए, हम browser.new_context(user_agent=<user_agent_string>) के साथ चुने गए User-Agent का अनुकरण करने के लिए एक कॉन्टेक्स्ट बना सकते हैं। यदि कोई प्रॉक्सी कॉन्फ़िगर की गई है, तो इसे लॉन्च के समय लागू करें (Playwright ब्राउज़र या कॉन्टेक्स्ट लॉन्च करते समय प्रॉक्सी सर्वर सेट करने की अनुमति देता है)।
पुनरावर्ती क्रॉलिंग रणनीति: दिए गए आधार URL (सीड) से शुरू करें। पेज लोड करने के लिए page.goto(base_url, timeout=<T>) का उपयोग करें (टाइमआउट कॉन्फ़िगरेबल)। नेटवर्क के निष्क्रिय होने या आवश्यकतानुसार डायनामिक सामग्री को लोड होने देने के लिए एक छोटी देरी की प्रतीक्षा करें। फिर लिंक निकालें। हम लिंक को निम्नलिखित तरीकों से निकाल सकते हैं:
links = page.evaluate("Array.from(document.querySelectorAll('a[href]'), a => a.href)"), या<a href> विशेषताओं को खोजने के लिए BeautifulSoup का उपयोग करना।