CVE-2026-32740: تنفيذ تعليمات عن بعد في Next.js عبر معالجة صور AVIF
أساليب الهجوم وتقنياتهأمس, 07:01
CVE-2026-32740: تنفيذ تعليمات عن بعد في Next.js عبر معالجة صور AVIF
أثبت Adrian Tiron، الباحث في Fortbridge، كيف يمكن لثغرة فساد الذاكرة في
libheif أن تؤدي إلى تنفيذ تعليمات عن بعد في تطبيق Next.js معرّض للخطر بشكل متعمد يستخدم sharp. البحث بارز لأنه يوضح سلسلة استغلال كاملة مع تمكين ASLR وNX وPIE.ما هي الثغرة؟
CVE-2026-32740 هي تجاوز سعة المخزن المؤقت في الكومة في
HeifPixelImage::copy_image_to()، وهي دالة في libheif مسؤولة عن تجميع بلاطات صور HEIF/AVIF المفكوكة في شبكة.
بالنسبة لقنوات الألوان Cb وCr المخفضة العينات، تقوم الدالة بتقريب صف الوجهة وعدد الصفوف المراد نسخها بشكل مستقل. مع بلاطات AVIF المصنوعة خصيصًا، يمكن لهذه الحسابات أن تتسبب في كتابة صف خارج مخزن الكروما المخصص.
أنشأ الباحثون صورة AVIF بأربع بلاطات مكدسة عموديًا، كل منها بارتفاع 33 بكسل، على قماش 116 × 132 بكسل. تسببت البلاطة الأخيرة في نسخ صف كروما إضافي خارج حدود المخزن المؤقت، مما وفر كتابة خارج الحدود متحكم بها بحجم 58 بايت.كيف تم تحويل التجاوز إلى تنفيذ تعليمات عن بعد؟
عادةً ما يسبب فساد الذاكرة وحده انهيارًا. طور الباحث سلسلة استغلال متعددة المراحل:
• تجاوز ASLR عبر تسريب معلومات. تسبب AVIF آخر مصنوع خصيصًا في أن يعيد
sharp ملف PNG يحتوي على مؤشرات من ذاكرة أصلية غير مهيأة في بيانات قناة ألفا. من خلال مطابقة أربعة مؤشرات مسربة مع ملف تعريف معروف للمكدس الأصلي، استعاد الاستغلال عنوان القاعدة العشوائي لـ libvips.
• تحويل التجاوز إلى كتابة مقيدة على عنوان عشوائي. أفسد تجاوز الـ 58 بايت البايتين السفليين لمؤشر الطفل الأيمن في عقدة شجرة حمراء-سوداء std::map يستخدمها libheif لتخزين بيانات وصفية لمستوى الصورة. أدى هذا إلى إعادة توجيه البحث عن قناة Cr إلى عقدة خريطة مزورة تحتوي على واصف ImagePlane متحكم به. حدد الواصف عنوان الوجهة لنسخ البكسل اللاحقة، مما أنشأ بدائية كتابة-ماذا-أين مقيدة.
• اختطاف التنفيذ عبر GOT. استخدم الاستغلال كتابة البكسل المتحكم بها لاستبدال memcpy@GOT بعنوان روتين g_module_open_full الداخلي في libvips. نقل الاستدعاء التالي عبر نفس إدخال GOT التنفيذ إلى ذلك الروتين، الذي يغلّف dlopen ويمكنه تحميل مكتبة مشتركة أصلية.
• تنفيذ أمر. كان المهاجم قد حمّل سابقًا مكتبة مشتركة ELF متنكرة كصورة باسم uploads/x.jpg. عندما فتح محمّل GModule هذا الملف، نفّذ مُنشئ المكتبة /usr/bin/id وأعاد مخرجاته إلى مستمع المهاجم.
لم يتطلب الاستغلال سلسلة ROP أو معرفة عنوان ملف Node.js التنفيذي العشوائي. تم حساب عنوان الكود المطلوب من قاعدة libvips المسربة.نتائج التجربة
تم اختبار PoC ضد تطبيق معرّض للخطر بشكل متعمد باستخدام:
• Next.js: 15.5.23
• sharp: 0.34.4
• libvips: 8.17.2
• libheif: 1.20.2
استخدمت بيئتا اختبار Linux x86-64 إصدارين مختلفين من Node.js مع تمكين PIE: الإصدار 25.8.1 على Ubuntu والإصدار 20.19.2 على Debian 13.
نجحت جميع محاولات الاستغلال العشرين: عشر ضد عمليات Ubuntu جديدة وعشر ضد عمليات Debian جديدة. في كل تشغيل، جعل ASLR عنوان قاعدة
libvips عشوائيًا، واستعاد الاستغلال العنوان المقابل عبر تسريب معلومات PNG.القيود
تتطلب السلسلة الموضحة مسارًا معرّضًا لمعالجة AVIF، والوصول إلى مخرجات الصورة المحولة، وآلية تحميل تحافظ على مكتبة مشتركة ELF يتحكم بها المهاجم في مسار متوقع يمكن للمحمّل الأصلي الوصول إليه.
يعتمد الاستغلال أيضًا على إصدارات مكتبات أصلية محددة، وسلوك المخصص، وتخطيطات الذاكرة. قد تتطلب إصدارات أو تكوينات مختلفة ملف تعريف استغلال جديدًا يتم التحقق منه بشكل مستقل.
توضح هذه النتائج تنفيذ التعليمات عن بعد تحت ظروف التطبيق الموثقة، وليس استغلالًا عالميًا لكل نشر Next.js أو sharp.
التخفيف
توصي Fortbridge بترقية libheif إلى الإصدار 1.22.0 أو أحدث وضمان تضمين المكتبة المصححة فعليًا في التبعيات الأصلية التي يحمّلها
sharp وlibvips. قد يؤدي تحديث حزمة JavaScript العلوية فقط إلى ترك مكتبة معرّضة للخطر مضمّنة في مكانها.
تشمل الدفاعات الإضافية التحقق من الملفات المرفوعة من خلال محتواها الفعلي، وإنشاء أسماء ملفات من جانب الخادم، وإبقاء التحميلات خارج دليل عمل التطبيق، ومعالجة الصور في عمال معزولين بأقل صلاحيات.الثغرات
الباحثون
المنتجات
المزيد