chore(deps): update dependency ash to v3.34.6 [security] - autoclosed #574
No reviewers
Labels
No labels
bug
duplicate
enhancement
help wanted
high priority
invalid
L
low priority
M
medium priority
needs refinement
optional
question
S
security
technical improvement
UX Improvement
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
local-it/mitgliederverwaltung!574
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "renovate/hex-ash-vulnerability"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR contains the following updates:
3.34.1→3.34.6Filtering an :atom attribute with unsafe_to_atom? can exhaust the BEAM atom table in Ash
CVE-2026-94201 / EEF-CVE-2026-94201
More information
Details
Summary
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 throughAsh.Type.Atom. Because the type defined nocoerce/2callback, coercion fell back to the default (cast_input/2), which callsString.to_atom/1when the attribute is configured with theunsafe_to_atom?: trueconstraint.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
:atomattribute declared withunsafe_to_atom?: truecan exhaust the atom table and crash the node (denial of service). AshPaperTrail is a notable example: its version resources expose a public, filterableversion_action_nameatom attribute withunsafe_to_atom?: trueby default.The fix adds a
coerce/2toAsh.Type.Atomthat 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 honorsunsafe_to_atom?) is unchanged.This issue affects ash: from 3.5.1 before 3.34.3.
Configurations
Reachable only when an application exposes a public, filterable
:atomattribute declared with theunsafe_to_atom?: trueconstraint, and an actor can supply filter values for it (for example through AshGraphql, AshJsonApi, orAsh.Query.filter_input/2). AshPaperTrail's version resources ship such an attribute (version_action_name) by default.Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:NReferences
This data is provided by OSV.
Ash.count, Ash.exists and Ash.aggregate skip related resources' read policies in filters and sorts
CVE-2026-101028 / EEF-CVE-2026-101028 / GHSA-xj24-8f5c-pp5p
More information
Details
Summary
Incorrect Authorization vulnerability in ash-project ash allows an actor to infer data in related records they cannot read via
Ash.count/2,Ash.exists/2andAsh.aggregate/3.Ash.Actions.Aggregate.run/4(lib/ash/actions/aggregate.ex) applied only the root resource's read policy before running the aggregate query. The read path also applies each related resource's read policy to filter and sort references that cross a relationship, directly (for examplecomments.body) or through an aggregate over one, but the aggregate path skipped that step. A caller whose filter or sort reaches these functions, for example throughAsh.Query.filter_input/2, an ash_lua script, or an AshAi tool offering count or exists results, can test conditions against related rows hidden from them and recover their existence and attribute values one query at a time.Ash.read/2and its page counts are not affected.This issue affects ash: from 2.6.0 before 3.34.6.
Configurations
Reachable only when an application passes caller-supplied filters or sorts that cross a relationship into
Ash.count/2,Ash.exists/2orAsh.aggregate/3(directly, through ash_lua read operations, or through AshAi count, exists or aggregate result types), and a related resource's read policy is stricter than the root resource's.Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by OSV.
Release Notes
ash-project/ash (ash)
v3.34.6Compare Source
Bug Fixes:
[security] apply related resources' read policies to filters and sorts in
Ash.count/2,Ash.exists/2andAsh.aggregate/3(CVE-2026-101028, GHSA-xj24-8f5c-pp5p) by @zachdanielcorrect type casting in operators by @zachdaniel
match embedded resource structs in equal? without expanding them (#3006) by Moxley Stratton (#3006)
v3.34.5Compare Source
Improvements:
Bug Fixes:
field policy related filter fix (#3002) by Moxley Stratton (#3002)
refuse a read as_of that names no instant, rather than raising FunctionClauseError (#2999) by @matt-beanland (#2999)
hold a temporal write's as_of to its period's type and constraints (#2997) by @matt-beanland (#2997)
make every temporal write as of one instant Ash resolves (#2995) by @matt-beanland (#2995)
compare embedded resources attribute by attribute by @zachdaniel (#2993)
compare embedded resources attribute by attribute by @padde (#2993)
v3.34.4Compare Source
Improvements:
runcompile time dependencies by @zachdanielv3.34.3Compare Source
Bug Fixes:
Fixes CVE-2026-94201
track calculation nullability through dynamic calculations by @zachdaniel
handle defaults in aggregate nullability for manifests by @zachdaniel
v3.34.2Compare Source
Performance Improvements:
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by Mend Renovate.
77f3da603f7655a432be7655a432be19f9f95331chore(deps): update dependency ash to v3.34.3 [security]to chore(deps): update dependency ash to v3.34.6 [security]19f9f95331de6e687ad6de6e687ad60534411e4dchore(deps): update dependency ash to v3.34.6 [security]to chore(deps): update dependency ash to v3.34.6 [security] - autoclosedPull request closed