
浅谈React Server Components RCE 漏洞分析
पिछले दो दिनों में React के एक deserialization RCE भेद्यता ने सुर्खियाँ बटोरीं, आधिकारिक CVSS सीधे 10.0 पर पहुँच गया, जो उस समय के Log4j के बराबर है। कुछ समय के लिए, कई अफवाहों ने दावा किया कि यह आधुनिक फ्रंट-एंड का Log4j है, जिससे कई कंपनियों के डेवलपर्स में घबराहट फैल गई, और सभी जागकर विभिन्न दस्तावेज़ों और पैचों की खोज करने लगे...। इसी बीच, ऑनलाइन कई संदेह भी सामने आए, कुछ लोगों ने परीक्षण के बाद पाया कि यह भेद्यता उतनी गंभीर नहीं है जितना प्रचारित किया गया, बल्कि इसका शोषण कुछ शर्तों पर निर्भर करता है। इसलिए मैंने इस भेद्यता का गहराई से अध्ययन करने का निर्णय लिया।
react-server-dom-webpack < 19.2.0, react-server-dom-turbopack < 19.2.0इस भेद्यता का कारण इस प्रकार है: [email protected] में, सर्वर साइड पर Server Action को पार्स करने वाला मुख्य फ़ंक्शन (स्यूडोकोड) है:
requireModulefunction requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
// ...
return "*" === metadata[2]
? moduleExports
: "" === metadata[2]
? moduleExports.__esModule
? moduleExports.default
: moduleExports
: moduleExports[metadata[2]]; // ← 漏洞点
}
भेद्यता का मूल moduleExports[metadata[2]] यह भाग है, जहाँ metadata[2] का कोई सत्यापन नहीं किया जाता, जिससे हमलावर न केवल मॉड्यूल के अपने निर्यात गुणों तक पहुँच सकता है, बल्कि प्रोटोटाइप श्रृंखला पर गुणों (जैसे constructor, __proto__, आदि) तक भी पहुँच सकता है। जब हमलावर metadata[0] को तैयार करता है (उदाहरण के लिए इसे vm पर इंगित करके), तो वह फिर से metadata[2] तैयार कर सकता है और इस प्रकार निर्दिष्ट मॉड्यूल में खतरनाक विधियों, जैसे vm.runInThisContext, को निर्यात कर सकता है, जिससे भेद्यता का शोषण होता है।
अपने विश्लेषण के दौरान, मैंने ejpir द्वारा प्रदान किए गए परीक्षण वातावरण और भेद्यता शोषण का संदर्भ लिया, और vm_runInThisContext इस Code Execution गैजेट को उदाहरण के रूप में लेकर विश्लेषण किया, प्रक्रिया इस प्रकार है (ध्यान दें: वास्तविक वातावरण में शोषण प्रक्रिया कुछ भिन्न हो सकती है!):
पहले, पेलोड के साथ अनुरोध भेजने के बाद, ब्रेकपॉइंट अनुरोध प्राप्त करने की स्थिति पर इस प्रकार है:


इसके बाद प्रोग्राम const formData = parseMultipart(buffer, boundaryMatch[1]); स्थान पर पहुँचता है, parseMultipart में प्रवेश करें

parseMultipart अनुरोध बॉडी डेटा निकालकर formData को लौटाता है

const actionFn = await decodeAction(formData, serverManifest); में प्रवेश करें भेद्यता उत्पन्न होने का स्थान

loadServerReference में प्रवेश करें


अब भेद्यता उत्पन्न करने वाले मुख्य कोड स्थान requireModule पर पहुँचते हैं, इसमें प्रवेश करें


यह id मान को # के आगे और पीछे के भाग को मॉड्यूल विधि के रूप में लौटाता है, और bound पैरामीटर मान को विधि के पैरामीटर के रूप में लौटाता है




actionFn में प्रवेश करें, अंतिम पेलोड निष्पादित करें



यहाँ, भेद्यता शोषण समाप्त होता है!
यह भेद्यता स्वयं इनपुट सत्यापन की कमी के कारण होती है, जो Log4j और fastjson के समान है। मैंने ऊपर vm_runInThisContext का परीक्षण किया, वास्तव में इस भेद्यता में कई गैजेट शोषण योग्य हैं, जैसे
vm#runInThisContextvm#runInNewContextchild_process#execSyncchild_process#execFileSyncchild_process#spawnSyncfs#readFileSyncfs#writeFileSync#constructor#__proto__#prototypeहमलावर इस भेद्यता का उपयोग करके निम्नलिखित प्राप्त कर सकता है:
vm#runInThisContext या child_process#execSync के माध्यम से कोई भी सिस्टम कमांड निष्पादित करनाfs#readFileSync, fs#writeFileSync के माध्यम से कोई भी फ़ाइल पढ़ना/लिखना.bashrc संशोधित करना, एप्लिकेशन फ़ाइलों को ओवरराइट करना आदिइसके आधार पर, संबंधित बचाव उपाय इस प्रकार दिए जा सकते हैं:
इसके आधार पर, अस्थायी बचाव इन दृष्टिकोणों से किया जा सकता है: WAF पर इन खतरनाक फ़ील्ड्स को ब्लॉक करने के नियम कॉन्फ़िगर किए जा सकते हैं, जिससे दुर्भावनापूर्ण हमलों को समय पर रोका जा सके। इसके अलावा, nginx पर भी मिलान करके ब्लॉक किया जा सकता है, जैसा नीचे दिखाया गया है:
# Nginx कॉन्फ़िगरेशन उदाहरण
location /formaction {
# खतरनाक मॉड्यूल संदर्भ वाले अनुरोधों को ब्लॉक करें
if ($request_body ~* "(vm#|child_process#|fs#|module#)") {
return 403;
}
# प्रोटोटाइप श्रृंखला प्रदूषण प्रयासों को ब्लॉक करें
if ($request_body ~* "(#constructor|#__proto__|#prototype)") {
return 403;
}
}
वर्तमान में आधिकारिक तौर पर सुरक्षा अपडेट जारी किया गया है, तुरंत सुरक्षित संस्करण में अपग्रेड करें! :
# react-server-dom-webpack को अपग्रेड करें
npm install react-server-dom-webpack@>=19.2.0
# react-server-dom-turbopack को अपग्रेड करें
npm install react-server-dom-turbopack@>=19.2.0
# Next.js उपयोगकर्ता
npm install next@>=15.0.5
फिक्स संस्करण:
react-server-dom-webpack: >= 19.2.0react-server-dom-turbopack: >= 19.2.0next.js: >= 15.0.5उपरोक्त भेद्यता का विश्लेषण करते समय, मैंने whiteov3rflow के संबंधित exp का संदर्भ लिया, और आगे परीक्षण वातावरण के लिए एक भेद्यता पहचान उपकरण लिखा, और इसे GitHub रिपॉजिटरी में रखा।

जो लोग स्वयं जांच करना चाहते हैं, वे इसे एक्सेस करके प्राप्त कर सकते हैं (ध्यान दें: मूल लेखक के परीक्षण वातावरण के कारण, यह वर्तमान में केवल मूल परीक्षण वातावरण के लिए उपयुक्त हो सकता है, बाद में सुधार की प्रतीक्षा है; जिन्हें आवश्यकता है वे इसे स्वयं संशोधित भी कर सकते हैं...) ध्यान दें कि कानूनी प्राधिकरण के साथ उपयोग करें, अनधिकृत विनाश निषिद्ध है!
अब तक, 2025.12.5, मैंने ऑनलाइन देखा है कि इस भेद्यता की 'खबर' रोलर कोस्टर की तरह उतार-चढ़ाव से भरी है, कभी 'परमाणु बम', कभी 'पानी का गड्ढा', और फिर 'परमाणु बम' में बदल जाती है... संबंधित शोषण विधियाँ भी लगातार उभर रही हैं। वर्तमान जानकारी के अनुसार, 'परमाणु बम' वास्तविक हो सकता है, लेकिन इसका प्रभाव Log4j की तुलना में कम है, फिर भी, सभी संबंधित मित्रों को जल्द से जल्द अपडेट करना चाहिए ताकि भविष्य में समस्या न हो!!!
इसके अलावा डेवलपर मित्रों को एक सुरक्षा सलाह: कभी भी उपयोगकर्ता इनपुट पर भरोसा न करें। log4j, fastjson और वर्तमान ReactRCE सभी इसी बिंदु पर असफल हुए। इसलिए वास्तविक व्यावसायिक विकास में खतरनाक स्थानों पर सख्त सत्यापन के लिए सैंडबॉक्स या व्हाइटलिस्ट जैसे तरीकों का उपयोग करें, त्रासदी से बचने के लिए!!!
कागज पर पढ़ना सतही लगता है, इस मामले को पूरी तरह समझने के लिए सावधानी से कार्य करना चाहिए।