React और Next.js में रिमोट कोड एक्सीक्यूशन (RCE) की सुरक्षा कमजोरी
(github.com/vercel)- React और Next.js में रिमोट कोड एक्सीक्यूशन (RCE) संभव बनाने वाली सुरक्षा कमजोरी की रिपोर्ट की गई
- यह समस्या Next.js package के अंदर पाई गई है, जहाँ attacker दुर्व्यवहारपूर्ण इनपुट के ज़रिये मनचाहा कोड चलाने को ट्रिगर कर सकता है
- Vercel ने GitHub security advisory (GHSA-9qr9-h5gf-34mp) के माध्यम से इस कमजोरी का खुलासा किया और अपडेटेड संस्करण जारी किया
- उपयोगकर्ताओं को इस कमजोरी को कम करने के लिए नवीनतम संस्करण पर अपग्रेड करना चाहिए
- यह घटना फ्रेमवर्क स्तर पर सुरक्षा प्रबंधन के महत्व को फिर से उजागर करती है
RCE कमजोरी का अवलोकन
- Next.js और React वातावरण में एक ऐसी कमजोरी मिली जो remote code execution की अनुमति दे सकती है
- इससे server side पर मनमाना JavaScript code execute करने का जोखिम मौजूद है
- यह कमजोरी Next.js package के अंदर code processing flow में मौजूद है
- प्रभावित किसी विशेष function या module का विस्तृत विवरण सार्वजनिक नहीं किया गया है
प्रभाव और प्रतिक्रिया
- Vercel ने GitHub security advisory (GHSA-9qr9-h5gf-34mp) के ज़रिए इस मुद्दे की आधिकारिक घोषणा की
- यह advisory Next.js repository के security advisories सेक्शन में पोस्ट किया गया था
- प्रभावित संस्करणों का उल्लेख नहीं दिया गया, लेकिन अद्यतन संस्करण जारी किया गया है
- उपयोगकर्ता को latest stable version पर जल्द से जल्द अपग्रेड करने की सलाह दी गई है
सुरक्षा सलाह और कार्रवाई
- Next.js package का उपयोग करने वाले सभी projects को तुरंत version check करना चाहिए
package.jsonमें Next.js version को नवीनतम रखना जरूरी है
- Vercel ने patched version के अतिरिक्त अन्य mitigation उपायों का कोई जिक्र नहीं किया है
- कमजोरी की तकनीकी डिटेल पूरी तरह सार्वजनिक नहीं की गई; सुरक्षा कारणों से केवल सीमित जानकारी साझा की गई है
महत्व
- यह कमजोरी server rendering environment में code execution risk को स्पष्ट करती है
- React तथा Next.js आधारित सेवाओं के operators को security updates नियमित रूप से लागू करनी चाहिए
- फ्रेमवर्क स्तर की सुरक्षा कमजोरी सीधे पूरे application security पर असर डाल सकती है
1 टिप्पणियां
Hacker News की राय
यह भेद्यता उस सबसे खराब स्थिति के सच हो जाने का मामला है, जिसकी चेतावनी RSC/server actions लाते समय से दी जा रही थी
सर्वर ने क्लाइंट के अविश्वसनीय input को वैसे का वैसा deserialize करके module और export नाम ढूंढकर execute किया
hasOwnPropertypatch से इसे रोका जा सकता है, लेकिन मूल समस्या यह है कि React एक RPC layer बना रहा है, इस बात को स्पष्ट रूप से नहीं पहचाना गयाgRPC या SOAP जैसे पारंपरिक RPC framework explicit schema और service definition के जरिए boundaries साफ रखते हैं, लेकिन React का तरीका bundler को दिखने वाली हर API को expose करता है, इसलिए जोखिम भरा है
इस तरह के design से पैदा होने वाली security समस्याएं आगे भी दोहराई जाने की संभावना है
explicit schema होने पर भी, अगर आखिरी चरण में अविश्वसनीय input को server namespace की किसी भी object को refer करने दिया जाए, तो उसका कोई फायदा नहीं
सिर्फ
"use server"से marked functions ही expose होते हैं, और React टीम भी इस बात से अवगत है कि वे एक RPC system डिजाइन कर रहे हैंऐसे bugs दूसरे RPC systems में भी पूरी तरह हो सकते हैं (मैं React contributor हूं)
लेकिन पुराना private repo बनाए रखना भी कोई अच्छा विकल्प नहीं है
Next का static build ही उसका एकमात्र फायदा है
अगर उसका support बंद हो जाए तो फिर उसे इस्तेमाल करने की कोई वजह नहीं बचेगी
Facebook/Meta की security advisory के अनुसार, React Server Components 19.0.0~19.2.0 versions में pre-auth remote code execution (RCE) भेद्यता मौजूद है
React के आधिकारिक ब्लॉग की घोषणा में भी बताया गया है कि क्लाइंट द्वारा server functions को call कर पाने वाली संरचना के कारण हमलावर malicious HTTP requests बनाकर सर्वर पर arbitrary code execute कर सकता है
hasOwnPropertycheck जोड़ना शामिल है, तो हमला शायद prototype chain की properties (__proto__आदि) को refer करने के तरीके से हुआ होगाfix commit शायद यह commit है
लगता है कि इसे कई बदलावों के साथ squash किया गया, इसलिए details छिप गई हैं
code में expose होने वाले functions की सूची को whitelist approach से सीमित करने वाला pattern 4 जगह दिखता है
Vercel पहले से ही platform-level protection के जरिए malicious request patterns को block कर रहा है
घोषणा देखें
Cloudflare ने भी WAF rule के जरिए पहले से प्रतिक्रिया दी
फिर भी Next, React, और दूसरे meta-framework dependencies को तुरंत update करने की जोरदार सिफारिश की जाती है
Deno Deploy/Subhosting की blog post भी देखने लायक हैं
PoC repository देखकर मैंने भेद्यता को reproduce करके देखा
react-server-dom-webpackमें भी RCE चल गया, इसलिए लगता है mechanism पूरी तरह सही नहीं बैठताकिसी असली Next.js project में demo दिखाया जाए तो अच्छा होगा
अब तो “Vercel के बिना RCE नहीं” जैसी बात कही जा रही है, और इस घटना ने hosting environment और security के संबंध को उजागर कर दिया है
CVE score 10.0 इस तरह के व्यापक रूप से इस्तेमाल होने वाले project के लिए चौंकाने वाला आंकड़ा है
फिर भी इसके साप्ताहिक downloads 3.1 लाख से ज्यादा हैं
यह समझना मुश्किल है कि React टीम ऐसे भ्रमित करने वाले feature पर समय क्यों खर्च कर रही है
SSR से यह कितना बेहतर है, performance gain वास्तव में कितना है, इस पर भी सवाल है
Hook आने के बाद developer experience खराब हुआ, और उसे बेहतर करने के बजाय एक और जटिलता जोड़ दी गई
बेहतर होता कि JS के मूल control flow को component logic में स्वाभाविक रूप से इस्तेमाल करने दिया जाता
मैं इसे componentized BFF (Backend for Frontend) layer की तरह देखता हूं
हर UI fragment अपने संबंधित backend logic से सीधे जुड़ जाता है, जिससे
fetchcall के बिना data लाया जा सकता हैइससे frontend और backend को साथ-साथ विकसित करना आसान हो जाता है, और सिर्फ जरूरी data को बारीकी से load किया जा सकता है
आखिरकार सिर्फ UI के लिए server logic को component structure के भीतर स्वाभाविक रूप से पिरोया जा सकता है
Svelte या React का compiler-based model कहीं ज्यादा संभालने योग्य लगता है
Vue, Svelte, Angular आदि सभी को अलग compiler और file extension चाहिए
जबकि React/JSX को preprocessor चरण में ही विशेष लाभ मिल जाता है
Rust ने macro system के जरिए इस तरह की समस्या हल की — उदाहरण के लिए Leptos या Yew standard
.rsfiles के भीतर JSX या HTML template support करते हैंअगर JS में ऐसी extensibility नहीं आती, तो web आगे भी जटिल और अल्प-प्रभावी वातावरण बना रह सकता है
क्लाइंट-साइड load कम करने की कोशिश की गई, लेकिन वह भी असफल लगती है
React ब्लॉग की विस्तृत व्याख्या भी देखने लायक है