CVE-2026-67579: CWE-502 Deserialization of Untrusted Data in ash-project ash
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.
AI Analysis
Technical Summary
The vulnerability arises from unsafe deserialization in the decode_values/2 function of lib/ash/page/keyset.ex, which uses non_executable_binary_to_term/2 with the [:safe] option. While this prevents new atoms, functions, and ports, it does not block structs built from already interned atoms, such as %Ash.Query.Call{}. This struct can be injected and spliced into the keyset filter expression without passing through the usual private/public gate checks. On AshPostgres, this leads to SQL injection by inlining the malicious fragment into the SQL query. On ETS and Simple data layers, the injected expression is evaluated as an arbitrary function call, enabling code execution. The flaw affects ash versions starting at 1.17.0 and prior to 3.31.3.
Potential Impact
An unauthenticated attacker can exploit this vulnerability to perform SQL injection attacks on systems using the AshPostgres data layer, potentially compromising database integrity and confidentiality. On other data layers like ETS and Simple, the attacker can execute arbitrary code within the application process, leading to full compromise of the affected system. The vulnerability has a high severity score (CVSS 7.5) reflecting its potential for significant impact without requiring authentication.
Mitigation Recommendations
Patch status is not yet confirmed — check the vendor advisory for current remediation guidance. Until an official fix is available, avoid using untrusted input in keyset pagination cursors or disable keyset pagination features if possible. Monitor vendor channels for updates and apply patches promptly once released.
CVE-2026-67579: CWE-502 Deserialization of Untrusted Data in ash-project ash
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.
CVSS v4.0
Score 7.5high
Affected software
ash-project
ash
ash-project
ash
cpe:2.3:a:ash-project:ash:*:*:*:*:*:*:*:*Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
The vulnerability arises from unsafe deserialization in the decode_values/2 function of lib/ash/page/keyset.ex, which uses non_executable_binary_to_term/2 with the [:safe] option. While this prevents new atoms, functions, and ports, it does not block structs built from already interned atoms, such as %Ash.Query.Call{}. This struct can be injected and spliced into the keyset filter expression without passing through the usual private/public gate checks. On AshPostgres, this leads to SQL injection by inlining the malicious fragment into the SQL query. On ETS and Simple data layers, the injected expression is evaluated as an arbitrary function call, enabling code execution. The flaw affects ash versions starting at 1.17.0 and prior to 3.31.3.
Potential Impact
An unauthenticated attacker can exploit this vulnerability to perform SQL injection attacks on systems using the AshPostgres data layer, potentially compromising database integrity and confidentiality. On other data layers like ETS and Simple, the attacker can execute arbitrary code within the application process, leading to full compromise of the affected system. The vulnerability has a high severity score (CVSS 7.5) reflecting its potential for significant impact without requiring authentication.
Mitigation Recommendations
Patch status is not yet confirmed — check the vendor advisory for current remediation guidance. Until an official fix is available, avoid using untrusted input in keyset pagination cursors or disable keyset pagination features if possible. Monitor vendor channels for updates and apply patches promptly once released.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- EEF
- Date Reserved
- 2026-08-09T16:45:01.833Z
- Cvss Version
- 4.0
- State
- PUBLISHED
Threat ID: 6a7cd705bf8831d5391ea007
Added to database: 08/12/2026, 20:26:45 UTC
Last enriched: 08/12/2026, 20:41:06 UTC
Last updated: 09/26/2026, 01:47:43 UTC
Views: 79
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.