رفتن به محتوای اصلی

آسیب‌پذیری‌های Next.js و React Server Components؛ سایتتان را وصله کنید

  • سینا قربانیان
  • ۱۵ آبان ۱۴۰۵
  • ۱۰ دقیقه مطالعه
  • ۰ بازدید
تصویر شاخص مقاله امنیت Next.js و آسیب‌پذیری‌های React Server Components
فهرست مطالب
  1. React2Shell چه بود و چرا خطرناک بود؟
  2. آسیب‌پذیری‌های Next.js در سال ۲۰۲۶ کدام بودند؟
  3. از کجا بفهمیم سایت ما Next.js و App Router دارد؟
  4. فهرست نسخه‌های امن Next.js کدام است؟
  5. چطور آپدیت نکست جی اس را امن و سریع انجام دهیم؟
  6. کاهش سطح حمله در پیکربندی
  7. محدودیت‌ها: وصله کردن چه چیزهایی را حل نمی‌کند؟
  8. از تجربه تیم siloow
  9. جمع‌بندی
  10. منابع
  11. سوالات متداول درباره امنیت Next.js
  12. آیا سایت Next.js با Pages Router در برابر React2Shell آسیب‌پذیر بود؟
  13. آخرین نسخه امن Next.js کدام است؟
  14. آیا راهی برای جلوگیری از این آسیب‌پذیری‌ها بدون آپدیت وجود دارد؟
  15. بعد از وصله کردن چه کار دیگری باید انجام دهم؟
  16. اطلاعیه‌های امنیتی Next.js هر چند وقت منتشر می‌شوند؟

امنیت Next.js در یک سال گذشته به مهم‌ترین موضوع برای صاحبان سایت‌ها و وب‌اپ‌های React رسیده است: از آسیب‌پذیری بحرانی React2Shell در دسامبر ۲۰۲۵ با امتیاز CVSS برابر ۱۰ که اجرای کد از راه دور (RCE) بدون احراز هویت را ممکن می‌کرد، تا آسیب‌پذیری‌های بحرانی RCE و SSRF در انتشارهای امنیتی سپتامبر و اکتبر ۲۰۲۶. تنها راه‌حل رسمی همه این موارد، نصب نسخه وصله‌شده است؛ هیچ راه دور زدن (workaround) کاملی اعلام نشده است.

نویسنده: تیم siloow (سیلو سولوشن) — آخرین به‌روزرسانی: آبان ۱۴۰۵

وضعیت تا آبان ۱۴۰۵: آخرین نسخه‌های وصله‌شده اعلام‌شده در وبلاگ رسمی Next.js در به‌روزرسانی ۱۴ اکتبر ۲۰۲۶، نسخه ۱۶.۴.۱ برای شاخه Active LTS و ۱۵.۵.۲۸ برای شاخه Maintenance LTS هستند. انتشار امنیتی بعدی برای ۳ نوامبر ۲۰۲۶ با هفت آسیب‌پذیری با شدت متوسط اعلام شده است. این فهرست نسخه‌ها با هر انتشار جدید تغییر می‌کند؛ همیشه آخرین نسخه را از وبلاگ رسمی بررسی کنید.

در این مقاله آسیب‌پذیری‌های مهم Next.js و React Server Components را به ترتیب زمانی مرور می‌کنیم، فهرست نسخه‌های امن هر شاخه را می‌دهیم و یک چک‌لیست عملی برای وصله کردن و پس از وصله ارائه می‌کنیم.

React2Shell چه بود و چرا خطرناک بود؟

React2Shell نام آسیب‌پذیری بحرانی پروتکل React Server Components است که در ۳ دسامبر ۲۰۲۵ اعلام شد و در React با شناسه CVE-۲۰۲۵-۵۵۱۸۲ و در Next.js با شناسه CVE-۲۰۲۵-۶۶۴۷۸ ثبت شد. طبق اطلاعیه امنیتی Next.js، این آسیب‌پذیری امتیاز CVSS برابر ۱۰ داشت و می‌توانست هنگام پردازش درخواست‌های ساخته‌شده توسط مهاجم، به اجرای کد از راه دور روی سرور منجر شود.

دامنه آسیب طبق همان اطلاعیه:

  • آسیب‌پذیر: برنامه‌های App Router با React Server Components روی Next.js ۱۵.x، ۱۶.x و نسخه‌های canary از ۱۴.۳.۰-canary.۷۷ به بعد.
  • غیرآسیب‌پذیر: Next.js ۱۳.x، نسخه پایدار ۱۴.x، برنامه‌های Pages Router و Edge Runtime.
  • اقدام تکمیلی: Vercel توصیه کرد اگر برنامه تا ۴ دسامبر ۲۰۲۵ ساعت ۱ بعدازظهر به وقت اقیانوس آرام آنلاین و وصله‌نشده بوده، همه رمزها و کلیدهای آن (secrets) تعویض شوند.

یک هفته بعد، در ۱۱ دسامبر ۲۰۲۵، دو آسیب‌پذیری دیگر در RSC پیدا شد که هیچ‌کدام اجرای کد نبودند: حمله منع سرویس (DoS) با شدت بالا (CVE-۲۰۲۵-۵۵۱۸۴ که وصله کامل آن با CVE-۲۰۲۵-۶۷۷۷۹ منتشر شد) و افشای کد منبع Server Functionها با شدت متوسط (CVE-۲۰۲۵-۵۵۱۸۳). طبق به‌روزرسانی امنیتی ۱۱ دسامبر، افشای کد می‌توانست رمزهایی را که مستقیماً در کد نوشته شده بودند لو بدهد.

خط زمانی آسیب‌پذیری‌های امنیت Next.js و React Server Components
مهم‌ترین رخدادهای امنیتی Next.js

آسیب‌پذیری‌های Next.js در سال ۲۰۲۶ کدام بودند؟

در سال ۲۰۲۶، Next.js چندین انتشار امنیتی داشت که مهم‌ترین آن‌ها در سپتامبر و اکتبر شامل آسیب‌پذیری‌های بحرانی RCE و SSRF با شدت بالا بودند. جدول زیر خلاصه موارد مهم را بر اساس اطلاعیه‌های رسمی نشان می‌دهد:

تاریخآسیب‌پذیریشدتچه برنامه‌هایی آسیب‌پذیرندنسخه وصله‌شده
۳ دسامبر ۲۰۲۵React2Shell: اجرای کد از راه دور در RSC (CVE-۲۰۲۵-۶۶۴۷۸)بحرانی (CVSS ۱۰)App Router در ۱۵.x و ۱۶.xاز جمله ۱۵.۵.۷ و ۱۶.۰.۷
۱۱ دسامبر ۲۰۲۵DoS و افشای کد منبع در RSCبالا و متوسطApp Router در ۱۳.۳ به بعداز جمله ۱۴.۲.۳۵، ۱۵.۵.۹ و ۱۶.۰.۱۰
۳۰ سپتامبر ۲۰۲۶SSRF در Image Optimization (CVE-۲۰۲۶-۹۴۴۸۳)بالافقط اگر images.remotePatterns تنظیم شده باشد۱۶.۳.۸ و ۱۵.۵.۲۷
۳۰ سپتامبر ۲۰۲۶مسموم‌سازی کش صفحات SSG و ISRمتوسطبه‌خصوص برنامه‌های self-hosted۱۶.۳.۸ و ۱۵.۵.۲۷
۱۴ اکتبر ۲۰۲۶RCE در توابع use cache که چند typed array برمی‌گردانندبحرانیApp Router با Cache Components۱۶.۴.۱ و ۱۵.۵.۲۸
۱۴ اکتبر ۲۰۲۶RCE در Image Optimization هنگام پردازش SVG (CVE-۲۰۲۶-۹۶۸۸۹)بحرانیاجرا روی لینوکس مبتنی بر glibc۱۶.۴.۱ و ۱۵.۵.۲۸ (یا sharp ۰.۳۵.۵ به بعد)
۱۴ اکتبر ۲۰۲۶DoS با Server ActionsبالاApp Router با حداقل یک Server Action۱۶.۴.۱ و ۱۵.۵.۲۸
آسیب‌پذیری‌های مهم Next.js و React Server Components بر اساس وبلاگ رسمی nextjs.org

جزئیات کامل در اطلاعیه‌های انتشار امنیتی سپتامبر ۲۰۲۶ و به‌روزرسانی امنیتی ۱۴ اکتبر ۲۰۲۶ آمده است. انتشار سپتامبر همچنین یک مشکل افشای اطلاعات با شدت کم در endpoint پروتکل MCP سرور توسعه (next dev) را رفع کرد که فقط محیط توسعه را تحت تأثیر قرار می‌داد.

از کجا بفهمیم سایت ما Next.js و App Router دارد؟

بسیاری از صاحبان کسب‌وکار نمی‌دانند سایتشان با چه فناوری‌ای ساخته شده است، و همین باعث می‌شود اطلاعیه‌های امنیتی Next.js را نادیده بگیرند. چند راه ساده برای تشخیص:

  • از تیم توسعه یا پیمانکار بپرسید: مطمئن‌ترین راه است؛ فایل package.json پروژه نسخه دقیق next را نشان می‌دهد.
  • ساختار پروژه را ببینید: وجود پوشه app در ریشه یا داخل src یعنی App Router؛ پوشه pages یعنی Pages Router. برخی پروژه‌ها هر دو را دارند.
  • کد منبع صفحه را بررسی کنید: مسیرهایی مثل /_next/static/ در HTML صفحه نشان می‌دهد سایت با Next.js ساخته شده است.
  • قرارداد پشتیبانی را مرور کنید: اگر سایت توسط فریلنسر یا شرکتی ساخته شده که دیگر پشتیبانی نمی‌کند، احتمال وصله‌نشده ماندن آن بالاست.

اگر سایت شما وردپرسی است و فرانت‌اند جدا ندارد، این آسیب‌پذیری‌ها مستقیماً به آن مربوط نیستند؛ اما در پروژه‌های وردپرس هدلس که فرانت‌اند با Next.js ساخته شده، هر دو بخش باید جداگانه به‌روز نگه داشته شوند.

فهرست نسخه‌های امن Next.js کدام است؟

نکته مهم: نسخه‌هایی که در این مقاله آمده، وضعیت تا آبان ۱۴۰۵ را نشان می‌دهند و با هر انتشار امنیتی جدید تغییر می‌کنند. پیش از هر به‌روزرسانی، همیشه آخرین نسخه وصله‌شده را از اطلاعیه‌های امنیتی رسمی Next.js در GitHub و وبلاگ رسمی Next.js بررسی کنید.

نسخه امن Next.js یعنی آخرین نسخه وصله‌شده در شاخه‌ای که از آن استفاده می‌کنید. از ژوئیه ۲۰۲۶، Next.js دو شاخه را با وصله امنیتی پشتیبانی می‌کند و در اطلاعیه‌ها آن‌ها را Active LTS و Maintenance LTS می‌نامد:

شاخهوضعیتآخرین نسخه وصله‌شده (تا ۱۴ اکتبر ۲۰۲۶)توصیه
16.xActive LTS16.4.1ارتقا به آخرین ۱۶.۴.x
15.xMaintenance LTS15.5.28ارتقا به آخرین ۱۵.۵.x و برنامه‌ریزی مهاجرت به ۱۶
14.xوصله‌های دسامبر ۲۰۲۵ تا ۱۴.۲.۳۵در اطلاعیه‌های ۲۰۲۶ ذکر نشدهمهاجرت به شاخه پشتیبانی‌شده
۱۳.x و قدیمی‌ترخارج از اطلاعیه‌های اخیر—مهاجرت فوری
شاخه‌های Next.js و نسخه‌های وصله‌شده بر اساس اطلاعیه‌های امنیتی رسمی

نکته: انتشار امنیتی ۳ نوامبر ۲۰۲۶ نسخه‌های جدیدتری از هر دو شاخه منتشر می‌کند. عدد دقیق را از وبلاگ رسمی Next.js بگیرید، نه از این جدول یا از مقاله‌های دست دوم.

چطور آپدیت نکست جی اس را امن و سریع انجام دهیم؟

آپدیت نکست جی اس برای وصله امنیتی معمولاً یک تغییر نسخه فرعی (patch) است و تغییر کد لازم ندارد؛ بنابراین سریع‌ترین و کم‌ریسک‌ترین نوع ارتقاست. دستورهای کلیدی:

# نسخه نصب‌شده Next.js و React را ببینید
npm ls next react react-dom

# ابزار رسمی بررسی و ارتقای نسخه برای React2Shell
npx fix-react2shell-next

# ارتقا به آخرین نسخه وصله‌شده هر شاخه (تا آبان ۱۴۰۵)
npm install next@16.4.1 # شاخه 16.4 (Active LTS)
npm install next@15.5.28 # شاخه 15.5 (Maintenance LTS)

# بررسی آسیب‌پذیری وابستگی‌ها
npm audit --omit=dev

چک‌لیست کامل وصله کردن:

  1. نسخه فعلی را مشخص کنید: با npm ls next نسخه واقعی نصب‌شده در lockfile را ببینید، نه فقط عدد package.json.
  2. به آخرین نسخه وصله‌شده همان شاخه بروید: این کار کمترین احتمال شکستن کد را دارد.
  3. lockfile را commit و دوباره build کنید: وصله تا زمانی که build جدید deploy نشود اثری ندارد.
  4. وابستگی‌های جانبی را بررسی کنید: برای آسیب‌پذیری SVG، نسخه sharp باید ۰.۳۵.۵ یا بالاتر باشد.
  5. رمزها را تعویض کنید: اگر برنامه در بازه React2Shell وصله‌نشده آنلاین بوده، کلیدهای API، رمز دیتابیس و توکن‌ها را عوض کنید.
  6. لاگ‌ها را بررسی کنید: به دنبال درخواست‌های غیرعادی به Server Actions، مصرف ناگهانی CPU یا فرایندهای ناشناخته روی سرور باشید.
  7. اطلاع‌رسانی را خودکار کنید: اطلاعیه‌های امنیتی Next.js تقریباً ماهانه و با اعلام قبلی منتشر می‌شوند؛ آن‌ها را در تقویم تیم بگذارید.
چک‌لیست آپدیت نکست جی اس و اقدامات پس از وصله امنیتی
چک‌لیست وصله امنیتی Next.js

کاهش سطح حمله در پیکربندی

جدا از وصله، بخشی از ریسک با پیکربندی درست کم می‌شود. مثلاً آسیب‌پذیری SSRF سپتامبر ۲۰۲۶ فقط برنامه‌هایی را تحت تأثیر قرار می‌داد که images.remotePatterns داشتند؛ پس الگوهای مجاز را تا حد ممکن محدود کنید:

// next.config.ts — محدود کردن دقیق منابع تصویر خارجی
const nextConfig = {
images: {
remotePatterns: [
{ protocol: 'https', hostname: 'cdn.example.com', pathname: '/uploads/**' },
],
// پیش‌فرض Next.js 16: بهینه‌سازی IP محلی مسدود است
dangerouslyAllowLocalIP: false,
maximumRedirects: 3,
},
};

export default nextConfig;

چند اصل دیگر: رمزها را هرگز مستقیماً در کد Server Functionها ننویسید و از متغیرهای محیطی در زمان اجرا استفاده کنید؛ Server Actionهایی که استفاده نمی‌شوند را حذف کنید؛ و دسترسی به next dev را فقط روی ماشین توسعه‌دهنده نگه دارید.

محدودیت‌ها: وصله کردن چه چیزهایی را حل نمی‌کند؟

  • اگر سرور قبل از وصله آلوده شده باشد، به‌روزرسانی نسخه بدافزار یا دسترسی ایجادشده را پاک نمی‌کند؛ بررسی سرور و تعویض رمزها لازم است.
  • WAF و قوانین فایروال میزبان‌ها می‌توانند حمله‌های شناخته‌شده را موقتاً مسدود کنند، اما طبق اطلاعیه‌های رسمی جایگزین وصله نیستند.
  • وصله کردن Next.js امنیت کد خودتان (اعتبارسنجی ورودی، کنترل دسترسی در Server Actions) را تضمین نمی‌کند.
  • جزئیات فنی برخی آسیب‌پذیری‌ها عمداً محدود منتشر شده تا از سوءاستفاده جلوگیری شود؛ بنابراین ارزیابی دقیق اینکه آیا سایت شما هدف قرار گرفته یا نه، همیشه ممکن نیست.

از تجربه تیم siloow

تیم siloow برای وب‌اپ‌های React و Next.js که نگهداری می‌کند، بعد از React2Shell یک روال ثابت گذاشت: هر اطلاعیه امنیتی Next.js و React در همان روز بررسی می‌شود، شاخه و نسخه هر پروژه در یک فهرست مرکزی ثبت است و وصله‌های امنیتی بدون انتظار برای چرخه انتشار معمولی deploy می‌شوند. درس اصلی ما این بود که پروژه‌هایی که سال‌ها روی یک نسخه قدیمی مانده بودند، در روز بحران بیشترین زمان را گرفتند، چون ابتدا باید چند نسخه اصلی ارتقا می‌یافتند تا وصله قابل نصب شود. همین تجربه در وردپرس هم تکرار می‌شود؛ اصول مشابه را در چک‌لیست امنیت وردپرس در ۲۰۲۶ نوشته‌ایم.

جمع‌بندی

  • React2Shell (دسامبر ۲۰۲۵) با CVSS ۱۰ اجرای کد از راه دور در App Router را ممکن می‌کرد و تنها راه‌حل، وصله بود.
  • در سپتامبر و اکتبر ۲۰۲۶ آسیب‌پذیری‌های بحرانی RCE در use cache و Image Optimization و SSRF با شدت بالا وصله شدند.
  • تا ۱۴ اکتبر ۲۰۲۶، نسخه‌های امن ۱۶.۴.۱ و ۱۵.۵.۲۸ بودند و انتشار بعدی ۳ نوامبر ۲۰۲۶ است.
  • پس از وصله، build و deploy جدید، بررسی sharp و در صورت لزوم تعویض رمزها را فراموش نکنید.
  • اطلاعیه‌های ماهانه Next.js را دنبال کنید و پروژه را روی شاخه پشتیبانی‌شده نگه دارید.

اگر وب‌اپلیکیشن Next.js یا React دارید و مطمئن نیستید روی نسخه امن است، یا برای بررسی سرور پس از یک آسیب‌پذیری به کمک نیاز دارید، خدمات امنیت و پشتیبانی وب siloow را ببینید. برای مهاجرت به شاخه جدید، راهنمای Next.js ۱۶ و نکات مهاجرت و برای انتخاب بین سایت معمولی و وب‌اپ، مقاله تفاوت سایت و وب اپلیکیشن را بخوانید. اگر فرانت‌اند شما روی React است، مرور React 19.3 و قابلیت Trusted Types آن هم مفید است. خبرهای امنیتی بعدی را در مگ siloow دنبال کنید.

منابع

سوالات متداول درباره امنیت Next.js

آیا سایت Next.js با Pages Router در برابر React2Shell آسیب‌پذیر بود؟

خیر. طبق اطلاعیه رسمی، برنامه‌های Pages Router، Edge Runtime، Next.js ۱۳.x و نسخه پایدار ۱۴.x تحت تأثیر React2Shell نبودند. با این حال برخی آسیب‌پذیری‌های بعدی مثل مسموم‌سازی کش، Pages Router را هم شامل می‌شدند، پس به‌روزرسانی همچنان لازم است.

آخرین نسخه امن Next.js کدام است؟

تا به‌روزرسانی ۱۴ اکتبر ۲۰۲۶، نسخه‌های وصله‌شده ۱۶.۴.۱ و ۱۵.۵.۲۸ بودند. انتشار امنیتی بعدی برای ۳ نوامبر ۲۰۲۶ اعلام شده است؛ همیشه عدد دقیق را از وبلاگ رسمی nextjs.org بررسی کنید.

آیا راهی برای جلوگیری از این آسیب‌پذیری‌ها بدون آپدیت وجود دارد؟

برای React2Shell و آسیب‌پذیری‌های RSC، اطلاعیه رسمی صریحاً می‌گوید هیچ راه دور زدنی وجود ندارد و ارتقا لازم است. فقط برای آسیب‌پذیری SVG، ارتقای sharp به ۰.۳۵.۵ به‌عنوان راه موقت معرفی شده است.

بعد از وصله کردن چه کار دیگری باید انجام دهم؟

build و deploy جدید انجام دهید، لاگ‌ها را برای فعالیت مشکوک بررسی کنید و اگر برنامه در بازه React2Shell وصله‌نشده آنلاین بوده، همه رمزها و کلیدهای API را تعویض کنید.

اطلاعیه‌های امنیتی Next.js هر چند وقت منتشر می‌شوند؟

از ژوئیه ۲۰۲۶ Next.js برنامه انتشار امنیتی منظم دارد و تقریباً ماهانه با اعلام قبلی در وبلاگ رسمی منتشر می‌شود. برای موارد فوری یا آسیب‌پذیری‌هایی که در حال سوءاستفاده‌اند، وصله خارج از برنامه هم منتشر می‌شود.

منبع: nextjs.org

اشتراک‌گذاری