CVE-2026-75758 in Elixir
Résumé
par VulDB • 28/08/2026
Vulnérabilité de récursion non contrôlée dans la bibliothèque standard d'Elixir permettant à un attaquant qui contrôle une liste transmise aux fonctions inspect/1, List.to_string/1 ou List.to_charlist/1 d'épuiser la mémoire du nœud BEAM.
La branche charlist de Inspect.List dans lib/elixir/lib/inspect.ex classe une liste comme étant une charlist en utilisant List.ascii_printable?/2, qui examine uniquement les premiers :printable_limit (4096 par défaut) éléments, puis appelle IO.chardata_to_string/1 sur l'ensemble du terme. Une liste dont le préfixe imprimable dépasse cette limite mais contient un élément ultérieur qui n'est pas un point de code (un atome, un entier hors plage ou une queue impropre) est donc mal classée et la conversion génère une erreur ArgumentError. Cette conversion s'exécute à l'intérieur de List.to_string/1, dont la clause rescue construit son message en interpolant inspect(list), ce qui réentre dans la même branche et soulève à nouveau l'erreur. L'inspection imbriquée est un argument pour raise, donc la récursion n'est pas en position terminale (tail call) et chaque niveau est conservé : la pile du processus croît de manière monotone tandis que chaque cycle parcourt à nouveau la liste, jusqu'à ce que le processus soit tué par max_heap_size ou, par défaut, que le nœud manque de mémoire. List.to_charlist/1 présente la même structure rescue.
En dessous de la limite imprimable, l'inspect/1 interne voit l'élément invalide dans son compteur et affiche la liste sous forme standard entre crochets, donc une seule ArgumentError est levée et aucune récursion ne se produit.
Ce problème affecte elixir : des versions 1.15.0-rc.0 avant 1.18.5, de 1.19.0-rc.0 avant 1.19.6, et de 1.20.0-rc.0 avant 1.20.4.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.