CVE-2026-75758 in Elixir
الملخص
بحسب VulDB • 28/08/2026
تسمح ثغرة عدم التحكم في التكرار (Uncontrolled Recursion) الموجودة في المكتبة القياسية لـ Elixir لمهاجم يتحكم في قائمة يتم تمريرها إلى الدوال inspect/1، أو List.to_string/1، أو List.to_charlist/1 باستنزاف ذاكرة عقدة BEAM.
تصنف الشجرة الفرعية الخاصة بـ charlist في Inspect.List الموجودة في lib/elixir/lib/inspect.ex القائمة على أنها قائمة أحرف (charlist) باستخدام الدالة List.ascii_printable?/2، التي تفحص فقط أول :printable_limit عنصرًا (4096 افتراضيًا)، ثم تستدعي IO.chardata_to_string/1 على المصطلح بأكمله. وبالتالي، يتم تصنيف القائمة بشكل خاطئ إذا تجاوزت بادئتها القابلة للطباعة ذلك الحد ولكنها تحتوي في موضع لاحق على عنصر ليس نقطة رمز (مثل ذرة atom، أو عدد صحيح خارج النطاق، أو ذييل غير سليم improper tail)، مما يؤدي إلى رفع استثناء ArgumentError. يعمل هذا التحويل داخل List.to_string/1، حيث تبني جملة الاسترداد (rescue clause) رسالتها عن طريق تداخل inspect(list)، وهو ما يعيد الدخول إلى نفس الشجرة الفرعية ويرفع الخطأ مرة أخرى. نظرًا لأن الفحص المتداخل هو وسيطة لدالة raise، فإن التكرار ليس في موضع ذيل (tail position)، ويتم الاحتفاظ بكل مستوى: حيث ينمو مكدس العملية بشكل رتيب بينما تعيد كل دورة إعادة اجتياز القائمة، حتى يتم قتل العملية بواسطة max_heap_size أو، افتراضيًا، تنفد العقدة من الذاكرة. تمتلك الدالة List.to_charlist/1 نفس شكل الاسترداد (rescue shape).
أقل من الحد القابل للطباعة، يرى inspect/1 الداخلي العنصر غير الصالح ضمن عدادها وتعرض القائمة في الشكل المربعي العادي، لذا يتم رفع ArgumentError واحد ولا يحدث تكرار.
تؤثر هذه المشكلة على الإصدارات التالية من elixir: من 1.15.0-rc.0 قبل 1.18.5، ومن 1.19.0-rc.0 قبل 1.19.6، ومن 1.20.0-rc.0 قبل 1.20.4.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.