ثغرة حرجة في Ruby on Rails بدرجة 9.5 تنشأ من إعداد افتراضي في libvips
الثغرة لم تكن في سطر كتبه أحد، بل في وضع أمان اختياري تركته مكتبة معطلًا وبنى إطار العمل فوقها دون تفعيله، والإعدادات الافتراضية نادرًا ما تُراجع كما يُراجع الكود.
نشر فريق Ruby on Rails في 29 يوليو 2026 تنبيهًا أمنيًا للثغرة CVE-2026-66066، التي أطلق عليها فريق Ethiack الذي اكتشفها اسم KindaRails2Shell. وتبلغ درجتها 9.5 على مقياس CVSSv4. وتتأثر بها التطبيقات التي تستخدم Active Storage مع مكتبة libvips لمعالجة الصور، وتقبل رفع صور من مستخدمين غير موثوقين.
ولا تعود الثغرة إلى خطأ برمجي بالمعنى المعتاد، بل إلى إعداد افتراضي. فمكتبة libvips تفتح صيغ صور كثيرة، بعضها يمكن أن يشير إلى ملفات موجودة على الخادم نفسه. وللمكتبة وضع يعطّل التعامل مع الصيغ غير الموثوقة يسمى block untrusted، لكنه اختياري وغير مفعّل افتراضيًا، ولم تفعّله Rails.
والنتيجة أن ملفًا مرفوعًا على أنه صورة قد يدفع الخادم إلى قراءة ملفاته الداخلية وإعادتها. وخطورة ذلك في طبيعة ما يمكن قراءته: قيمة secret_key_base والـ master key وبيانات الاتصال بقاعدة البيانات ومفاتيح التخزين السحابي والـ API tokens. ومع مفاتيح كهذه، قد تتحول قراءة الملفات إلى تنفيذ كود على الخادم.
وبحسب الفريق الذي اكتشف الثغرة، يتجاوز نطاق التأثير 500,000 موقع. وحتى 30 يوليو لم يُسجَّل استغلال مؤكد لها.
وصدرت النسخ المصححة 7.2.3.2 و8.0.5.1 و8.1.3.1. ولمن لا يستطيع التحديث فورًا، يوجد حل مؤقت هو تفعيل المتغير VIPS_BLOCK_UNTRUSTED في libvips بدءًا من النسخة 8.13، أو استدعاء Vips.block_untrusted(true) من ملف initializer في ruby-vips بدءًا من النسخة 2.2.1.
وتكشف الحالة جانبًا يتجاوز Rails. ففرق التطوير تراجع الكود الذي تكتبه سطرًا سطرًا، بينما تمر الإعدادات الافتراضية للمكتبات إلى بيئة الإنتاج كما هي. وهنا كان الخلل في وضع أمان موجود فعلًا، لكنه بقي معطلًا عبر طبقتين من البرمجيات دون أن تفعّله أي منهما.
المصادر
من عدد الاثنين 20 صفر - 3 أغسطس