Skip to main content

Ash Framework CVE-2026-69659

| EUVDEUVD-2026-54937 MEDIUM
Deserialization of Untrusted Data (CWE-502)
2026-08-09 EEF
5.9
CVSS 4.0 · Vendor: EEF
Share

Severity by source

Vendor (EEF) PRIMARY
5.9 MEDIUM
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
7.5 HIGH

Cursor arrives via HTTP query parameter on network-accessible endpoints; no credentials required on public APIs; pure availability impact with no confidentiality or integrity effect.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Local
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

2
Source Code Evidence Fetched
Aug 09, 2026 - 18:37 vuln.today
Analysis Generated
Aug 09, 2026 - 18:37 vuln.today

DescriptionCVE.org

Uncontrolled Resource Consumption vulnerability in ash-project ash allows an attacker to exhaust the memory of the node via a crafted keyset pagination cursor.

Read actions with keyset pagination deserialize the client-supplied page[:after] or page[:before] cursor in decode_values/2 in lib/ash/page/keyset.ex, which base64-decodes the value and passes it to :erlang.binary_to_term/2 without bounding its size. The Erlang external term format supports zlib-compressed payloads, which the decoder inflates transparently, so a cursor of a few kilobytes can allocate tens of megabytes of heap in a single call. Ash itself only ever encodes cursors uncompressed, so the decoder accepts a term shape its encoder never produces. Concurrent requests aggregate these allocations and can terminate the node.

This issue affects ash: from 1.17.0 before 3.31.1.

AnalysisAI

Memory exhaustion via decompression bomb in Ash Framework's keyset pagination can terminate Erlang nodes running versions 1.17.0 through 3.31.0. The decode_values/2 function in lib/ash/page/keyset.ex deserializes client-supplied page[:after] or page[:before] cursors using :erlang.binary_to_term/2 without rejecting compressed Erlang external term format payloads or bounding the deserialized size, allowing a cursor of a few kilobytes on the wire to inflate to tens of megabytes of heap per request. No active exploitation (CISA KEV) has been identified, but the attack is mechanically trivial for any caller reaching a keyset-paginated endpoint, and the vendor patch test suite includes a working reproduction payload.

Technical ContextAI

Ash is a declarative resource framework for Elixir/Phoenix applications (CPE: cpe:2.3:a:ash-project:ash:*:*:*:*:*:*:*:*). Keyset pagination encodes cursors as base64 of :erlang.term_to_binary/1 output - the Erlang external term format (ETF). The vulnerable decode_values/2 path calls Base.decode64!/1 followed by non_executable_binary_to_term([:safe]), which maps to :erlang.binary_to_term(binary, [:safe]). The :safe flag prevents atom and function creation (guarding code execution) but does not prevent memory allocation from compressed ETF payloads. ETF tag 0x50 (decimal 80) signals a zlib-compressed payload that the BEAM runtime inflates transparently before materializing the term - a 2-million-element integer list compressed at level 9 arrives as roughly 8 KB on the wire and allocates tens of megabytes during deserialization. The root cause is CWE-502 (Deserialization of Untrusted Data): Ash's own encoder never produces compressed ETF, yet the decoder accepted a term shape its encoder never emits.

RemediationAI

Upgrade ash to version 3.31.1 or later; the fix is in commit 1816b103af975221210478d61db20adcea700319 (https://github.com/ash-project/ash/commit/1816b103af975221210478d61db20adcea700319) and the advisory is at https://github.com/ash-project/ash/security/advisories/GHSA-j35q-v8h8-7mwq. The patch adds two guards in check_keyset_size/2: compressed ETF payloads (tag byte 0x50) are unconditionally rejected before any inflation occurs, and uncompressed cursors are capped at 10 KiB by default (configurable via config :ash, max_keyset_byte_size: <bytes> in config/config.exs for deployments with unusually large sort values). If immediate upgrade is not possible, add a WAF or reverse-proxy rule to reject requests where page[after] or page[before] exceeds a few hundred bytes - legitimate cursors encoding a single record's sort values are always well below this threshold, so there is no functional impact on valid clients. Secondarily, rate-limit paginated endpoints per-IP or per-authenticated-user to slow aggregated allocation attacks; this reduces but does not eliminate risk.

More in Ash

View all
CVE-2021-45688 CRITICAL
9.8 Dec 27

An issue was discovered in the ash crate before 0.33.1 for Rust. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2026-94201 HIGH
8.2 Oct 05

Atom table exhaustion in the Ash framework (Elixir) allows an unauthenticated remote attacker to crash a BEAM node by su

CVE-2026-86338 MEDIUM
6.0 Sep 16

An authorization bypass in the Ash framework (Elixir) lets authenticated, lower-privileged actors recover values they ar

CVE-2026-101028 MEDIUM
6.0 Oct 09

Information disclosure in the Ash framework for Elixir (versions 2.6.0 up to but not including 3.34.6) lets an authentic

CVE-2026-55736 MEDIUM POC
5.9 Jun 23

Private argument injection in the Ash Elixir framework (versions 3.0.0 through 3.29.2) allows end users to set action ar

CVE-2026-82738 MEDIUM
5.9 Sep 01

Persistent record-level denial of service in the ash Elixir resource framework (versions 3.6.3-3.32.1) lets any actor wh

CVE-2026-82737 MEDIUM
5.9 Sep 01

Integer overflow in Ash Framework's vector encoding corrupts stored vectors in any Elixir application using Ash versions

CVE-2026-82735 MEDIUM
5.9 Sep 01

CPU exhaustion in Ash Framework's string type constraint handler allows denial of service against Elixir applications th

CVE-2026-82752 MEDIUM
5.9 Sep 05

Unbounded string storage in Ash Framework versions 0.10.0 through 3.32.x allows unauthenticated attackers to bypass max_

CVE-2026-82742 MEDIUM
5.9 Sep 01

Memory exhaustion in Ash Framework's runtime filter engine allows an attacker controlling filter inputs to crash an Elix

CVE-2026-82745 MEDIUM
5.9 Sep 01

Silent record overwrite in Ash's ETS and Mnesia data layers allows any actor who can supply a primary key on a create ac

CVE-2026-82747 MEDIUM
5.9 Sep 01

Record-level authorization bypass in Ash (ash-project) versions 3.4.44 through 3.32.1 silently leaks denied records to a

Share

CVE-2026-69659 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy