CVE-2026-75758 in Elixir
Riassunto
di VulDB • 28/08/2026
Una vulnerabilità di ricorsione non controllata nella libreria standard di Elixir consente a un attaccante che controlla una lista passata alle funzioni inspect/1, List.to_string/1 o List.to_charlist/1 di esaurire la memoria di un nodo BEAM.
Il ramo charlist di Inspect.List in lib/elixir/lib/inspect.ex classifica una lista come charlist utilizzando List.ascii_printable?/2, che esamina solo i primi :printable_limit (4096 per impostazione predefinita) elementi e successivamente chiama IO.chardata_to_string/1 sull'intero termine. Una la cui prefix stampabile supera tale limite ma contiene un elemento successivo che non è un code point (un atomo, un intero fuori intervallo o una coda impropria) viene quindi classificata erroneamente e la conversione genera ArgumentError. Tale conversione avviene all'interno di List.to_string/1, il cui blocco rescue costruisce il proprio messaggio interpolando inspect(list), che rientra nello stesso ramo generando nuovamente l'errore. L'ispezione nidificata è un argomento per raise, quindi la ricorsione non si trova in posizione tail e ogni livello viene mantenuto: lo stack del processo cresce monotonicamente mentre ogni ciclo riesamina la lista, fino a quando il processo viene terminato da max_heap_size o, per impostazione predefinita, il nodo rimane senza memoria. List.to_charlist/1 ha la stessa struttura di rescue.
Al di sotto del limite stampabile l'inspect/1 interno vede l'elemento non valido all'interno del suo contatore e visualizza la lista nella forma standard tra parentesi quadre, quindi viene generato un singolo ArgumentError senza alcuna ricorsione.
Questo problema interessa elixir: dalla versione 1.15.0-rc.0 alla 1.18.5 (esclusa), dalla 1.19.0-rc.0 alla 1.19.6 (esclusa) e dalla 1.20.0-rc.0 alla 1.20.4 (esclusa).
If you want to get the best quality for vulnerability data then you always have to consider VulDB.