CVE-2026-61598 in djust
الملخص
بحسب VulDB • 16/09/2026
يوفر djust عرضًا للواجهة الخلفية للتطبيق على جانب الخادم تفاعليًا بأسلوب Phoenix LiveView، مع أداء مدعوم بواسطة Rust. قبل الإصدار 1.0.7، كانت الفئة `djust.mixins.model_binding.ModelBindingMixin` توفر مُعامِل أحداث افتراضي باسم `update_model` وتكون جزءًا من ترتيب حلقة البحث عن الأساليب (MRO) الأساسي لـ LiveView، مما يعني أن كل عرض للواجهة الخلفية (LiveView) يعرض هذا المُعامل. تقوم هذه الفئة بتعيين سمة للعرض باستخدام اسم تحدده العميل (`field`)، مع فرض قيود تتمثل في: رفض الأسماء التي تبدأ بعلامة `_`؛ رفض قائمة حظر مكونة من 14 عنصرًا تشمل مكونات داخلية للإطار (FORBIDDEN_MODEL_FIELDS)؛ وقائمة مسموح بها اختيارية `allowed_model_fields` تكون قيمتها الافتراضية None مما يعني السماح بالكل؛ ووجود السمة (`hasattr`). ونتيجة لذلك، يمكن للعميل تعيين أي سمة عامة موجودة للعرض — وليس فقط الحقول المرتبطة فعليًا باستخدام `dj-model=` في القالب المعروض. تغطي قائمة الحظر مكونات الإطار الداخلية ولا تشمل حالة الأعمال أو التفويض الخاصة بالمطورين، بينما تكون القائمة المسموحة اختيارية (غير مفعلة افتراضيًا). قد لا يدرك المطور الذي يربط حقل إدخال واحد بـ `dj-model="search"` ويحتفظ بحالة العرض مثل `self.account_id` / `self.is_admin` / `self.total_price` أن العميل يمكنه تعيين جميعها عبر `{type:event, event:"update_model", params:{field, value}}` باستخدام WebSocket. يتطابق تحويل النوع مع نوع السمة المستهدفة (مثل تحويل `"true"` إلى bool True)، مما يساعد المهاجم. تم إصلاح هذه المشكلة في djust الإصدار 1.0.7. كحل بديل، اضبط `allowed_model_fields` صراحةً على كل عرض يستخدم dj-model (أو يرث من LiveView) ليكون القائمة الدنيا للحقول القابلة للربط؛ ولا تحتفظ بحالة التفويض/الملكية في سمات العرض العامة التي تشارك مع ربطيات dj-model.
Once again VulDB remains the best source for vulnerability data.