همین الان React و Next.js رو آپدیت کنید! ( خطر امنیتی جدی⚠️)

حفره امنیتی خیلی خیلی خطرناکی تو React و Next.js پیدا شده که احتمالا شماهم خبرشو شنیده باشید!
اگه پروژه ری اکتی دارید اکیدا پیشنهاد میکنم این حفره امنیتی رو جدی بگیرید ..
روز اول که خبرش منتشر شد، فکرکردم یه باگ معمولی مثل بقیه باگ هاست ولی وقتی جزئیاتش رو خوندم دیدم نه!
قضیه خیلی جدی تر از این حرفاست و گفتم سریع بیام اینجا به شما هم بگم که اگر پروژه ری اکتی یا مبتنی بر ری اکت ( مثل Next.js ) دارید، همین الان جلوی این حفره امنیتی خیلی خطرناک رو بگیرید!
داستان چیه ؟
داستان از این قراره که یه حفره امنیتی خیلی خطرناک (از اونایی که امتیازش ۱۰ از ۱۰ شده!) توی React و Next.js پیدا شده.
اسم فنی-اش CVE-2025-66478 هست ولی ما بهش میگیم کابوس RSC !
ما فرانتاند دولوپرها این روزها خیلی درگیر React Server Components (RSC) شدیم و داریم با Next.js 15 و فیچرهای جدیدش حال میکنیم 🙂
اگه نمیدونید سرور کامپوننت چیه، پیشنهاد میکنم مقاله سرور کامپوننت در ری اکت رو مطالعه کنید ) چون این باگ امنیتی تو RSC پیدا شده.
ظاهراً توی پروتکل ارتباطی ریکت (همون Flight Protocol معروف) یه سوتی امنیتی بزرگ داده شده.
به زبون ساده بخوام بگم:
یه هکر میتونه بدون اینکه حتی توی سایت شما لاگین کنه، یه سری درخواست خاص بفرسته و مستقیم روی سروری که نود جی اس داره اجرا میشه، کد مخرب ران کنه (RCE).
یعنی چی؟
یعنی میتونه دیتابیس رو بخونه، متغیرهای محیطی (.env) رو برداره و عملاً Key رو ازت بگیره! حتی میتونه کد و اسکریپت دلخواهشو روی سرور شما Run کنه.
تو این چندروز، سرور های خیلی خیلی زیادی آلوده به کد های ماینر شدن ( یعنی هکر ها کد ماینر Run کردن روی سرور هایی که ری اکت یا Next.js روشون بوده )
باید نگران CVE-2025-66478 باشیم ؟!
اگه مثل من عشقِ استفاده از آخرین تکنولوژیها هستید، احتمالاً در خطرید!
تو لیست زیر، نسخه های آسیب پذیر قرار داده شده ..
چیکار کنیم که پروژمون امن بشه ؟
تیم ری اکت، برای نسخه های آسیب پذیر پچ امنیتی منتشر کرده، پس اگه از نسخه های مشکل دار استفاده میکنید، سریعا نکست جی اس خودتون رو به ورژن امن آپدیت کنید :
npm install next@15.0.5 # for 15.0.x
npm install next@15.1.9 # for 15.1.x
npm install next@15.2.6 # for 15.2.x
npm install next@15.3.6 # for 15.3.x
npm install next@15.4.8 # for 15.4.x
npm install next@15.5.7 # for 15.5.x
npm install next@16.0.7 # for 16.0.x
npm install next@15.6.0-canary.58 # for 15.x canary releases
npm install next@16.1.0-canary.12 # for 16.x canary releases
اگه از ری اکت و React Router استفاده میکنید، دستور های زیر رو اجرا کنید :
npm install react@latest
npm install react-dom@latest
npm install react-server-dom-parcel@latest
npm install react-server-dom-webpack@latest
npm install @vitejs/plugin-rsc@latest
این اتفاق چیو بهمون ثابت کرد ؟؟
ما فِرانت اِند دولوپر ها، فقط مسئول خوشگلی دکمه ها و انیمیشن ها نیستیم!
الان که مرز بین فرانت و بک اند با RSC برداشته شده، مسئولیت امنیت کدمون هم خیلی سنگین تر شده 🙂
حتماً پروژه های شرکت یا پروژه های شخصی خودتون رو چک کنید. یه آپدیت ۵ دقیقه ای ممکنه جلوی یه فاجعه بزرگ رو بگیره.
مواظب خودتون و کدهاتون باشید!
ریشه این سوتی امنیتی کجا بود ؟!
ریشه این آسیب پذیری در لایه Deserialization پروتکل React Flight وجود داشت! زمانی که سرور در حال پردازش Payloadهای ورودی از سمت کلاینت هست، اعتبارسنجی کافی روی Client References انجام نمیداد. این به مهاجم اجازه میده تا با ساختن یک Payload دستکاری شده (Crafted Payload)، کلاس ها یا توابع داخلی Node.js رو فراخوانی کنه و کد دلخواه خودش رو در کانتکست سرور اجرا کنه (RCE).
وقتی ما از Server Actions استفاده میکنیم یا کلاینت درخواستی به سرور میفرسته، React از یه فرمت متنی خاص (نه JSON معمولی) استفاده میکنه که بهش میگن Flight Protocol.
یه نمونه از دیتای Flight این شکلیه:
1:I["./src/components/Button.js", ["Chunks"], "Button"]
مشکل اصلی “اعتماد بیجا به ورودی کلاینت هنگام Deserialization” بوده.
وقتی سرور این رشته های متنی رو از کلاینت میگیره، باید اونها رو دوباره تبدیل کنه به آبجکتهای جاوااسکریپتی یا فراخوانی توابع.
در نسخه های باگ دار، مکانیزم پارسر (Parser) ریکت، چک نمیکرد که آیا ماژولی که کلاینت درخواست داده (مثلاً توی اون رشته بالا)، یه ماژول امن و مجاز هست یا نه.
هکر فلان فلان شده میاد ریکوئست رو دستکاری میکنه. به جای اینکه بگه: “لطفاً کامپوننت دکمه رو لود کن” میگه: “لطفاً ماژول سیستمی Node.js (مثل child_process) رو لود کن و تابع exec رو اجرا کن.”
کد مخرب هکر توی درخواست Flight ممکنه این شکلی باشه (به زبان ساده):
0:I["module:child_process", [], "exec"]
1:("rm -rf /")
چون React (در نسخههای پچ نشده) این درخواست رو بازسازی و اجرا میکرد، دستور مستقیماً روی سرور ران میشد!
مثل اتفاقی که اخیرا افتاد و خیلی از هکر ها کد های ماینر روی سرور های Node.js ری اکت و Next.js اجرا کردن 🙂
منابع :
درباره احمد احمدنژاد
من یه برنامه نویس و توسعه دهنده وب هستم که عاشق دنیای صفر و یکم❤️
نوشتههای بیشتر از احمد احمدنژاد






دیدگاهتان را بنویسید