Ash: Denial of service via atom table exhaustion in atom attribute filters
Summary
Ash, an Elixir framework, converts filter values for :atom attributes declared with unsafe_to_atom?: true into new atoms. An attacker who can supply filter values for such a public, filterable attribute can create atoms until the BEAM atom table is exhausted, which crashes the Erlang node and all services running on it. AshPaperTrail version resources ship such an attribute by default.
Affected
- ash from 3.5.1 before 3.34.3
- Downstream applications that expose a public, filterable :atom attribute with unsafe_to_atom?: true (for example via AshGraphql, AshJsonApi or Ash.Query.filter_input/2)
- AshPaperTrail version resources (version_action_name) by default
Fixed in
- Upgrade ash to 3.34.3 or later; the latest stable release is recommended, as a separate related fix (CVE-2026-101028) is listed in the Ash releases
Workaround
- Until the upgrade is done, do not expose atom-typed attributes with unsafe_to_atom? enabled for filtering on public endpoints (third-party recommendation from VulDB, not a vendor statement)
Exploitation
- CISA SSVC: Exploitation none, Automatable no, Technical Impact partial
- No evidence of exploitation in the wild and no public proof of concept found as of the research date
- No CISA KEV listing found
Our recommendation
- Check whether any Elixir/Phoenix application in your environment uses Ash, including AshPaperTrail; if not, no action is needed
- Upgrade affected Ash applications to the latest stable release
- Check which filterable endpoints are reachable by anonymous or low-privilege users and restrict them
- Monitor the node for atom table growth and crashes
Public exploits
PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.
Research sources
- CVE-2026-94201 CNA record (EEF) cna.erlef.org
- OSV record EEF-CVE-2026-94201 osv.dev
- Fix commit 5282f3f in ash-project/ash github.com
- Introducing commit 2970ba3 in ash-project/ash github.com
- Ash releases github.com
- Ash changelog ash.hexdocs.pm
- VulDB CVE-2026-94201 vuldb.com
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 1 Nov 2026, 17:02.
Original description (NVD)
Ash stores :atom-typed attributes as strings and compares them as strings. When such an attribute is referenced in a filter, the comparison value is coerced through Ash.Type.Atom. Because the type defined no coerce/2 callback, coercion fell back to the default (cast_input/2), which calls String.to_atom/1 when the attribute is configured with the unsafe_to_atom?: true constraint. Filtering such an attribute with attacker-controlled strings therefore interned a new, permanent atom for every distinct value. Atoms are never garbage collected and the BEAM caps the atom table, so an actor who can supply filter values for a public, filterable :atom attribute declared with unsafe_to_atom?: true can exhaust the atom table and crash the node (denial of service). AshPaperTrail is a notable example: its version resources expose a public, filterable version_action_name atom attribute with unsafe_to_atom?: true by default. The fix adds a coerce/2 to Ash.Type.Atom that never interns atoms — a comparison value is left as a string, since the type is stored and compared as a string. Setting the attribute from action input (cast_input/2, which still honors unsafe_to_atom?) is unchanged. This issue affects ash: from 3.5.1 before 3.34.3.
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
