{"id":24426,"date":"2026-09-16T20:32:18","date_gmt":"2026-09-16T12:32:18","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-86338"},"modified":"2026-09-16T20:32:18","modified_gmt":"2026-09-16T12:32:18","slug":"cve-2026-86338","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-86338","title":{"rendered":"CVE-2026-86338 &#8211; Ash field_policies are documented to protect against filter-based information disclosure:"},"content":{"rendered":"<p>Ash field_policies are documented to protect against filter-based information disclosure: when a field the actor may not see is referenced in a filter, it is replaced with an expression that evaluates to nil, so a filter cannot be used as a yes\/no oracle to read a value the actor cannot see.<\/p>\n<p>This nilling was applied to attributes but not to calculations or aggregates. A user-supplied filter reference to a calculation or aggregate carries an Ash.Query.Calculation \/ Ash.Query.Aggregate struct, which the authorizer&#8217;s reference replacement did not match (it only matched the Ash.Resource.* structs), so the filter ran against the real value.<\/p>\n<p>As a result, an actor whose field policies forbid a calculation or aggregate can still filter by it (for example filter(secret_calc == &#8220;x&#8221;) or filter(comment_count == n)) and learn the value from whether rows match \u2014 an oracle that recovers field-policy-protected values one probe at a time. Filtering is commonly exposed to lower-privileged actors (for example via AshGraphql or AshJsonApi filter arguments), which is exactly the surface field policies are meant to protect.<\/p>\n<p>The fix routes filter references to calculations and aggregates through the same field-policy nilling as attributes.<\/p>\n<p>This issue affects ash: from 2.11.0-rc.0 before 3.33.4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ash field_policies are documented to protect against filter-based information disclosure: when a field the actor may not see is referenced in a filter, it is replaced with an expression that evaluates<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-24426","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/24426","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=24426"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=24426"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=24426"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}