CVE-2026-82730
nicheIncorrect authorization in ash_typescript leaks field-policy-denied values
ash_typescript (from 0.11.0 before 0.18.0) mishandles Ash.ForbiddenField markers when serializing RPC results, so attribute values that Ash field policies denied are returned to the caller with their real contents hidden inside the marker that represents the denial. The flaw is triggered when an Ash action returns an embedded resource as a map, which routes through normalize_resource_struct/2 with an empty template, or through the public, unguarded normalize_value_for_json/1 entry point; in both cases normalize_primitive/1 lacks a clause to strip the marker and a generic struct branch serializes every key, including original_value. Because the CVSS 4.0 score is 8.2 with no privileges required, an unauthenticated RPC caller gains read access to policy-denied attribute values, a confidentiality-only issue with no integrity or availability impact. Only applications built on the Elixir Ash framework that use the ash_typescript RPC layer and enforce field policies, particularly over embedded resources, are affected. No public proof-of-concept, KEV listing, or known in-the-wild exploitation exists, and EPSS is 0.3%.
What to do: Upgrade to ash_typescript 0.18.0 or later, which adds the missing marker-stripping clause in result normalization. In the interim, audit RPC actions that return embedded resources as maps and any direct calls to AshTypescript.Rpc.ResultProcessor.normalize_value_for_json/1, and verify that field-policy-denied attributes are not being echoed back to RPC callers in responses.
| ash-project ash_typescript | >= 0.11.0, < 0.18.0 |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Incorrect Authorization vulnerability in ash-project ash_typescript allows an unauthorized RPC caller to read attribute values that Ash field policies denied. When a field policy denies an attribute, Ash substitutes %Ash.ForbiddenField{}, which retains the real value in original_value because embedded resources must remain writable, and hides it from Inspect rather than removing it. AshTypescript.Rpc.ResultProcessor strips these markers to nil on its template-driven paths, but normalize_primitive/1 in lib/ash_typescript/rpc/result_processor.ex had no such clause, so a marker fell through to the generic struct branch which calls Map.from_struct/1 and serializes every key, original_value included. The denied value is returned to the caller inside the marker that represents its own denial. The simplest trigger is an action returning an embedded resource as a map, which routes through normalize_resource_struct/2 with an empty template. normalize_value_for_json/1 is a public, unguarded entry point to the same path. This issue affects ash_typescript: from 0.11.0 before 0.18.0.
- Weakness
- CWE-863
- Vector
- CVSS:4.0/AV:N/AC:L/AT:P/PR:N/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
In the news0 stories
No ingested article mentions this CVE yet.