{"id":"CVE-2026-114214","kind":"vulnerability","aliases":["CVE-2026-114214"],"related":[],"title":"Ash: through-relationship loads leak unrelated destination records to clients","description":"Incorrect Authorization vulnerability in ash-project ash allows a client to read destination records unrelated to the source record through a through relationship.\n\nWhen a has_many relationship declared with through: was loaded for a single record with a limit of 1, or an unsorted has_one through relationship was loaded with a limit of 1, lateral_join?/4 in lib/ash/actions/read/relationships.ex chose the path that reads the destination without any filter linking it to the source. The load returned the first destination record by sort, or any other record with an offset. The read still runs the destination's policies but carries the relationship as accessing_from, so a client paging such a field (for example teachers(limit: 1, offset: n) through AshGraphql) can enumerate destination records that policies allow only when reached through that relationship.\n\nThis issue affects ash: from 3.24.0 before 3.37.1.","summary":"Ash's has_many :through and has_one :through loads with a limit of 1 can return destination records not linked to the source record. A client paging such a field, for example through AshGraphql, can enumerate records that policies allow only via that relationship.","severity":"medium","cvss":6.0,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["ash","ashgraphql","elixir","package","self-hosted"],"not_affected_if":["ash-below-3.24.0-or-above-3.37.1","no-client-paging","no-through-relationships"],"how_to_check":"- Check the Ash version in `mix.lock` or `mix deps | grep ash`\n- Search the code for `has_many` or `has_one` declarations using `through:` and for paginated access to them with limit and offset","fix":"- Upgrade `ash` to `3.37.1` or later\n- Until upgraded, avoid exposing `through:` relationships with limit and offset to clients","status":"open","published_at":"2026-10-25T20:16:31+00:00","first_seen_at":"2026-10-25T20:35:47+00:00","triaged_at":"2026-10-25T20:37:44+00:00","updated_at":"2026-10-25T20:37:44+00:00","category":"package","confidence":0.6,"triage":{"at":"2026-10-25T20:37:44Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade `ash` to `3.37.1` or later\n- Until upgraded, avoid exposing `through:` relationships with limit and offset to clients","reach":"internet","title":"Ash: through-relationship loads leak unrelated destination records to clients","impact":"medium","summary":"Ash's has_many :through and has_one :through loads with a limit of 1 can return destination records not linked to the source record. A client paging such a field, for example through AshGraphql, can enumerate records that policies allow only via that relationship.","category":"package","nicknames":[],"who_cares":["elixir","ash","ashgraphql","self-hosted"],"confidence":0.6,"needs_auth":"unknown","worst_case":"Client enumerates destination records allowed only through the relationship","analyst_note":"","how_to_check":"- Check the Ash version in `mix.lock` or `mix deps | grep ash`\n- Search the code for `has_many` or `has_one` declarations using `through:` and for paginated access to them with limit and offset","needs_analyst":false,"not_affected_if":["ash-below-3.24.0-or-above-3.37.1","no-through-relationships","no-client-paging"],"who_is_affected":"Applications on ash from 3.24.0 before 3.37.1 that declare a has_many or has_one relationship using through: and expose it to clients, typically via AshGraphql, with paging. Applications without through relationships, or not exposing them to untrusted clients, are less exposed.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.00062,"input_tokens":3493,"output_tokens":541,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-114214':14A,17A '-2026':13A,16A '/4':129C '1':39B,112C,126C,189C '3.24.0':212C '3.37.1':214C 'access':176C 'affect':209C 'allow':65B,78C,200C 'ash':1A,18B,25B,75C,77C,210C 'ash-project':74C 'ashgraphql':19B,59B,193C 'author':71C 'carri':172C 'chose':132C 'client':11A,51B,80C,180C 'cve':12A,15A 'declar':99C 'destin':8A,42B,83C,138C,152C,168C,196C 'elixir':20B 'enumer':61B,195C 'exampl':57B,186C 'field':55B,184C 'filter':141C 'first':151C 'host':24B 'incorrect':70C 'issu':208C 'join':128C 'later':127C 'leak':6A 'lib/ash/actions/read/relationships.ex':131C 'limit':37B,110C,124C,188C 'link':45B,142C 'load':5A,34B,103C,121C,148C 'mani':28B,97C 'n':191C 'offset':162C,190C 'one':32B,117C 'packag':21B 'page':52B,181C 'path':134C 'polici':64B,170C,199C 'project':76C 'reach':203C 'read':82C,136C,164C 'record':9A,43B,49B,62B,84C,89C,107C,153C,159C,197C 'relationship':4A,69B,93C,98C,119C,174C,206C 'return':41B,149C 'run':166C 'self':23B 'self-host':22B 'singl':106C 'sort':155C 'sourc':48B,88C,146C 'still':165C 'teacher':187C 'through-relationship':2A 'unrel':7A,85C 'unsort':115C 'via':67B 'vulner':72C 'without':139C","nicknames":[],"mitigations":[],"who_affected":"Applications on ash from 3.24.0 before 3.37.1 that declare a has_many or has_one relationship using through: and expose it to clients, typically via AshGraphql, with paging. Applications without through relationships, or not exposing them to untrusted clients, are less exposed.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-25T20:16:31+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:N/VA:N/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","cvss_by":"6b3ad84c-e1a6-4bf7-a703-f496b71e49db","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-114214","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-114214","severity":null,"published_at":"2026-10-25T20:16:31+00:00","modified_at":"2026-10-25T20:16:31+00:00","first_seen_at":"2026-10-25T20:35:47+00:00","fetched_at":"2026-10-25T20:35:47+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}