
CVE-2025-55182 / CVE-2025-66478 के लिए Async RCE स्कैनर — prototype-pollution → React Server Actions के माध्यम से कोड निष्पादन
प्रोटोटाइप-प्रदूषण → React सर्वर क्रियाओं के माध्यम से रिमोट कोड निष्पादन
एसिंक्रोनस, संस्करण-प्रथम, आउटपुट-आधारित कैनरी पहचान - कोई अंधा अनुमान नहीं
[!WARNING] केवल अधिकृत सुरक्षा अनुसंधान और प्रवेश परीक्षण के लिए। स्पष्ट लिखित अनुमति के बिना सिस्टम को स्कैन करना अवैध है। लेखक इस उपकरण के दुरुपयोग के लिए कोई जिम्मेदारी नहीं लेता है।
React सर्वर क्रियाएं क्रिया डेटा को मल्टीपार्ट फॉर्म डेटा के रूप में सीधे सर्वर-साइड निष्पादन संदर्भ में भेजती हैं। react-server-dom-webpack के प्रभावित संस्करणों में अपर्याप्त प्रोटोटाइप-प्रदूषण स्वच्छता के कारण, एक हमलावर निम्न कार्य कर सकता है:
Object.prototype को प्रदूषित करता है_response._prefix को ओवरराइड करेंprocess.mainModule.require('child_process').execSync(cmd)
यह React के प्रभावित संस्करण के साथ React सर्वर क्रियाओं का उपयोग करने वाले किसी भी सार्वजनिक रूप से सुलभ Next.js एप्लिकेशन पर अप्रमाणित रिमोट कोड निष्पादन देता है।
CVE-2025-55182 - व्यापक: React 19 पैकेज (react-server-dom-webpack, react-server-dom-parcel, react-server-dom-turbopack) को प्रभावित करता है
CVE-2025-66478 - कठोर: / सर्वर क्रिया एंडपॉइंट के माध्यम से Next.js-विशिष्ट शोषण पथ
| घटक | असुरक्षित | पैच किया गया |
|---|---|---|
React react-server-dom-* | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1+ |
| Next.js 16.x | 16.0.0 – 16.0.6 | 16.0.7+ |
| Next.js 15.x | 15.0.0-15.0.4, 15.1.0-15.1.8, 15.2.0-15.2.5, 15.3.0-15.3.5, 15.4.0-15.4.7, 15.5.0-15.5.6 | 15.0.5+, 15.1.9+, 15.2.6+, 15.3.6+, 15.4.8+, 15.5.7+ |
| Next.js 14.x | 14.3.0-canary.77+ केवल कैनरी बिल्ड | सभी स्थिर 14.x - प्रभावित नहीं |
| Next.js 13.x | - | प्रभावित नहीं |
यह स्कैनर आउटपुट-आधारित कैनरी सत्यापन का उपयोग करता है - शून्य गलत सकारात्मकता के साथ वास्तविक कोड निष्पादन की पुष्टि करने का सबसे विश्वसनीय तरीका:
1. Next-Action हेडर + मल्टीपार्ट प्रोटोटाइप-प्रदूषण पेलोड के साथ POST /
2. पेलोड निष्पादित होता है: echo <random_canary>
3. असुरक्षित सर्वर URL में base64(कैनरी) के साथ NEXT_REDIRECT फेंकता है
4. प्रतिक्रिया हेडर: X-Action-Redirect: /login?a=<base64(canary)>
5. स्कैनर base64 डीकोड करता है → कैनरी से मेल खाता है → RCE पुष्टि ✓
allow_redirects=False महत्वपूर्ण है - पुष्टि हेडर में होती है, रीडायरेक्ट गंतव्य में नहीं।
git clone https://github.com/InferiorAK/React2Shell
cd React2Shell
pip install -r requirements.txt
# Required only if using --browser mode for improved version detection:
playwright install chromium
playwright install-deps chromium
आवश्यकताएँ: Python 3.10+
# Single target
python3 CVE-2025-55182_scanner.py -u https://target.com
# Scan a list of URLs
python3 CVE-2025-55182_scanner.py -f urls.txt
# Quiet mode - only print RCE / Vulnerable results
python3 CVE-2025-55182_scanner.py -f urls.txt -q
# Browser mode - headless Chromium for accurate version detection
python3 CVE-2025-55182_scanner.py -f urls.txt -b
# Full options - recommended for large-scale scanning
python3 CVE-2025-55182_scanner.py -f urls.txt -b -q -c 3 -t 20
| ध्वज | लंबा रूप | डिफ़ॉल्ट | विवरण |
|---|---|---|---|
-u | --url | - | एकल लक्ष्य URL |
-f | --file | - | फ़ाइल जिसमें प्रति पंक्ति एक URL हो |
-o | --output | outputs/vuln.txt | असुरक्षित लक्ष्यों के लिए आउटपुट फ़ाइल |
-U | --unknown-output | outputs/unknown.txt | अज्ञात-संस्करण लक्ष्यों के लिए आउटपुट फ़ाइल |
-c | --concurrency | 5 | समवर्ती HTTP कनेक्शन |
-t | --timeout | 15 | प्रति-अनुरोध टाइमआउट (सेकंड) |
-q | --quiet | बंद | केवल RCE / VULNERABLE पंक्तियाँ प्रिंट करें |
-b | --browser | बंद | Playwright हेडलेस Chromium संस्करण-पहचान फ़ॉलबैक |
प्रत्येक स्कैन किए गए लक्ष्य को निम्नलिखित में से एक निर्णय दिया जाता है:
| निर्णय | रंग | अर्थ |
|---|---|---|
RCE | 🔴 लाल | X-Action-Redirect में कैनरी पुष्टि - सिद्ध रिमोट कोड निष्पादन |
VULNERABLE | 🟠 नारंगी | संस्करण असुरक्षित श्रेणी में है; RCE पेलोड वापस प्रतिध्वनित नहीं हुआ (WAF / पैच कॉन्फ़िग / गलत एंडपॉइंट) |
Unknown | 🟡 पीला | Next.js पुष्टि लेकिन संस्करण का पता नहीं चल सका - फिर भी RCE का प्रयास किया गया; ब्राउज़र-मोड पुनः प्रयास के लिए outputs/unknown.txt में सहेजा गया |
Not Vulnerable | 🟢 हरा | संस्करण पैच किए गए के रूप में पुष्टि, या RCE ने स्पष्ट रूप से सुरक्षित लौटाया |
Skipped | ⚪ सफेद | पुष्टि-पैच संस्करण या गैर-Next.js साइट - कोई PoC प्रयास नहीं किया गया |
Error | ⚪ सफेद | होस्ट अप्राप्य या कनेक्शन विफल |
आउटपुट फ़ाइलें (outputs/ फ़ोल्डर में सहेजी गईं, स्वचालित रूप से बनाई गईं):
outputs/vuln.txt — RCE और VULNERABLE परिणाम (प्रत्येक रन पर जोड़े जाते हैं)outputs/unknown.txt — Unknown-संस्करण लक्ष्य; सटीक संस्करण पहचान के लिए इन्हें -b के साथ पुनः प्रयास करें90%+ साइटों के लिए संस्करण
unknownक्यों दिखता है?
आधुनिक Next.js 13+ जो App Router आर्किटेक्चर का उपयोग करता है, वह फ्रेमवर्क संस्करण को स्थिर HTML में कभी एम्बेड नहीं करता। संस्करण केवल window.next.version में JavaScript के निष्पादित होने के बाद वास्तविक ब्राउज़र संदर्भ में मौजूद होता है।
Without --browser:
__NEXT_DATA__, इनलाइन स्क्रिप्ट्स, और हैशेड चंक फ़ाइलों पर निर्भर करती हैunknown लौटाती हैं - संस्करण-आधारित फ़िल्टरिंग को दरकिनार कर दिया जाता हैWith --browser (-b):
window.next.version को सीधे लाइव DOM से पढ़ता है# Recommended with browser mode - reduce concurrency (browser pages are resource-heavy)
python3 CVE-2025-55182_scanner.py -f urls.txt -b -c 3
स्कैनर 7 चरणों तक चलता है, जैसे ही संस्करण मिलता है रुक जाता है:
Stage 1 │ HTTP प्रतिक्रिया हेडर
│ X-Powered-By: Next.js X.Y.Z
│ x-nextjs-*, x-next-version