Description
Improper Validation of Specified Quantity in Input vulnerability in ash-project ash allows an attacker to store a value of arbitrary size in an attribute whose length constraint should bound it.

Ash measures string length with Elixir's String.length/1, which counts Unicode graphemes, in the max_length and min_length constraints of Ash.Type.String (apply_constraints/2 in lib/ash/type/string.ex), in Ash.Resource.Validation.StringLength, and in the string_length expression function. A grapheme carries an unbounded number of combining marks, so a base character followed by a million combining acute accents is one grapheme and megabytes of data, and satisfies max_length: 2. Where the data layer imposes no independent limit (ETS, Mnesia, or a Postgres text column) the whole value is persisted, so an attacker can write an entire request body into an attribute declared with a small maximum and grow storage without bound.

The counting unit also disagrees with the storage layer, which counts codepoints rather than graphemes, so a value accepted by the constraint can still be rejected or truncated by the column. A Postgres varchar(n) column bounds the value itself and is not exposed.

This issue affects ash: from 0.10.0 before 3.33.0.
Published: 2026-09-05
Score: 5.9 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The vulnerability in the Ash data‑platform library causes its string‑length validations to count Unicode graphemes instead of codepoints. A single base character followed by many combining marks is considered one grapheme, so a string containing a base character and a million accents is counted as one and can satisfy a tiny max_length value like 2. If the underlying database does not impose a separate limit, the entire payload is written to storage, allowing an attacker to store megabytes of data in an attribute that was declared very small. This results in uncontrolled growth of database size and can lead to disk‑space exhaustion or denial of service. The flaw is a typical example of CWE‑1284, improper quantity validation.

Affected Systems

Ash Project Ash, versions 0.10.0 through 3.32.x (prior to 3.33.0)

Risk and Exploitability

The CVSS score of 5.9 indicates a moderate severity. EPSS is not available, and the vulnerability is not listed in the CISA KEV catalog, suggesting that widespread exploitation has not been observed. The attack is likely to be remote, as the flaw is triggered by supplied input that bypasses application‑level length checks. If an attacker can submit large payloads, the database will accept and store them, potentially exhausting disk space. Because no additional client‑side checks are present, the exploitation barrier is low for systems that allow unsigned requests to reach the library.

Generated by OpenCVE AI on September 5, 2026 at 18:20 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Ash to version 3.33.0 or later, which restores correct length counting and removes the vulnerability.
  • If an upgrade is not feasible, enforce stricter input validation in your application layer to reject strings that would exceed the intended maximum byte size, rather than relying on the library’s grapheme count.
  • Implement storage quotas or monitor database size to detect and prevent disk‑space exhaustion caused by unexpectedly large values.

Generated by OpenCVE AI on September 5, 2026 at 18:20 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 05 Sep 2026 17:30:00 +0000

Type Values Removed Values Added
Description Improper Validation of Specified Quantity in Input vulnerability in ash-project ash allows an attacker to store a value of arbitrary size in an attribute whose length constraint should bound it. Ash measures string length with Elixir's String.length/1, which counts Unicode graphemes, in the max_length and min_length constraints of Ash.Type.String (apply_constraints/2 in lib/ash/type/string.ex), in Ash.Resource.Validation.StringLength, and in the string_length expression function. A grapheme carries an unbounded number of combining marks, so a base character followed by a million combining acute accents is one grapheme and megabytes of data, and satisfies max_length: 2. Where the data layer imposes no independent limit (ETS, Mnesia, or a Postgres text column) the whole value is persisted, so an attacker can write an entire request body into an attribute declared with a small maximum and grow storage without bound. The counting unit also disagrees with the storage layer, which counts codepoints rather than graphemes, so a value accepted by the constraint can still be rejected or truncated by the column. A Postgres varchar(n) column bounds the value itself and is not exposed. This issue affects ash: from 0.10.0 before 3.33.0.
Title Ash string length constraints count graphemes, so a combining-mark string of any size passes max_length
First Time appeared Ash-project
Ash-project ash
Weaknesses CWE-1284
CPEs cpe:2.3:a:ash-project:ash:*:*:*:*:*:*:*:*
Vendors & Products Ash-project
Ash-project ash
References
Metrics cvssV4_0

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


cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-09-05T17:16:16.722Z

Reserved: 2026-08-31T01:00:10.817Z

Link: CVE-2026-82752

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-05T18:17:29.170

Modified: 2026-09-05T18:17:29.170

Link: CVE-2026-82752

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-05T18:30:18Z

Weaknesses
  • CWE-1284

    Improper Validation of Specified Quantity in Input