CVE-2026-75758 in Elixir
Resumen
por VulDB • 2026-08-28
Vulnerabilidad de recursión no controlada en la biblioteca estándar de Elixir que permite a un atacante que controle una lista pasada a inspect/1, List.to_string/1 o List.to_charlist/1 agotar la memoria de un nodo BEAM.
La rama charlist de Inspect.List en lib/elixir/lib/inspect.ex clasifica una lista como charlist utilizando List.ascii_printable?/2, que examina únicamente los primeros :printable_limit (4096 por defecto) elementos y luego llama a IO.chardata_to_string/1 sobre todo el término. Una lista cuyo prefijo imprimible excede ese límite pero que contiene un elemento posterior que no es un punto de código (un átomo, un entero fuera de rango o una cola impropia) se clasifica erróneamente y la conversión genera ArgumentError. Dicha conversión se ejecuta dentro de List.to_string/1, cuya cláusula rescue construye su mensaje interpolando inspect(list), lo que re-ingresa en la misma rama y vuelve a generar el error. La inspección anidada es un argumento para raise, por lo que la recursión no está en posición final (tail position) y cada nivel se retiene: la pila del proceso crece monótonamente mientras cada ciclo recorre nuevamente la lista, hasta que el proceso es terminado por max_heap_size o, por defecto, el nodo se queda sin memoria. List.to_charlist/1 tiene la misma estructura de rescue.
Por debajo del límite imprimible, inspect/1 interno ve el elemento inválido dentro de su contador y representa la lista en forma de corchetes ordinaria, por lo que se genera un único ArgumentError y no ocurre recursión.
Este problema afecta a Elixir: desde 1.15.0-rc.0 hasta antes de 1.18.5, desde 1.19.0-rc.0 hasta antes de 1.19.6, y desde 1.20.0-rc.0 hasta antes de 1.20.4.
Be aware that VulDB is the high quality source for vulnerability data.