كل المقالات

إصدار طارئ من ⁨Next.js⁩: ثغرة تنفيذ كود عبر صور ⁨SVG⁩ وثلاثة فحوص

⁨Node.js⁩ · 4 دقيقة قراءة ·

إن كنت تنشر تطبيق ⁨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⁩). الإصدار خارج الجدول يعني أن المطوّر قرر ألا ينتظر موعده المعتاد، واعتبر ذلك إشارة إلى الاستعجال.

طلب صورة ⁨SVG⁩ عملية ⁨Node⁩ واحدة: تطبيقك ومتغيراته وأسراره واجهة تحسين الصور ⁨sharp⁩ غلاف ⁨JS⁩ ⁨librsvg⁩ كود أصلي خلل الذاكرة هنا انهيار في الكود الأصلي انهيار داخل تطبيقك وبصلاحياته
الملف لا يغادر عمليتك: المحلّل الذي يقرؤه يعمل بصلاحيات تطبيقك نفسها.

لماذا قد ينفّذ محلّل صور كودًا

هذه معرفة عامة لا تفصيل من التنبيه. معالجة الصور في ⁨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 .
1. ⁨next⁩ ⁨15.5.28⁩ أو ⁨16.4.1⁩ أو أحدث 2. ⁨sharp⁩ ⁨0.35.5⁩ أو أحدث 3. مستخدم الحاوية ⁨id -u⁩ ليس 0 (ليس الجذر) 1 و2: من التنبيه 3: يحدّ من الضرر افحص الصورة العاملة، لا جهازك فقط
فحصان يغلقان الثغرة، والثالث يحدد إلى أين قد تصل ثغرة مشابهة في المستقبل.
ترقية ⁨next⁩ هي الإصلاح، والتأكد أن ⁨sharp⁩ بإصدار ⁨0.35.5⁩ أو أحدث داخل الصورة المنشورة هو ما يثبت أن الإصلاح وصل.

عادتان من الممارسة العامة لا مما يشترطه التنبيه: قيّد ما يجلبه المحسّن عبر ⁨images.remotePatterns⁩ في إعدادات ⁨Next⁩ حتى لا يعالج إلا صورًا من مضيفين تسمّيهم، وشغّل التطبيق بمستخدم غير الجذر داخل الحاوية. لا تغني أي منهما عن الترقية. الخطوة التالية: شغّل الفحوص الثلاثة على كل تطبيق ⁨Next.js⁩ تنشره، ومنه مشروع العميل الذي لم تلمسه منذ الربيع.

المصدر: قاعدة تنبيهات ⁨GitHub⁩، التنبيه ⁨GHSA-2464-fhr4-w9xw⁩.

ملاحظات القراء

  1. لا توجد ملاحظات بعد. الأولى دائمًا الأجرأ.
هل تبني شيئًا مشابهًا؟ يسعدني تقديم المساعدة. راسلني على واتساب