بررسی آسیب‌پذیری ImageResponse در Next.js؛ راهکار رفع مشکل

آسیب‌پذیری Next.js

یک آسیب‌پذیری امنیتی بحرانی در Next.js شناسایی شده که در شرایط مشخص می‌تواند به اجرای کد از راه دور یا Remote Code Execution روی سرور منجر شود. این آسیب‌پذیری با شناسه CVE-2026-94545 در قابلیت ImageResponse قرار دارد؛ قابلیتی که از جمله برای ساخت Open Graph Image و تصاویر پیش‌نمایش هنگام اشتراک‌گذاری صفحات استفاده می‌شود.

شرکت Vercel در ۲۲ سپتامبر ۲۰۲۶ یک به‌روزرسانی امنیتی خارج از چرخه عادی برای رفع این مشکل منتشر کرد. نسخه‌های Next.js از 16.2.0 تا قبل از 16.3.6 تحت تأثیر قرار دارند و نسخه 16.3.6 این آسیب‌پذیری را برطرف کرده است.

شدت این آسیب‌پذیری در راهنمای امنیتی رسمی Next.js «بحرانی» اعلام شده و امتیاز آن در نسخه ۴ استاندارد CVSS به ۹.۵ از ۱۰ می‌رسد. سوء‌استفاده از آن از طریق شبکه امکان‌پذیر است، به دسترسی قبلی مهاجم نیازی ندارد و به تعامل کاربر نیز وابسته نیست. البته برای امکان سوء‌استفاده، لازم است شرایط مشخصی در نحوه استفاده اپلیکیشن از ImageResponse وجود داشته باشد.

آسیب‌پذیری CVE-2026-94545 چیست؟

این آسیب‌پذیری Next.js، نسخه‌ای از قابلیت ImageResponse در ماژول next/og را تحت تأثیر قرار می‌دهد که در محیط Node.js اجرا می‌شود. این قابلیت برای تولید تصاویر به کار می‌رود و از کتابخانه Satori متعلق به Vercel استفاده می‌کند تا ساختار تصویر را ابتدا به SVG تبدیل کند و سپس تصویر نهایی تولید شود.

ریشه این آسیب‌پذیری به نحوه تولید SVG در Satori برمی‌گردد. برخی مقادیر، پیش از قرار گرفتن در خروجی SVG به‌درستی خنثی نمی‌شدند؛ در نتیجه، یک مقدار دستکاری‌شده می‌توانست به‌جای متن عادی به‌عنوان کد SVG تفسیر شود. طبق توضیح Next.js، این مشکل در شرایط مشخص و در ترکیب با آسیب‌پذیری‌های موجود در وابستگی‌های دیگر می‌تواند به اجرای کد از راه دور منجر شود.

نکته مهم این است که شدت این مشکل در Satori و Next.js یکسان ارزیابی نشده است. Advisory مربوط به Satori برای همین CVE شدت Moderate و امتیاز 5.3 را اعلام کرده، زیرا پیامد آسیب‌پذیری، به نحوه استفاده از خروجی SVG بستگی دارد. اما در Next.js این زنجیره در شرایط آسیب‌پذیر می‌تواند به اجرای کد منجر شود و به همین دلیل امتیاز 9.5 دریافت کرده است.

چه اپلیکیشن‌هایی در معرض آسیب‌پذیری Next.js قرار دارند؟

صرف استفاده از Next.js به معنای آسیب‌پذیر بودن یک اپلیکیشن نیست. چند شرط برای قرار گرفتن در معرض CVE-2026-94545 وجود دارد.

نسخه Next.js باید از 16.2.0 به بعد و قدیمی‌تر از 16.3.6 باشد. علاوه بر این، اپلیکیشن باید از پیاده‌سازی Node.js مربوط به ImageResponse در next/og استفاده کند و هنگام تولید تصویر، داده‌های تحت کنترل مهاجم را در محتوای SVG، ویژگی‌ها (attributes) یا استایل‌های آن وارد کند.

برای نمونه، در راهنمای امنیتی رسمی Next.js سناریویی نشان داده شده که در آن، از آدرس درخواست پارامتری با نام value استخراج می‌شود و سپس مستقیماً در عنصر <title> یک SVG قرار می‌گیرد:

JavaScript
import { ImageResponse } from 'next/og'

export async function GET(request: Request) {
  const value = new URL(request.url).searchParams.get('value') ?? ''

  return new ImageResponse(
    <svg width="1200" height="630">
      <title>{value}</title>
    </svg>
  )
}

در چنین الگویی، داده‌ای که درخواست‌کننده می‌تواند آن را کنترل کند، مستقیماً در SVG قرار می‌گیرد. در نتیجه، اگر سایر شرایط ذکرشده نیز وجود داشته باشند، اپلیکیشن در معرض این آسیب‌پذیری قرار می‌گیرد.

در راهنمای امنیتی رسمی مشخص نشده است که آیا قرار گرفتن داده‌های تحت کنترل مهاجم در بخش‌های دیگری از محتوای تصویر نیز باعث بروز این آسیب‌پذیری می‌شود یا خیر؛ برای مثال، زمانی که این داده‌ها به‌عنوان متن یک عنوان درون عنصر div قرار می‌گیرند.

چگونه بررسی کنیم اپلیکیشن در معرض این آسیب‌پذیری قرار دارد؟

برای بررسی اپلیکیشن، باید محل‌هایی را پیدا کرد که ImageResponse از next/og وارد شده است. طبق گزارش The Hacker News، این موارد ممکن است در route handlerها یا فایل‌های opengraph-image وجود داشته باشند.

در مرحله بعد باید بررسی شود آیا مقادیری که مهاجم قادر به کنترل آن‌ها است وارد SVG content ،attributes یا styles می‌شوند یا خیر.

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

این موضوع از جهت دیگری نیز اهمیت دارد. طبق بررسی The Hacker News در ۲۳ سپتامبر، دستور npm audit آسیب‌پذیری موجود در نسخه 16.3.5 از Next.js را شناسایی نکرد. بنابراین، در آن زمان نمی‌شد برای شناسایی این آسیب‌پذیری تنها به نتیجه npm audit تکیه کرد و لازم بود نسخه Next.js به‌طور مستقیم بررسی شود.

کدام نسخه‌ها تحت تأثیر نیستند؟

نسخه‌ای از ImageResponse که در محیط اجرایی Edge اجرا می‌شود، تحت تأثیر CVE-2026-94545 قرار ندارد. همچنین، همه اپلیکیشن‌های استفاده‌کننده از ImageResponse در محیط Node.js آسیب‌پذیر نیستند. طبق راهنمای امنیتی رسمی، این مشکل زمانی مطرح است که داده‌های تحت کنترل مهاجم در محتوا، ویژگی‌ها یا استایل‌های SVG قرار بگیرند.

نسخه‌های Next.js 15.x نیز در برابر این RCE آسیب‌پذیر اعلام نشده‌اند. با این حال Vercel نسخه 15.5.26 را با تغییرات امنیتی مرتبط برای هاردنینگ منتشر کرده است.

چگونه آسیب‌پذیری CVE-2026-94545 را برطرف کنیم؟

راهکار اصلی، ارتقای Next.js به نسخه اصلاح‌شده 16.3.6 است. Next.js دستور زیر را برای نسخه 16.3 اعلام کرده است:

Bash
npm install next@16.3.6

بر اساس گزارش The Hacker News، در ۲۳ سپتامبر نسخه اصلاح‌شده‌ای برای شاخه 16.2 در npm registry وجود نداشت؛ در نتیجه، اپلیکیشن‌هایی که از نسخه 16.2 استفاده می‌کنند، باید Next.js را به نسخه 16.3.6 ارتقا دهند.

برای Next.js 15.5 نیز نسخه هاردنینگ شده را می‌توان با دستور زیر نصب کرد:

Bash
npm install next@15.5.26

البته همان‌طور که اشاره کردیم، Vercel تأکید کرده که Next.js 15.x در برابر RCE مورد بحث آسیب‌پذیر نیست و انتشار 15.5.26 با هدف hardening مرتبط انجام شده است.

اگر امکان ارتقای فوری Next.js وجود ندارد، راهکار موقت این است که داده‌های تحت کنترل مهاجم در محتوا، ویژگی‌ها یا استایل‌های SVG قرار نگیرند. این راهکار برای ImageResponse در محیط Node.js ارائه شده است.

همچنین، اگر پروژه به‌طور مستقیم از Satori استفاده می‌کند، باید آن را به نسخه 0.33.5 ارتقا داد. طبق گزارش The Hacker News، این نسخه مشکل امنیتی Satori را برطرف می‌کند.

آیا این آسیب‌پذیری Next.js در حملات واقعی استفاده شده است؟

بر اساس بررسی The Hacker News تا ۲۳ سپتامبر ۲۰۲۶، گزارش عمومی از حمله‌ای که از CVE-2026-94545 استفاده کرده باشد وجود نداشت و کد exploit عمومی نیز منتشر نشده بود.

همچنین، Vercel مشخص نکرده است که آیا اپلیکیشن‌های میزبانی‌شده روی این پلتفرم در برابر این آسیب‌پذیری محافظت می‌شوند یا خیر. این منابع همچنین روشی برای تشخیص سوءاستفاده احتمالی از یک route آسیب‌پذیر پیش از نصب به‌روزرسانی امنیتی ارائه نکرده‌اند.

💡 پلتفرم ابری دارکوب؛ هر آنچه برای استقرار محصولتان نیاز دارید

پلتفرم ابری دارکوب با ارائه زیرساخت مبتنی بر کوبرنتیز، نیازهای شما برای بیلد، دیپلوی و نگهداری محصولتان را رفع و فرایند استقرار محصول را ساده‌تر می‌کند.


✅ پشتیبانی از انواع اپ‌های کانتینری شده
✅ اتصال آسان به گیت و راه‌اندازی CI/CD
✅ پشتیبان‌گیری خودکار روزانه

جمع‌بندی

آسیب‌پذیری CVE-2026-94545 با امتیاز 9.5 از 10 در معیار CVSS، در دسته آسیب‌پذیری‌های بحرانی قرار می‌گیرد و نسخه‌های 16.2.0 تا 16.3.5 از Next.js را تحت شرایط مشخصی درگیر می‌کند. این آسیب‌پذیری به ImageResponse در محیط Node.js مربوط است و زمانی می‌تواند خطرساز شود که داده‌های تحت کنترل مهاجم در محتوا، ویژگی‌ها یا استایل‌های SVG قرار بگیرند.

راهکار اصلی Vercel برای رفع مشکل، ارتقای Next.js به نسخه 16.3.6 است. اگر ارتقای فوری امکان‌پذیر نیست، باید از قرار دادن داده‌های تحت کنترل مهاجم در محتوا، ویژگی‌ها یا استایل‌های SVG تولیدشده با ImageResponse در محیط Node.js جلوگیری کرد.

کتاب‌ها

کتاب‌ها

منابع توسعه زیرساخت به زبان فارسی
موفقیت مشتریان

موفقیت مشتریان

نقش هم‌روش در تحقق ایده‌ها
وبینارها

وبینارها

معرفی جدیدترین محصولات و ارائه‌ها