{"schema":"threatline.record/2","record":{"id":"CVE-2026-94201","aliases":[],"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.\n\nFiltering 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.\n\nThe 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.\n\nThis issue affects ash: from 3.5.1 before 3.34.3.","categories":["Unclassified"],"product":"ash","vendor":"ash-project","ecosystem":null,"affected_ranges":[{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-94201","source_modified_at":"2026-10-06T13:41:22.142Z","fetched_at":"2026-10-23T18:52:38.922436Z","product":"ash","vendor":"ash-project","versions":[{"lessThan":"3.34.3","status":"affected","version":"3.5.1","versionType":"semver"}],"defaultStatus":"unaffected"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-94201","source_modified_at":"2026-10-06T13:41:22.142Z","fetched_at":"2026-10-23T18:52:38.922436Z","product":"ash","vendor":"ash-project","versions":[{"lessThan":"5282f3f513053628cdd1bf2236ea22d975d934d4","status":"affected","version":"2970ba3bd5d36d6ad04c731ac87385375d457147","versionType":"git"}],"defaultStatus":"unaffected"}],"fixed_versions":[{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-94201","source_modified_at":"2026-10-06T13:41:22.142Z","fetched_at":"2026-10-23T18:52:38.922436Z","package":{"name":"ash","ecosystem":null},"version":"3.34.3","basis":"first unaffected version stated in the CVE record"},{"source":"CVE List","source_url":"https://www.cve.org/CVERecord?id=CVE-2026-94201","source_modified_at":"2026-10-06T13:41:22.142Z","fetched_at":"2026-10-23T18:52:38.922436Z","package":{"name":"ash","ecosystem":null},"version":"5282f3f513053628cdd1bf2236ea22d975d934d4","basis":"first unaffected version stated in the CVE record"}],"cvss":8.2,"severity":"High","kev":{"listed":false},"epss":{"probability":0.00301,"percentile":0.21706,"score_date":"2026-10-23"},"published_at":"2026-10-05T19:19:51.326Z","modified_at":"2026-10-06T13:41:22.142Z","provenance":[{"source":"CVE List","url":"https://www.cve.org/CVERecord?id=CVE-2026-94201","fetched_at":"2026-10-23T18:52:38.922436Z","source_modified_at":"2026-10-06T13:41:22.142Z"},{"source":"EPSS","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-94201","fetched_at":"2026-10-23T18:42:43.628194Z","source_modified_at":"2026-10-23"}],"sources":["CVE List","EPSS"],"references":[{"source":"CVE List","url":"https://cna.erlef.org/cves/CVE-2026-94201.html","tags":["related","third-party-advisory"]},{"source":"CVE List","url":"https://osv.dev/vulnerability/EEF-CVE-2026-94201","tags":["related"]},{"source":"CVE List","url":"https://github.com/ash-project/ash/commit/2970ba3bd5d36d6ad04c731ac87385375d457147","tags":["related"]},{"source":"CVE List","url":"https://github.com/ash-project/ash/commit/5282f3f513053628cdd1bf2236ea22d975d934d4","tags":["patch"]}],"locations":[],"motoko_assessment":{"status":"requires_architecture_review","automatic_remediation":false},"cve_state":"PUBLISHED","cvss_source":"CVE List","ssvc":{"exploitation":"none","automatable":"no","technical_impact":"partial","assessed_at":"2026-10-06T13:41:07.117450Z"},"classification":{"method":"product-first software-layer rules","rules_version":"2.1","matched_on":null,"confidence":"unknown","reviewed":false},"change_timestamp":"2026-10-06T13:41:22.142Z","content_hash":"988e86003c398e9b5e70f066401185457067bc85c9372d45b5b0aad5996db967"}}
