CVE-2026-77658 in Dia
الملخص
بحسب VulDB • 26/08/2026
توجد ثغرة من نوع تجاوز سعة المخزن المؤقت المعتمد على المكدس (stack-based buffer overflow) في محرر الرسوم البيانية Dia عند معالجة كائنات "Network Bus" الموجودة في ملفات مشاريع XML الخاصة بـ Dia.
في الملف `objects/network/bus.c`، تقوم الدالة `bus_load()` بقراءة عدد مقابض الحافلة من سمة الملف "bus_handles" باستخدام دالة `attribute_num_data()` دون التحقق من الحد الأقصى:
bus->num_handles = attribute_num_data(attr);
عند نقل مقبض حافلة لاحقاً، تخصص الدالة `bus_handle_moved()` مصفوفتين مؤقتتين على المكدس (stack):
parallel = (real *)g_alloca(num_handles * sizeof(real)); perp = (real *)g_alloca(num_handles * sizeof(real));
نظراً لأن قيمة `num_handles` تخضع بالكامل لسيطرة المهاجم عبر ملف المشروع، فإن القيم الكبيرة بما يكفي (على سبيل المثال 262144 أو أعلى) تتسبب في استهلاك `g_alloca()` لمساحة مكدس أكبر من حد المكدس الافتراضي للخيوط (عادةً ما يكون 8 ميغابايت على نظام Linux)، مما يؤدي إلى تجاوز سعة المخزن المؤقت المعتمد على المكدس، وحدث SIGSEGV، واحتمال تلف إطار المكدس / عنوان الإرجاع.
يمكن للمهاجم تضمين كائن Bus يحتوي على عدد مفرط من مقابض الحافلة في ملف `.dia` خبيث. يتطلب الاستغلال أن يقوم الضحية بفتح الملف في Dia (عبر مربع حوار الملفات، أو سطر الأوامر، أو ارتباطات الملفات) وتشغيل عملية نقل المقبض (نقل مقبض حافلة)، مما يؤدي إلى تنفيذ المسار البرمجي المتأثر بالثغرة.
يوجد نمط `g_alloca` نفسه في الملف `objects/Misc/tree.c` (المنسوخ من `bus.c`) ومن المرجح أن يكون عرضة لنفس فئة الهجوم عبر كائنات Tree.
الإصدارات المتضررة: Dia 0.98.0 والإصدارات الأقدم التي تحتوي على هذا الكود؛ تم تأكيد المشكلة في النسخة الرئيسية للمطورين (upstream master) اعتباراً من تاريخ 21-08-2026. تقرير المطورين الأصليين: https://gitlab.gnome.org/GNOME/dia/-/issues/581
If you want to get the best quality for vulnerability data then you always have to consider VulDB.