CVE-2026-80227
LowCVSS 2.1Summary
A vulnerability in ash_sql allows a user to pad a string field with tab, newline, carriage-return, or form-feed characters and pass a trimmed uniqueness or equality check in the database that the same expression would fail in memory (or the reverse). This occurs because string_trim/1 in SQL removes only spaces, not all whitespace, causing behavioral differences between SQL and memory.
Risk Assessment
This could enable creation of duplicate data or bypass of validation, leading to data integrity issues and potentially unauthorized operations.
Recommendation
It is recommended to upgrade ash_sql to version 0.7.1 or later and avoid relying on string_trim/1 in critical validations without consistency tests.
Other vulnerabilities in ash_sql
See all- CVE-2026-81318Low
A vulnerability in ash_sql allows a caller in a schema-based multitenant application to receive aggregate values computed from another tenant's rows. This occurs when an aggregate is computed over a distinct query, and the outer query is rebuilt without the schema prefix, leading to reads from the default schema instead of the tenant schema.
- CVE-2026-81316Low
A vulnerability in ash_sql allows a caller to receive an aggregate value computed over rows a more restrictive filter should have excluded, disclosing counts, sums, or lists across an authorization or tenancy boundary. This occurs because two aggregate queries are considered identical when they differ only in filter, not sort.
- CVE-2026-78691Low
A vulnerability in ash_sql allows a user who supplies a search term to contains/2, string_starts_with/2, or string_ends_with/2 to inject live SQL LIKE wildcards, turning a literal substring search into an attacker-controlled pattern match. This occurs because escape helpers do not escape backslashes, allowing bypass of escaping and activation of wildcards.
- CVE-2026-77454Medium
A vulnerability in ash_sql allows a caller to bypass a scoping or authorization filter expressed as exists/2 over a relationship that declares both a limit and a parent(...)-referencing filter or sort. In certain cases, the limit and predicate are dropped, causing the check to match any record with any related row.
Original NVD description (English source)
Incorrect Comparison vulnerability in ash-project ash_sql allows a user to pad a string field with tab, newline, carriage-return, or form-feed characters and pass a trimmed uniqueness or equality check in the database that the same expression would fail in memory (or the reverse). string_trim/1 compiles to REGEXP_REPLACE patterns built from an Elixir string in which \s is the escape for a single space (codepoint 32), not a regex whitespace class. The generated SQL therefore removes only literal spaces and leaves tabs, newlines, carriage returns, and form feeds in place, whereas String.trim/1 in Elixir removes them all. Any Ash filter, validation, or identity that relies on string_trim/1 then behaves differently depending on whether Ash pushes the expression down to SQL or evaluates it in memory, so padded input can register a near-duplicate value or slip past a trimmed comparison. This issue affects ash_sql: from 0.1.0 before 0.7.1.

