Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessGain application actor access
-
DeliveryCall Ash.update_many/4 with authorize?:true
-
ExploitAtomic strategy selected without authorization check
-
ExecutionSQL MERGE issued without policy row filter
-
ImpactUnauthorized records updated across tenant or policy boundary
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires all of the following conditions simultaneously: (1) ash versions 3.29.0 to 3.32.1 are in use; (2) the application calls |
| Impact | The CVSS 4.0 base score of 5.9 with AV:L/AC:L/AT:P/PR:N reflects medium severity, but AT:P is the critical limiting signal: exploitation requires the application to call |
| Exploit ScenarioDerived | A tenant actor in a multi-tenant Ash application calls |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 01, 2026
Authorization policy bypass in Ash (Elixir framework) versions 3.29.0-3.32.1 permits any application actor to modify records protected by resource policies when using the atomic update path. The root cause is that Ash.Actions.Update.UpdateMany selected the atomic strategy under authorize?: true without invoking the authorization layer, causing the resulting SQL MERGE to update all primary-key-matched rows without applying policy filters. No public exploit code has been identified at time of analysis, but the published patch commit and GHSA advisory provide sufficient detail to reconstruct the bypass; the fix is vendor-confirmed in version 3.32.2.
RemediationAI
Upgrade ash to version 3.32.2 or later, which is the vendor-confirmed fixed release documented in the security advisory at https://github.com/ash-project/ash/security/advisories/GHSA-j7c9-3fw3-jc64 and the patch commit at https://github.com/ash-project/ash/commit/ed4e656822ffe83f8e960d5de0b573c0d1ae7f29. If an immediate upgrade is not feasible, disable atomic strategy for affected update_many actions by configuring the action to use :stream or another non-atomic strategy, which forces per-row authorization and correctly applies policy filters. This workaround reduces bulk-update throughput and requires application-level action configuration changes. Applications that do not call Ash.update_many/4 require no action.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Ash is an Elixir data-persistence framework (CPE: cpe:2.3:a:ash-project:ash) that abstracts data layer operations and enforces access control through declarative resource policies. The vulnerability resides in Ash.Actions.Update.UpdateMany (lib/ash/actions/update/update_many.ex). When the :atomic or :atomic_batches strategy is selected and the data layer supports update_many natively (e.g., PostgreSQL MERGE via AshPostgres), the framework issues a single bulk statement. CWE-862 (Missing Authorization) identifies the root cause: the code path selecting the atomic strategy did not gate on authorize?: true, and did not invoke authorize_atomic_changeset to derive and merge policy filters into the changesets before statement execution. The fix introduces two guards: it restricts atomic strategy selection when authorization is enabled and the data layer lacks :changeset_filter capability, and it adds a new per-changeset authorize_atomic/2 function that retrieves the policy filter and merges it into each changeset so the bulk statement only touches authorized rows.
Know when Ash gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
AV:N for network-accessible Ash applications; AC:H for the atomic strategy plus data-layer precondition; PR:L because actor access is required; no confidentiality or availability impact.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Missing Authorization vulnerability in ash-project ash allows an actor to update records forbidden by resource policies through the atomic path of Ash.update_many/4.
Ash.update_many/4 runs as a single atomic statement (a data-layer update_many, for example a SQL MERGE) whenever an atomic strategy is used and the data layer supports it. Ash.Actions.Update.UpdateMany (lib/ash/actions/update/update_many.ex) took that path even under authorize?: true without applying the resource's policies, so the statement updated every row matched by primary key regardless of the policy filter that authorization would impose. An actor could therefore update records the policies forbid, such as rows belonging to another actor or tenant. The fix restricts the atomic path to data layers supporting changeset filters when authorizing, authorizes each changeset, and merges the resulting policy filter into each changeset so the statement only touches authorized rows.
This issue affects ash: from 3.29.0 before 3.32.2.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Private argument injection in the Ash Elixir framework (versions 3.0.0 through 3.29.2) allows end users to set action ar
An issue was discovered in the ash crate before 0.33.1 for Rust. Rated critical severity (CVSS 9.8), this vulnerability
Atom table exhaustion in the Ash framework (Elixir) allows an unauthenticated remote attacker to crash a BEAM node by su
Cross-tenant record takeover in the Ash framework (Elixir) for versions 1.22.0 up to 3.37.2: when a resource uses attrib
An authorization bypass in the Ash framework (Elixir) lets authenticated, lower-privileged actors recover values they ar
Information disclosure in the Ash framework for Elixir (versions 2.6.0 up to but not including 3.34.6) lets an authentic
An incorrect authorization flaw in the Elixir Ash framework (versions 3.24.0 up to but not including 3.37.1) lets an aut
Persistent record-level denial of service in the ash Elixir resource framework (versions 3.6.3-3.32.1) lets any actor wh
Integer overflow in Ash Framework's vector encoding corrupts stored vectors in any Elixir application using Ash versions
CPU exhaustion in Ash Framework's string type constraint handler allows denial of service against Elixir applications th
Memory exhaustion via decompression bomb in Ash Framework's keyset pagination can terminate Erlang nodes running version
Unbounded string storage in Ash Framework versions 0.10.0 through 3.32.x allows unauthenticated attackers to bypass max_
EUVD-2026-68951
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB