Skip to main content

Ash Framework CVE-2026-82746

| EUVDEUVD-2026-68951 MEDIUM
Missing Authorization (CWE-862)
2026-09-01 EEF
5.9
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Gain application actor access
  2. Delivery
    Call Ash.update_many/4 with authorize?:true
  3. Exploit
    Atomic strategy selected without authorization check
  4. Execution
    SQL MERGE issued without policy row filter
  5. Impact
    Unauthorized 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 Ash.update_many/4 with authorize?: true; (3) the selected update strategy is :atomic or :atomic_batches; (4) the data layer supports atomic bulk updates (e.g., AshPostgres on PostgreSQL with MERGE support, confirmed by the data layer reporting :changeset_filter capability); and (5) the actor has sufficient application access to invoke the update_many operation. Applications using non-atomic strategies, those without calls to update_many, or those on data layers without atomic bulk-update support are not affected. The primary limiting factor is the intersection of data-layer capability and update strategy configuration, which is not universal across Ash deployments.

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 Ash.update_many/4 with atomic strategy on a data layer that supports atomic bulk updates - a configuration not present in all Ash deployments. The high integrity impact (VI:H) is meaningful for multi-tenant applications that rely on Ash resource policies for tenant isolation rather than database-level row security, where a successful bypass could enable cross-tenant writes. No EPSS score was supplied in the input, and this CVE is not listed in the CISA KEV catalog, so exploitation probability cannot be quantified from available data. The supplied CVSS 4.0 vector assigns PR:N (no privileges required), which may overstate exposure for deployments where application-layer authentication is required before any actor can invoke update_many; defenders should verify whether their application exposes this code path to unauthenticated callers, as the realistic attack surface depends heavily on application design. The public patch diff is detailed enough to reconstruct the bypass path without specialist effort, which elevates urgency for affected configurations relative to what the numeric score alone implies.

Exploit ScenarioDerived

A tenant actor in a multi-tenant Ash application calls Ash.update_many/4 targeting records by primary key, including IDs belonging to a different tenant. Because the atomic update path bypasses the resource policy filter, the underlying SQL MERGE updates all matched rows regardless of tenant policy restrictions, writing attacker-controlled values into records the actor does not own. No dedicated exploit code has been identified, but the public patch diff makes the bypass path straightforward to understand.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

ash 3.29.0 <3.32.2
ash 45e6b4ec7b2dc076afe614aa7aef7e1f15b5e335 <ed4e656822ffe83f8e960d5de0b573c0d1ae7f29

Affected Packages

euvd ash fix: 3.32.2

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

Vendor (EEF) PRIMARY 5.9 MEDIUM
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
vuln.today AI 5.3 MEDIUM

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.

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:N/I:H/A:N
4.0 AV:N/AC:H/AT:P/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.1%
Top 98% exploitable
Prevalence
Low
niche Elixir framework, limited enterprise deployment footprint
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

More in Ash

View all
CVE-2026-55736 MEDIUM POC
5.9 Jun 23

Private argument injection in the Ash Elixir framework (versions 3.0.0 through 3.29.2) allows end users to set action ar

CVE-2021-45688 CRITICAL
9.8 Dec 27

An issue was discovered in the ash crate before 0.33.1 for Rust. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2026-94201 HIGH
8.2 Oct 05

Atom table exhaustion in the Ash framework (Elixir) allows an unauthenticated remote attacker to crash a BEAM node by su

CVE-2026-96581 HIGH
7.6 Oct 26

Cross-tenant record takeover in the Ash framework (Elixir) for versions 1.22.0 up to 3.37.2: when a resource uses attrib

CVE-2026-86338 MEDIUM
6.0 Sep 16

An authorization bypass in the Ash framework (Elixir) lets authenticated, lower-privileged actors recover values they ar

CVE-2026-101028 MEDIUM
6.0 Oct 09

Information disclosure in the Ash framework for Elixir (versions 2.6.0 up to but not including 3.34.6) lets an authentic

CVE-2026-114214 MEDIUM
6.0 Oct 25

An incorrect authorization flaw in the Elixir Ash framework (versions 3.24.0 up to but not including 3.37.1) lets an aut

CVE-2026-82738 MEDIUM
5.9 Sep 01

Persistent record-level denial of service in the ash Elixir resource framework (versions 3.6.3-3.32.1) lets any actor wh

CVE-2026-82737 MEDIUM
5.9 Sep 01

Integer overflow in Ash Framework's vector encoding corrupts stored vectors in any Elixir application using Ash versions

CVE-2026-82735 MEDIUM
5.9 Sep 01

CPU exhaustion in Ash Framework's string type constraint handler allows denial of service against Elixir applications th

CVE-2026-69659 MEDIUM
5.9 Aug 09

Memory exhaustion via decompression bomb in Ash Framework's keyset pagination can terminate Erlang nodes running version

CVE-2026-82752 MEDIUM
5.9 Sep 05

Unbounded string storage in Ash Framework versions 0.10.0 through 3.32.x allows unauthenticated attackers to bypass max_

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy