
CVE-2025-55182 और CVE-2025-66478 के लिए React Server Components में RCE एक्सप्लॉइट टूलकिट। इसमें कई एक्सप्लॉइट वेरिएंट, डिटेक्शन स्क्रिप्ट, एक कमजोर टेस्ट सर्वर, और Flight प्रोटोकॉल डिसीरियलाइज़ेशन भेद्यता का गहन तकनीकी विश्लेषण शामिल है।
CVE-2025-55182 (React) और CVE-2025-66478 (Next.js)
इस रिपॉजिटरी में केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए एक्सप्लॉइट कोड है।
यह भी देखें: कई शोधकर्ताओं ने इस भेद्यता के विश्लेषण प्रकाशित किए हैं। अतिरिक्त दृष्टिकोण, एक्सप्लॉइट तकनीकों और पहचान विधियों के लिए संदर्भ अनुभाग देखें।
बुधवार, 3 दिसंबर 2025 को, React Server Components में एक गंभीर रिमोट कोड निष्पादन (Remote Code Execution) भेद्यता सार्वजनिक रूप से उजागर की गई। "React2Shell" नामक यह बग, एक बिना प्रमाणीकरण वाले हमलावर को केवल एक HTTP अनुरोध भेजकर React RSC या Next.js App Router के भेद्य संस्करण चलाने वाले किसी भी सर्वर पर मनमाना कोड निष्पादित करने की अनुमति देता है।
Next.js इतना सर्वव्यापी हो गया है - यह आधुनिक वेब के एक महत्वपूर्ण हिस्से को शक्ति देता है - इसलिए इस भेद्यता का प्रभाव गंभीर है। RSC सक्षम के साथ App Router (Next.js 13 के बाद से नई परियोजनाओं के लिए डिफ़ॉल्ट) का उपयोग करने वाला कोई भी Next.js एप्लिकेशन भेद्य है। कोई विशेष कॉन्फ़िगरेशन नहीं। कोई विशिष्ट एंडपॉइंट नहीं। बस किसी भी रूट पर एक POST अनुरोध।
भेद्यता React के "Flight" प्रोटोकॉल में रहती है, जो React Server Components में सर्वर और क्लाइंट के बीच डेटा पास करने के लिए उपयोग किया जाने वाला सीरियलाइज़ेशन प्रारूप है। डिसीरियलाइज़ेशन के दौरान hasOwnProperty जाँच की कमी प्रोटोटाइप श्रृंखला ट्रैवर्सल की अनुमति देती है, अंततः JavaScript Function कंस्ट्रक्टर तक पहुँचकर हमलावर-नियंत्रित कोड निष्पादित करती है।
यह दोष React के react-server-dom-webpack, react-server-dom-turbopack और react-server-dom-parcel पैकेजों में मौजूद है। Next.js, प्रमुख RSC उपभोक्ता के रूप में, अपने App Router के माध्यम से भेद्यता प्राप्त करता है।
कई सेवाएँ संभावित रूप से भेद्य हैं। Next.js सबसे लोकप्रिय React फ्रेमवर्क में से एक है, जिसका उपयोग सभी आकारों की कंपनियाँ करती हैं - स्टार्टअप से लेकर एंटरप्राइज़ तक। React Server Components के साथ App Router संस्करण 13 के बाद से नई Next.js परियोजनाओं के लिए डिफ़ॉल्ट आर्किटेक्चर रहा है, जिसका अर्थ है कि अधिकांश आधुनिक Next.js डिप्लॉयमेंट प्रभावित हैं।
निम्न का उपयोग करने वाला कोई भी एप्लिकेशन:
react-server-dom-* पैकेजों के साथ (19.0.0 - 19.2.0)इसमें Vercel, AWS, सेल्फ-होस्टेड इन्फ्रास्ट्रक्चर और किसी भी अन्य स्थान पर चलने वाले प्रोडक्शन डिप्लॉयमेंट शामिल हैं जहाँ Next.js App Router एप्लिकेशन चलते हैं।
प्रभावित नहीं:
process.mainModule उपलब्ध नहीं)| पैकेज | भेद्य | पैच किया गया |
|---|---|---|
react-server-dom-webpack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1+ |
react-server-dom-turbopack | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1+ |
react-server-dom-parcel | 19.0.0, 19.1.0, 19.1.1, 19.2.0 | 19.0.1, 19.1.2, 19.2.1+ |
| संस्करण लाइन | भेद्य | पैच किया गया |
|---|---|---|
| 15.0.x | < 15.0.5 | 15.0.5+ |
| 15.1.x | < 15.1.9 | 15.1.9+ |
| 15.2.x | < 15.2.6 | 15.2.6+ |
| 15.3.x | < 15.3.6 | 15.3.6+ |
| 15.4.x | < 15.4.8 | 15.4.8+ |
| 15.5.x | < 15.5.7 | 15.5.7+ |
| 16.0.x | < 16.0.7 | 16.0.7+ |
तुरंत अपग्रेड करें। कोई वर्कअराउंड नहीं हैं।
Next.js एप्लिकेशनों के लिए:
npm install next@latest
# or
pnpm update next
सीधे React RSC उपयोग के लिए:
npm install react-server-dom-webpack@latest
अपने इंस्टॉल किए गए संस्करणों को सत्यापित करें:
npm ls next react-server-dom-webpack react-server-dom-turbopack
इस भेद्यता के लिए कई हमला वेक्टर खोजे गए हैं। सबसे सामान्य - और जो बिना किसी पूर्वापेक्षा के काम करता है - React के Flight प्रोटोकॉल संदर्भ प्रणाली के माध्यम से प्रोटोटाइप पॉल्यूशन का उपयोग करता है।
एक्सप्लॉइट Next-Action हेडर के साथ एक क्राफ्टेड मल्टीपार्ट POST अनुरोध भेजता है। पेलोड संदर्भ प्रणाली का दुरुपयोग करता है:
$1:__proto__:then के माध्यम से प्रोटोटाइप श्रृंखला को ट्रैवर्स करेंFunction कंस्ट्रक्टर को कॉल करने के लिए धोखा देंPOST / HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----Boundary
Next-Action: x
------Boundary
Content-Disposition: form-data; name="0"
{"then":"$1:__proto__:then","status":"resolved_model","value":"{...}","_response":{...}}
------Boundary
Content-Disposition: form-data; name="1"
"$@0"
------Boundary--
कोड डिसीरियलाइज़ेशन के दौरान, किसी भी एक्शन ID सत्यापन से पहले निष्पादित होता है। इसका मतलब है कि कोई भी Next-Action हेडर मान भेद्य कोड पथ को ट्रिगर करता है - कोई मान्य एक्शन ID आवश्यक नहीं है।
अन्य हमला वेक्टर मौजूद हैं, जिनमें
$Fफ़ंक्शन संदर्भ और प्रत्यक्ष मॉड्यूल गैजेट शामिल हैं। इन्हें आमतौर पर एक मान्य एक्शन ID की आवश्यकता होती है। विवरण के लिए वैकल्पिक हमला वेक्टर देखें।
React का Flight प्रोटोकॉल $1:path:to:value जैसे संदर्भों को कोलन पर विभाजित करके और ऑब्जेक्ट को ट्रैवर्स करके हल करता है:
// ReactFlightReplyServer.js - getOutlinedModel()
for (let i = 1; i < path.length; i++) {
value = value[path[i]]; // No hasOwnProperty check!
}
विडंबना: इसी फ़ाइल के शीर्ष पर, पंक्ति 35:
import hasOwnProperty from 'shared/hasOwnProperty';गार्ड आयात किया गया था। यह उपलब्ध था। बस उस एक लूप में इसका उपयोग नहीं किया गया जहाँ इसकी सबसे अधिक आवश्यकता थी।
यह एकल लापता जाँच $1:__proto__:then को एक चंक ऑब्जेक्ट से, प्रोटोटाइप श्रृंखला के ऊपर, Chunk.prototype.then तक - एक फ़ंक्शन जो Promise-जैसी ऑब्जेक्ट्स को संसाधित करता है - ट्रैवर्स करने की अनुमति देती है। सही गुणों के साथ एक नकली चंक बनाकर, हम नियंत्रित करते हैं कि कौन सा कोड निष्पादित हो।
भेद्य टेस्ट सर्वर को क्लोन करें:
git clone https://github.com/freeqaz/react2shell
cd react2shell/vulnerable-next-server
pnpm install
pnpm dev
दूसरे टर्मिनल में:
./detect.sh http://localhost:3443
एक भेद्य सर्वर प्रतिक्रिया बॉडी में E{"digest" के साथ HTTP 500 लौटाता है। RCE प्रदर्शित करने के लिए:
./exploit-redirect.sh http://localhost:3443 "id"
कमांड आउटपुट प्रतिक्रिया में दिखाई देता है। इंटरैक्टिव अन्वेषण के लिए:
./shell.sh http://localhost:3443
vulnerable-next-server/ निर्देशिका में सुरक्षित स्थानीय परीक्षण के लिए एक पूर्व-कॉन्फ़िगर Next.js 16.0.6 + React 19.2.0 एप्लिकेशन है। यह डिफ़ॉल्ट रूप से पोर्ट 3443 पर चलता है। यह एक न्यूनतम App Router सेटअप है जो दर्शाता है कि डिफ़ॉल्ट कॉन्फ़िगरेशन भेद्य हैं।
हमने विभिन्न परिदृश्यों को संभालने के लिए कई एक्सप्लॉइट वेरिएंट विकसित किए:
| स्क्रिप्ट | HTTP | आउटपुट | प्रोडक्शन | नोट्स |
|---|---|---|---|---|
exploit-redirect.sh | 303 | x-action-redirect हेडर | हाँ | अनुशंसित। कोई पूर्वापेक्षा नहीं। |
exploit-throw.sh | 500 | त्रुटि प्रतिक्रिया बॉडी | नहीं | केवल डेव मोड (प्रोडक्शन में त्रुटियाँ सैनिटाइज़ होती हैं)। |
exploit-blind.sh | 200 | केवल सर्वर-साइड | हाँ | फायर-एंड-फॉरगेट। OOB एक्सफिल के लिए उपयोग करें। |
exploit-urlencoded.sh | 303 | x-action-redirect हेडर | हाँ | भिन्न WAF सिग्नेचर। एक्शन ID आवश्यक। |
exploit-reflect.sh | 200 | प्रतिक्रिया बॉडी | हाँ | सबसे गोपनीय। एक्शन ID आवश्यक। |