Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain authenticated tool caller credentials
-
DeliveryIdentify exposed identity-configured update or destroy tool
-
ExploitCraft identity argument as map predicate expression
-
ExecutionBypass identity_filter/3 scalar check
-
PersistAsh.Query.do_filter/2 evaluates predicate against arbitrary records
-
ImpactAsh.bulk_update!/bulk_destroy! modifies or destroys unowned records
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | The attacker must be an authenticated caller with invocation rights to an AshAi-exposed tool (PR:L per CVSS 4.0 vector). The targeted tool must be configured with an identity option on an update or destroy action - read-only tools are not exploitable. Exploitation is triggered by supplying a map value (predicate expression) rather than a scalar in the identity field of the tool call arguments; an omitted key also triggers exploitation via an IS NULL match. Deployments running ash_ai outside the 0.6.0-pre-1.0.0 range or those that do not expose identity-configured update/destroy tools are not affected. Limiting factors: (1) valid credentials or session token allowing tool invocation are required, (2) at least one update or destroy tool with identity configuration must be active in the deployment, and (3) the ash_ai version must be 0.6.0 or later but before 1.0.0. |
| Impact | The CVSS 4.0 score of 7.1 (AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:H/VA:N) is well-calibrated to the actual risk profile. Low privilege requirement (PR:L) confirms that any authenticated tool caller - no administrator or special role needed - can trigger the bypass, making the effective attack population broad within any deployment that exposes identity-configured tools. High integrity impact (VI:H) is appropriate because a successful exploit can modify or destroy arbitrary records, including wholesale table truncation via bulk operations. Low confidentiality impact (VC:L) reflects that filter behavior implicitly reveals record existence. No CISA KEV listing exists and no EPSS data was provided, so exploitation probability must be inferred: the attack complexity is genuinely low (a single crafted JSON argument suffices), and the advisory's detailed technical description significantly lowers the bar for reproduction. This is not a high-CVSS/low-real-risk case - the integrity damage potential is severe within affected deployments, and the only practical limiting factor is ash_ai's niche deployment footprint in the Elixir ecosystem. |
| Exploit ScenarioDerived | An authenticated AI agent or API client with tool invocation rights sends a crafted JSON payload to an identity-configured update or destroy tool, supplying the identity field as a map predicate - for example, {"record_id": {"not_eq": "attacker-own-uuid"}} - instead of a scalar value. AshAi's identity_filter/3 passes this directly into Ash.Query.do_filter/2, which interprets the map as a filter expression matching all records except the attacker's own, then Ash.bulk_update! applies the write to the first matched record. No public POC has been identified, but the advisory's technical description provides sufficient detail for straightforward reproduction by a motivated attacker. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAI
Authorization bypass in AshAi (ash_ai) versions 0.6.0 through pre-1.0.0 allows any authenticated tool caller to update or destroy database records it never legitimately identified, up to and including every row in a table. The flaw is in AshAi.Tool.Execution.identity_filter/3, which passes raw tool arguments directly into Ash.Query.do_filter/2; because Ash's filter DSL interprets map values as predicate expressions rather than scalar literals, a caller can inject filter logic such as {"not_eq": "<own-ref>"} to retarget bulk writes to arbitrary records. A vendor patch is available in commit 87f616d and the fix version is 1.0.0; no public exploit or CISA KEV listing exists at time of analysis.
RemediationAI
Upgrade ash_ai to version 1.0.0 or later, which incorporates the fix from commit 87f616d5bfbf7af43346f0701ae17f853789a602 (https://github.com/ash-project/ash_ai/commit/87f616d5bfbf7af43346f0701ae17f853789a602). The patch enforces scalar type casting on identity field values in identity_filter/3, rejecting map-based predicate expressions before they reach Ash.Query.do_filter/2. If an immediate upgrade is not possible, the most effective workaround is to temporarily remove or disable any AshAi tools that expose identity-configured update or destroy actions - this eliminates the attack surface entirely but also disables the affected tool functionality for AI callers until the patch is applied. The vendor advisory at https://github.com/ash-project/ash_ai/security/advisories/GHSA-jg86-xh36-h5xc and the EEF CNA entry at https://cna.erlef.org/cves/CVE-2026-82564.html provide additional context.
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
AshAi is an Elixir library built on the Ash Framework that exposes Ash resources as AI-callable tools via the Model Context Protocol (MCP). The root cause is CWE-639 (Authorization Bypass Through User-Controlled Key): identity_filter/3 in AshAi.Tool.Execution constructs the update/destroy query filter as [{key, Map.get(arguments, to_string(key))}] and hands it directly to Ash.Query.do_filter/2. In Ash's filter DSL, a map value such as %{"not_eq" => "<value>"} is interpreted as a predicate expression rather than a literal equality check. Combined with Ash.Query.limit(1) and Ash.bulk_update!/Ash.bulk_destroy!, this lets a caller retarget the write operation to a record outside its own scope. An omitted identity key produces an IS NULL filter, matching arbitrary rows. The remediation in commit 87f616d5bfbf7af43346f0701ae17f853789a602 casts each incoming identity value to the declared Ash field type, rejecting any non-scalar input at the filter construction stage. Affected CPE: cpe:2.3:a:ash-project:ash_ai:*:*:*:*:*:*:*:* from 0.6.0 before 1.0.0.
Know when Ash Ai 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:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:H/VA:N/SC:N/SI:N/SA:N
Network-exploitable by any authenticated tool caller (PR:L, AV:N, AC:L); high integrity from arbitrary record modification; low confidentiality from implicit record enumeration via filter response behavior.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Authorization Bypass Through User-Controlled Key vulnerability in ash-project ash_ai allows a caller of an identity-configured tool to update or destroy records it never identified, including every row in the table.
In AshAi.Tool.Execution, identity_filter/3 built the update/destroy filter directly from the raw tool arguments as [{key, Map.get(arguments, to_string(key))}] and passed it to Ash.Query.do_filter/2. A map value is parsed as a predicate expression rather than a literal, so a caller can send {"public_ref": {"not_eq": "<own-ref>"}} and, combined with Ash.Query.limit(1) and Ash.bulk_update!/Ash.bulk_destroy!, retarget the write at a record it never identified; an omitted key yields an IS NULL filter that matches an arbitrary row. The fix casts each identity value to the field type, rejecting non-scalar inputs.
This issue affects ash_ai: from 0.6.0 before 1.0.0.
Technical POC Analysis
CWE-639 (Authorization Bypass Through User-Controlled Key).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
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
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Remote code execution in ash_ai (versions 0.1.0 through pre-1.0.0) allows unauthenticated network attackers to execute a
DNS-rebinding protection in AshAi.Mcp.Server (ash_ai 0.8.0-0.x) is bypassable because the default origin check trusts th
Credential leakage in ash_ai (versions 0.1.0 through before 1.0.0) exposes embedding provider API keys and request inter
Infinite-loop denial-of-service in ash_ai's ToolLoop component (versions 0.6.0 through <1.0.0) allows an attacker who ca
Field policy bypass in ash_ai (versions 0.1.0 through < 1.0.3) allows authenticated, low-privilege actors to read per-ac
Unfiltered exception serialization in ash_ai 0.6.0-0.x leaks internal application details - database schema, raw SQL fra
EUVD-2026-68306
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB