CVE-2026-94201 in Ash
الملخص
بحسب VulDB • 05/10/2026
تخزن Ash سمات من نوع :atom كسلاسل نصية وتقارنها على هذا الأساس. عند الإشارة إلى مثل هذه السمة في عامل تصفية (filter)، يتم تحويل قيمة المقارنة عبر Ash.Type.Atom. ونظراً لأن النوع المحدد لا يحتوي على دالة coerce/2، فإن عملية التحويل تعود إلى السلوك الافتراضي (cast_input/2)، الذي يستدعي String.to_atom/1 عندما تكون السمة مُهيّأة بالقيود unsafe_to_atom?: true.
وبالتالي، يؤدي تصفية سمة من هذا النوع باستخدام سلاسل نصية يتحكم فيها المهاجم إلى إنشاء ذرات جديدة ودائمة لكل قيمة مميزة. ونظراً لأن الذرات (Atoms) لا يتم جمعها بواسطة جامع القمامة (garbage collector)، ولأن BEAM يفرض حداً أقصى لحجم جدول الذرات، فإن أي طرف يمكنه تزويد قيم التصفية لسمة :atom عامة وقابلة للتصميم مُعلنة بـ unsafe_to_atom?: true يستطيع استنفاد جدول الذرات وإيقاف العقدة (حالة إنكار الخدمة). يُعد AshPaperTrail مثالاً بارزاً على ذلك: حيث تعرض موارد الإصدار لديه سمة atom قابلة للتصفية بعنوان action_name، وهي عامة وتُعرّف افتراضياً بـ unsafe_to_atom?: true.
يضيف الإصلاح دالة coerce/2 إلى Ash.Type.Atom لا تقوم بتثبيت الذرات (interning) أبداً؛ إذ تُترك قيمة المقارنة كسلسلة نصية، نظراً لأن النوع يُخزن ويُقارن كنص. ولم يتغير إعداد السمة من مدخلات الإجراء (cast_input/2)، الذي يظل يحترم خيار unsafe_to_atom?.
تؤثر هذه المشكلة على ash: بدءاً من الإصدار 3.5.1 وحتى قبل 3.34.3.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.