GitHub Advisoryadvisory · Hex
GHSA-pcxq-fjp3-r752 Ash has authorization bypass when bypass policy condition evaluates to true
HIGH
Official page ↗
- Aliases
- CVE-2025-48044
- Ecosystem
- Hex
- Packages
- ash
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
- Weaknesses
- CWE-863
- Reviewed
- 2025-10-17
Affected packages
• Hex ash: >= 3.6.3, < 3.7.1 → fixed in 3.7.1
Description
Summary
Bypass policies incorrectly authorize requests when their condition evaluates to true but their authorization checks fail and no other policies apply.
Impact
Resources with bypass policies can be accessed without proper authorization when:
• Bypass condition evaluates to true
• Bypass authorization checks fail
• Other policies exist but their conditions don't match
Details
Vulnerable code in: lib/ash/policy/policy.ex:69
```elixir
{%{bypass?: true}, cond_expr, complete_expr}, {one_condition_matches, all_policies_match} ->
{
b(cond_expr or one_condition_matches), #
{
b(complete_expr or one_condition_matches), #
{
b(complete_expr or one_condition_matches), # <- For consistency
complete_expr
}
```
PoC
```elixir
policies do
bypass always() do
authorize_if actor_attribute_equals(:is_admin, true)
end
policy action_type(:read) do
authorize_if always()
end
end
```
Non-admin user can perform create actions (should be denied).
Test demonstrating the bug:
```elixir
test "bypass policy bug" do
policies = [
%Ash.Policy.Policy{
bypass?: true,
condition: [{Ash.Policy.Check.Static, result: true}], # condition = true
policies: [
%Ash.Policy.Check{
type: :authorize_if,
check: {Ash.Policy.Check.Static, result: false}, # policies = false
check_module: Ash.Policy.Check.Static,
check_opts: [result: false]
}
]
},
%Ash.Policy.Policy{
bypass?: false,
condition: [{Ash.Policy.Check.Static, result: false}],
policies: [
%Ash.Policy.Check{
type: :authorize_if,
check: {Ash.Policy.Check.Static, result: true},
check_module: Ash.Policy.Check.Static,
check_opts: [result: true]
}
]
}
]
expression = Ash.Policy.Policy.expression(policies, %{})
assert expression == false
# Expected: false (deny)
# Actual on main: true (incorrectly authorized)
end
```
Related
Alias · CVE (1)
- CVE-2025-48044 Incorrect Authorization vulnerability in ash-project ash allows Authentication Bypass. vulnerability
Weakness · CWE (1)
- CWE-863 Incorrect Authorization weakness
References
- https://github.com/ash-project/ash/security/advisories/GHSA-pcxq-fjp3-r752 web
- https://nvd.nist.gov/vuln/detail/CVE-2025-48044 advisory
- https://github.com/ash-project/ash/commit/8b83efa225f657bfc3656ad8ee8485f9b2de923d web
- https://cna.erlef.org/cves/CVE-2025-48044.html web
- https://github.com/ash-project/ash package
- https://osv.dev/vulnerability/EEF-CVE-2025-48044 web