CVE-2026-94201

Source
https://cve.org/CVERecord?id=CVE-2026-94201
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-94201.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-94201
Aliases
Published
2026-10-05T19:19:51Z
Modified
2026-10-10T02:47:31Z
Severity
  • 8.2 (High) CVSS_V4 - CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N CVSS Calculator
Summary
Filtering an :atom attribute with unsafe_to_atom? can exhaust the BEAM atom table in Ash
Details

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.

Database specific
{
    "cna_assigner": "EEF",
    "cwe_ids": [
        "CWE-770"
    ],
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/94xxx/CVE-2026-94201.json"
}
References

Affected packages

Git / github.com/ash-project/ash

Affected ranges

Type
GIT
Repo
https://github.com/ash-project/ash
Events
Database specific
Show details
{
    "extracted_events": [
        {
            "introduced": "3.5.1"
        },
        {
            "fixed": "3.34.3"
        }
    ],
    "source": "AFFECTED_FIELD"
}

Affected versions

v3.*
v3.10.0
v3.10.1
v3.11.0
v3.11.1
v3.11.2
v3.11.3
v3.12.0
v3.13.0
v3.13.1
v3.13.2
v3.14.0
v3.14.1
v3.15.0
v3.16.0
v3.17.0
v3.17.1
v3.18.0
v3.19.0
v3.19.1
v3.19.2
v3.19.3
v3.20.0
v3.21.0
v3.21.1
v3.21.2
v3.21.3
v3.22.0
v3.22.1
v3.22.2
v3.23.0
v3.23.1
v3.24.0
v3.24.1
v3.24.2
v3.24.3
v3.24.4
v3.24.5
v3.24.6
v3.24.7
v3.25.0
v3.25.1
v3.25.2
v3.26.0
v3.27.0
v3.27.1
v3.27.2
v3.27.3
v3.27.4
v3.27.6
v3.27.7
v3.27.8
v3.28.0
v3.29.0
v3.29.1
v3.29.2
v3.29.3
v3.30.0
v3.30.1
v3.31.0
v3.31.1
v3.31.2
v3.31.3
v3.32.1
v3.32.2
v3.32.3
v3.33.1
v3.33.10
v3.33.11
v3.33.2
v3.33.3
v3.33.4
v3.33.5
v3.33.6
v3.33.7
v3.33.9
v3.34.0
v3.34.1
v3.34.2
v3.5.1
v3.5.10
v3.5.11
v3.5.12
v3.5.13
v3.5.14
v3.5.15
v3.5.16
v3.5.17
v3.5.18
v3.5.19
v3.5.2
v3.5.21
v3.5.22
v3.5.23
v3.5.24
v3.5.25
v3.5.26
v3.5.27
v3.5.28
v3.5.29
v3.5.3
v3.5.30
v3.5.31
v3.5.32
v3.5.33
v3.5.35
v3.5.36
v3.5.37
v3.5.38
v3.5.39
v3.5.4
v3.5.41
v3.5.42
v3.5.43
v3.5.5
v3.5.6
v3.5.7
v3.5.8
v3.6.0
v3.6.1
v3.6.2
v3.6.3
v3.7.0
v3.7.1
v3.7.2
v3.7.3
v3.7.4
v3.7.5
v3.7.6
v3.8.0
v3.9.0

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-94201.json"