Skip to main content

Ash Framework EUVDEUVD-2026-38570

| CVE-2026-55736 MEDIUM
Improperly Controlled Modification of Dynamically-Determined Object Attributes (CWE-915)
2026-06-23 EEF GHSA-f4hc-ppw9-4hhw
5.9
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

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

  1. Access
    Identify exposed Ash action with private argument
  2. Delivery
    Submit HTTP request with string-keyed private argument
  3. Exploit
    Framework filter bypass accepts injected value into changeset
  4. Execution
    Application applies injected argument to authorization or ownership logic
  5. Impact
    Privilege escalation or integrity violation achieved

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V4 - API and Web Service Object attribute protection
Exploitation Conditions

The target application must run ash versions 3.0.0 through 3.29.2 and must define at least one action (create, update, destroy, or atomic/bulk update) that declares a private argument with public?: false. Exploitation via the regular changeset path requires submitting parameters with string (binary) keys matching the private argument name, which is standard behavior when consuming JSON or form data - no special encoding or crafting is needed. Exploitation via the atomic path (fully_atomic_changeset/4) works with both string and atom keys, requiring no knowledge of key format at all. Exploitation is limited by the following factors: if no action in the application defines a private argument, there is nothing to inject; if private arguments exist but are not used for security-relevant decisions (authorization, ownership, tenant isolation), there is no meaningful integrity violation; and the attacker must know or guess the exact name of the private argument to target it. Authentication requirements are not determinable from the CVSS vector alone as AV:L/PR:N is an unusual combination for a web framework - in practice, whether the targeted action requires authentication depends on the application's own access controls.

Impact

The CVSS 4.0 score of 5.9 (Medium) with VI:H reflects meaningful but conditional integrity impact. The provided vector's AV:L (local attack vector) warrants scrutiny: Ash actions in typical deployments are exposed over HTTP APIs where parameters arrive from remote, unauthenticated users, making the practical attack surface network-accessible rather than local. AT:P (attack requirements present) correctly captures the dependency on the application defining a security-sensitive private argument. EPSS data is not provided in the input, so probabilistic exploitation likelihood cannot be assessed. This vulnerability is not listed in CISA KEV and no public exploit code has been identified. Real-world severity is highly application-dependent: applications that use private arguments only for internal routing or logging face negligible risk, while those that rely on private arguments for authorization (e.g., acting_user_id driving access control) are exposed to meaningful privilege escalation. The atomic path's complete absence of filtering is the higher-severity variant, as it accepts both atom and string keys.

Exploit ScenarioDerived

An attacker sends an HTTP POST request to an application endpoint that invokes an Ash for_create or fully_atomic_changeset action defining a private argument named acting_user_id. By including the key-value pair "acting_user_id": "<victim_user_id>" as a string-keyed JSON parameter, the attacker bypasses the incomplete filter and the framework accepts the injected value into the changeset. The application then uses that acting_user_id to determine record ownership or perform authorization checks, effectively granting the attacker the permissions and data access of the targeted user.

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

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

Alert me

AnalysisAIv1 – Jun 23, 2026

Private argument injection in the Ash Elixir framework (versions 3.0.0 through 3.29.2) allows end users to set action arguments explicitly marked public?: false, which are designed to be controlled exclusively by trusted server-side code. The filtering logic in both the regular changeset path and the atomic changeset path fails to enforce the public? flag when input parameters arrive as string (binary) keys - the default format for user-supplied JSON or form data. An attacker who submits a string-keyed parameter matching a private argument name can inject an arbitrary value, potentially enabling privilege escalation or integrity violations if that argument drives authorization decisions such as acting_user_id or record ownership. No public exploit code has been identified and this vulnerability is not listed in CISA KEV.

RemediationAI

Upgrade ash to version 3.29.3 or later, which contains the authoritative fix from commit d9b3100219b3ea86d73202bf7368c03a7688efea that adds &1.public? guards to all argument lookup predicates in lib/ash/changeset/changeset.ex. The vendor advisory is at https://github.com/ash-project/ash/security/advisories/GHSA-f4hc-ppw9-4hhw and the OSV record is at https://osv.dev/vulnerability/EEF-CVE-2026-55736. If immediate patching is not feasible, audit every action that defines private arguments (public?: false) and assess whether those arguments influence security-sensitive behavior such as authorization, ownership assignment, or tenant resolution. As a compensating control, add explicit server-side assertions in action code to verify that security-critical private arguments equal the server-computed value before proceeding - this adds overhead and is not a substitute for patching. Disabling atomic and bulk update paths for actions with sensitive private arguments eliminates the fully unguarded code path but may break intended application functionality.

Affected VersionsENISA

ash 5967ed3a483ab949866e6d7b043b043e61703f17 <d9b3100219b3ea86d73202bf7368c03a7688efea
ash 3.0.0 <3.29.3

Affected Packages

euvd ash fix: 3.29.3

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 framework for building resource-driven APIs using a declarative data layer. Actions in Ash accept arguments; the public?: false flag on an argument (CWE-915) is supposed to make it invisible to external callers, settable only via Ash.Changeset.set_private_argument/3 from server-side code. The root cause is an incomplete guard in lib/ash/changeset/changeset.ex: the Enum.find/Enum.any? predicates that look up arguments by name were missing the &1.public? check when matching on binary (string) keys. Because user-supplied parameters from JSON or form submissions naturally arrive as string keys, the atom-keyed path appeared safe while the string-keyed path silently accepted private arguments. The atomic changeset path (Ash.Changeset.fully_atomic_changeset/4, reached through atomic and bulk updates) had no public? check at all - neither atom nor string keys were filtered. The confirmed fix adds &1.public? && guards to all three predicates (commit d9b3100219b3ea86d73202bf7368c03a7688efea), ensuring private arguments are rejected as Ash.Error.Invalid.NoSuchInput in all code paths. Affected CPE: cpe:2.3:a:ash-project:ash:*:*:*:*:*:*:*:*.

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 7.5 HIGH

Parameters arrive over the network in typical Ash web deployments (AV:N); no privileges required to submit input; integrity impact is high when private arguments gate authorization decisions.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
4.0 AV:N/AC:L/AT:P/PR:N/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

Improperly Controlled Modification of Dynamically-Determined Object Attributes vulnerability in ash-project ash allows a user to set the value of a private action argument that is intended to be controlled only by trusted server-side code.

Action arguments declared with public?: false are meant to be set internally (for example via Ash.Changeset.set_private_argument/3) and must not be settable from end-user input. When a changeset is built from a parameter map, Ash filters out private arguments, but the filtering is incomplete.

In the regular changeset path (for_create, for_update, for_destroy), private arguments are stripped only when the parameter key is an atom. When the key is a binary (string), as is the case for user-supplied parameters, the private argument is kept and the user controls its value. In the atomic path (Ash.Changeset.fully_atomic_changeset/4, also reached through atomic and bulk updates), private arguments are not stripped at all, regardless of whether the key is an atom or a binary.

An attacker who can submit parameters to an action that defines a private argument can therefore inject a value for that argument. Depending on how the application uses the argument (for example an acting_user_id driving authorization or record ownership), this can lead to an integrity violation or privilege escalation.

This issue affects ash: from 3.0.0 before 3.29.3.

Threat Intelligence Overview

EPSS Score
0.2%
Top 95% exploitable
Prevalence
Low
Elixir-specific framework, niche ecosystem with limited enterprise footprint
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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 Yes
EPSS 0.2%
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
Defer
Exploitation· derived
Poc
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

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

Attack Technique

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

More in Ash

View all
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_

CVE-2026-82742 MEDIUM
5.9 Sep 01

Memory exhaustion in Ash Framework's runtime filter engine allows an attacker controlling filter inputs to crash an Elix

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