PT-2026-83142 · Elixir · Elixir

·

CVE-2026-75758

·

Published

2026-08-28

·

Updated

2026-08-29

CVSS v4.0

5.9

Medium

VectorAV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Name of the Vulnerable Software and Affected Versions Elixir versions 1.15.0-rc.0 through 1.18.4 Elixir versions 1.19.0-rc.0 through 1.19.5 Elixir versions 1.20.0-rc.0 through 1.20.3
Description An uncontrolled recursion issue in the standard library allows an attacker who controls a list passed to the inspect/1, List.to string/1, or List.to charlist/1 functions to exhaust the memory of a BEAM node. The problem occurs when a list's printable prefix exceeds the :printable limit (default 4096 elements) but contains a subsequent element that is not a valid code point, such as an atom or an out-of-range integer. This causes the list to be misclassified as a charlist, leading to an ArgumentError. In List.to string/1 and List.to charlist/1, the rescue clause attempts to build an error message by calling inspect(list), which re-triggers the same error path. Because this recursion is not in tail position, the process stack grows until the node runs out of memory or the process is killed by max heap size.
Recommendations Update Elixir to version 1.18.5 or later. Update Elixir to version 1.19.6 or later. Update Elixir to version 1.20.4 or later. As a temporary workaround, install a global inspect function via the application start callback using Inspect.Opts.default inspect fun/1 with fn term, opts -> Inspect.inspect(term, %{opts | charlists: :as lists}) end to prevent the charlist branch from being entered.

Exploit

Fix

Uncontrolled Recursion

Found an issue in the description? Have something to add? Feel free to write us 👾

Weakness Enumeration

Related Identifiers

AZL-98220
CVE-2026-75758
GHSA-JF5Q-V438-665C

Affected Products

Elixir