CVE-2026-69659: Memory exhaustion via unbounded deserialization of keyset pagination cursors in Ash.Page.Keyset
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 decodevalues/2 in lib/ash/page/keyset.ex, which base64-decodes the value and passes it to :erlang.binarytoterm/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.
Affected Software
Event History
Frequently Asked Questions
What is the severity of CVE-2026-69659?
CVE-2026-69659 has a risk score of 62, indicating it poses a medium risk level.
How do I fix CVE-2026-69659?
To mitigate CVE-2026-69659, ensure proper validation and limits on incoming keyset pagination cursors.
What type of vulnerability is CVE-2026-69659?
CVE-2026-69659 is classified as a memory exhaustion vulnerability due to unbounded deserialization.
What software is affected by CVE-2026-69659?
CVE-2026-69659 affects the ash-project ash framework.
Can CVE-2026-69659 lead to denial of service?
Yes, CVE-2026-69659 can potentially lead to denial of service by exhausting server memory.