مقدمه
در این مستند، آسیبپذیریCVE-2025-55182 یکی از مهمترین نقصهای امنیتی کشفشده در دسامبر 2025
با امتیازCVSS 10.0 Critical مورد بررری قرار می گیرد،این آسیب پذیری پیاده سازی React Server Components (RSC) و فریم ورک هایی که از استفاده میکند به ویژهNext.js را تحت تأثیر قرار می دهد.
این نقص که توسط پژوهشگران امنیتی با نامReact2Shellشناخته میشود، امکان اجرای کد از راه دور بدون نیاز به احراز هویت (Unauthenticated RCE) را تنها از طریق یک درخواست HTTPدستکاریشده فراهم میکند.
در این نوشتار:
• معماری RSCو پروتکل React Flightبررسی میشود.
• ریشه فنی آسیبپذیری تشریح میگردد.
• و یک اثبات مفهوم واقعی که منجر به اجرای کد سیستمعامل میشود، توضیح داده خواهد شد.
• رفع آسیب پذیری روی سیستم عامل های مختلف.
نسخههای آسیبپذیر و پکیجهای تحت تأثیر
بر اساس توصیهنامه امنیتی رسمی، نسخههای زیر آسیبپذیر هستند:
نسخههای React آسیبپذیر: 19.0.0,19.1.0,19.1.1,19.2.0
پکیجهای آسیبپذیر
react-server-dom-webpack react-server-dom-parcel react-server-dom-turbopack
نسخههای امن
برای رفع کامل این آسیبپذیری، باید به یکی از نسخههای زیر ارتقا داده شود: 19.0.1 ,19.1.2 ,19.2.1
آشنایی با React Server Components و پروتکل Flight
React Server Components قابلیتی است که درReact19 معرفی شد و امکان رندر کامپوننتها روی سرور را فراهم میکند،این مدل باعث بهبود کارایی میشود، زیرا وظایف محاسباتی سنگین روی سرور انجام شده و تنها خروجی نهایی به کلاینت ارسال میشود.
React Flight Protocol ارتباط بین کلاینت و سرور درRSC از طریق React Flight Protocol انجام میشود،این پروتکل مسئول سریالسازی و دیسریالسازی دادهها بین دو سمت است.
هنگامی که کلاینت یک ServerAction را فراخوانی میکند، یک درخواست HTTP شامل دادههایی با قالب سریالشده خاص ارسال میشود که سرور آن را deserialize و اجرا میکند.
نشانگرهای سریالسازی Flight
پروتکل Flight از نشانگرهای نوع Type Markers استفاده میکند، از جمله:
• @$ ارجاع به Chunk
• B$ ارجاع Blob
• مسیرهای ویژگی با :مثال constructor:constructor:1$
همین مکانیزم سریالسازی، هستهی اصلی آسیبپذیری را شکل میدهد.
آسیبپذیری اصلی : Unsafe Deserialization
CVE-2025-55182 اساساً یک نقصdeserialization ناامن در پردازش payloadهای ورودی پروتکل Flight است.
این مشکل در تابع requireModule در پکیج react-server-dom-webpack وجود دارد:
javascript
function requireModule(metadata) {
var moduleExports = __webpack_require__(metadata[0]);
// ...
return moduleExports[metadata[2]]; // VULNERABLE
}
