إصدار طارئ من Next.js: ثغرة تنفيذ كود عبر صور SVG وثلاثة فحوص
إن كنت تنشر تطبيق Next.js فافحص إصداره اليوم. التنبيه GHSA-2464-fhr4-w9xw في قاعدة GitHub، بتصنيف حرج ودرجة CVSS v4 تبلغ 9.5، يصف تنفيذ كود عن بُعد دون مصادقة في واجهة تحسين الصور عند استخدام ملفات SVG، حين يعمل Next.js على لينكس مبني على glibc. لا يحتاج المهاجم حسابًا ولا تفاعلًا من أي مستخدم. الإصداران المصلحان هما 15.5.28 و16.4.1. كثير ممن يعملون بـPHP وNode يصونون واجهة Next.js بجوار الخلفية، فهذه الثغرة تستحق عشر دقائق حتى لو لم يكن Next أداتك الأساسية.
ماذا يقول التنبيه
بحسب التنبيه، خلل متعلق بالذاكرة في مكتبة خارجية يستخدمها Next.js لتحسين الصور قد يؤدي إلى تنفيذ كود عن بُعد. النطاقات المتأثرة من حزمة next هي من 10.0.0 حتى 15.5.27، ومن 16.0.0 حتى 16.4.0. الحل المؤقت إن لم تستطع الترقية فورًا أن تتأكد أن نسخة sharp التي يستخدمها Next.js هي 0.35.5 أو أحدث، والتثبيت الجديد يجلب نسخة مصلحة تلقائيًا، وترقية Next.js إلى إصدار مصلح تجعل مدير الحزم يوفّرها. يشير التنبيه إلى CVE-2026-96889 وينسب الاكتشاف إلى randomguy6407 وrafabd1.
ويضيف متتبّع pwn.watch سياقًا لم أستطع مطابقته مع التنبيهين الآخرين بنفسي: أن Vercel أصدرت 16.4.1 و15.5.28 يوم 14 أكتوبر 2026 خارج الجدول المعتاد، وأن خلل SVG من نوع استخدام بعد التحرير في librsvg يُبلغ عبر sharp، وأن الإصدار نفسه أصلح ثغرة تنفيذ كود حرجة ثانية (GHSA-673q-mjm6-r5xr في تطبيقات App Router مع Cache Components) وثغرة حجب خدمة عالية الخطورة في Server Actions (GHSA-p3m5-59mp-jv5r). الإصدار خارج الجدول يعني أن المطوّر قرر ألا ينتظر موعده المعتاد، واعتبر ذلك إشارة إلى الاستعجال.
لماذا قد ينفّذ محلّل صور كودًا
هذه معرفة عامة لا تفصيل من التنبيه. معالجة الصور في Node غالبًا كود أصلي: sharp طبقة JavaScript فوق مكتبات مكتوبة بـC مثل libvips وlibrsvg، وهي تعمل داخل عملية Node نفسها. خلل الذاكرة هناك لا تحميك منه سلامة JavaScript، فهو خلل في تطبيقك بمتغيرات بيئته ونظام ملفاته. وصيغة SVG توسّع السطح، لأنها صيغة مستندات خلفها محلّل كامل، لا شبكة نقاط.
التنبيه يذكر لينكس المبني على glibc، ولا يقول إن المنصات الأخرى آمنة. فإن كانت صورتك Alpine أو غيرها فرقِّ على أي حال بدل أن تبحث عن سبب للاستثناء.
ثلاثة فحوص
npm ls next sharp
grep -n '"version"' node_modules/sharp/package.json
docker exec my-next-app id -u
شغّل الأولين داخل المشروع والثالث على الحاوية العاملة، لأن ملف القفل على جهازك والصورة في الإنتاج قد يختلفان. ثم أصلح ما تكشفه الفحوص:
npm install next@16.4.1 # or next@15.5.28 on the 15 line
npm ls sharp # expect 0.35.5 or later
docker build --pull -t my-next-app .
عادتان من الممارسة العامة لا مما يشترطه التنبيه: قيّد ما يجلبه المحسّن عبر images.remotePatterns في إعدادات Next حتى لا يعالج إلا صورًا من مضيفين تسمّيهم، وشغّل التطبيق بمستخدم غير الجذر داخل الحاوية. لا تغني أي منهما عن الترقية. الخطوة التالية: شغّل الفحوص الثلاثة على كل تطبيق Next.js تنشره، ومنه مشروع العميل الذي لم تلمسه منذ الربيع.
المصدر: قاعدة تنبيهات GitHub، التنبيه GHSA-2464-fhr4-w9xw.
ملاحظات القراء