Description
Deserialization of Untrusted Data vulnerability in ash-project ash allows an unauthenticated attacker to inject a filter expression through a forged keyset pagination cursor, resulting in SQL injection or code execution depending on the data layer.

Read actions with keyset pagination decode the client-supplied page[:after] or page[:before] cursor in decode_values/2 in lib/ash/page/keyset.ex using non_executable_binary_to_term/2 with [:safe]. That guard blocks new atoms, funs, and ports, but not a struct built from atoms already interned in a running Ash application, so a decoded %Ash.Query.Call{} expression survives and is spliced into the keyset filter as a comparison value in do_filters/4 and evaluated. Because the cursor bypasses the Ash.Expr macro, the runtime never applies the private?/public? gate that would otherwise reject it. On AshPostgres the injected fragment is inlined into the SQL query; on the ETS and Simple data layers it is evaluated in-process as an arbitrary function call.

This issue affects ash: from 1.17.0 before 3.31.3.
Published: 2026-08-12
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

A deserialization flaw in the Ash framework allows an unauthenticated attacker to supply a forged keyset pagination cursor. The cursor is decoded by a routine that uses a safe binary‑to‑term conversion, but it fails to reject a struct that has already been interned in the running application. The attacker can embed a "%Ash.Query.Call{}" expression that is subsequently incorporated into the filter used for pagination. Depending on the underlying data layer, the embedded expression is either inlined into an SQL statement or evaluated by the application, leading to either SQL injection or arbitrary function execution. The primary impact is that the attacker can read, modify, or delete data, and in the worst case can execute native code on the host.

Affected Systems

The vulnerability affects every installation of ash-project's Ash package from version 1.17.0 up to (but excluding) 3.31.3. Any service that uses Ash for its data access layer—be it PostgreSQL, ETS, or a simple in‑memory layer—may be susceptible if keyset pagination is enabled.

Risk and Exploitability

The CVSS score of 7.5 indicates a high severity. Although the EPSS score is not available, the flaw is unauthenticated and allows direct injection via client requests, meaning the potential for exploitation is significant. The vulnerability is not listed in the CISA KEV catalog, but because it permits arbitrary SQL or code execution, it should be treated with priority. An attacker only needs to send a crafted page[:after] or page[:before] cursor in a request to a supported endpoint; no additional privileges are required.

Generated by OpenCVE AI on August 12, 2026 at 22:50 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade ash to version 3.31.3 or later to remove the vulnerable decoding logic.
  • Enforce authentication and authorization on all keyset pagination endpoints so that only trusted users can request pages and supply cursors.
  • Validate or sanitize the decoded cursor value before it is used in the query filter to reject any unexpected structures or malicious expressions.

Generated by OpenCVE AI on August 12, 2026 at 22:50 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 18 Aug 2026 15:00:00 +0000

Type Values Removed Values Added
First Time appeared Ash-hq
Ash-hq ash Framework
CPEs cpe:2.3:a:ash-hq:ash_framework:*:*:*:*:*:*:*:*
Vendors & Products Ash-hq
Ash-hq ash Framework
Metrics cvssV3_1

{'score': 7.4, 'vector': 'CVSS:3.1/AV:L/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H'}


Thu, 13 Aug 2026 13:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Wed, 12 Aug 2026 20:15:00 +0000

Type Values Removed Values Added
Description Deserialization of Untrusted Data vulnerability in ash-project ash allows an unauthenticated attacker to inject a filter expression through a forged keyset pagination cursor, resulting in SQL injection or code execution depending on the data layer. Read actions with keyset pagination decode the client-supplied page[:after] or page[:before] cursor in decode_values/2 in lib/ash/page/keyset.ex using non_executable_binary_to_term/2 with [:safe]. That guard blocks new atoms, funs, and ports, but not a struct built from atoms already interned in a running Ash application, so a decoded %Ash.Query.Call{} expression survives and is spliced into the keyset filter as a comparison value in do_filters/4 and evaluated. Because the cursor bypasses the Ash.Expr macro, the runtime never applies the private?/public? gate that would otherwise reject it. On AshPostgres the injected fragment is inlined into the SQL query; on the ETS and Simple data layers it is evaluated in-process as an arbitrary function call. This issue affects ash: from 1.17.0 before 3.31.3.
Title Filter expression injection via forged keyset pagination cursor in Ash
First Time appeared Ash-project
Ash-project ash
Weaknesses CWE-502
CWE-89
CPEs cpe:2.3:a:ash-project:ash:*:*:*:*:*:*:*:*
Vendors & Products Ash-project
Ash-project ash
References
Metrics cvssV4_0

{'score': 7.5, 'vector': 'CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N'}


Subscriptions

Ash-hq Ash Framework
Ash-project Ash
cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-08-13T12:44:48.074Z

Reserved: 2026-08-09T16:45:01.833Z

Link: CVE-2026-67579

cve-icon Vulnrichment

Updated: 2026-08-13T12:44:14.133Z

cve-icon NVD

Status : Analyzed

Published: 2026-08-12T20:17:48.440

Modified: 2026-08-18T14:53:39.307

Link: CVE-2026-67579

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-12T23:00:05Z

Weaknesses
  • CWE-502

    Deserialization of Untrusted Data

  • CWE-89

    Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')