Summary
CVE-2026-85500 is an authentication bypass vulnerability (CWE-287, CWE-754) in Ash Authentication (the ash_authentication Elixir library maintained by team-alembic), rated CRITICAL (CVSS v4.0: 9.1). The flaw allows an attacker to register or sign in and obtain a valid authenticated session while completely bypassing the mandatory email confirmation control, meaning accounts can be created and used with emails the attacker does not own or verify.
Technical details
- Root cause (fail-open validation): The confirmation check in
AshAuthentication.Strategy.Password.Actions.check_user/2determines whether a user is confirmed using a bareis_nil(Map.get(user, value))comparison against the attribute named byrequire_confirmed_with. When that attribute is not selected on the loaded record,Map.get/2returns%Ash.NotLoaded{}; when a field policy denies access to it, it returns%Ash.ForbiddenField{}. Neither struct equalsnil, so the check silently treats these users as already confirmed. - Root cause (missing enforcement at the action layer): Confirmation checks are only implemented in wrapper functions inside
AshAuthentication.Strategy.Password.Actions, not on the underlyingsign_in_with_tokenandregister_with_passwordactions themselves. Callers that invoke these actions directly — including integrations such as AshGraphql and AshJsonApi — skip the confirmation check entirely. - Trigger conditions: Applications that configure
require_confirmed_withfor email/account confirmation, and either (a) do not force-select the confirmation attribute (leaving it unloaded), (b) apply a field policy that hides the confirmation attribute from the acting user, or (c) expose the affected password actions directly through a GraphQL/JSON:API layer rather than only through the built-in wrapper functions/LiveView forms. - Attack vector: Network — no authentication or special privileges are required; public self-registration endpoints are typically sufficient to exploit the flaw.
- Impact: An unauthenticated attacker can register or authenticate using an unverified or spoofed email address and obtain a fully authenticated session, defeating the application’s email-verification security control. This can enable account takeover, impersonation, or unauthorized access to functionality gated behind "confirmed user" status.
Affected software
ash_authentication(Elixir/Ash Framework), maintained by team-alembic:>= 4.3.8, <= 4.14.2(all versions prior to 4.15.0)>= 5.0.0-rc.0, <= 5.0.0-rc.13(release-candidate track prior to 5.0.0-rc.14)
Severity
- CVSS v4.0 Base Score: 9.1 (Critical) — Vector:
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N - Note: The vendor’s GitHub Security Advisory separately scores the same issue as CVSS v3.1: 6.5 (Medium) — Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N. Both scores are published by authoritative sources; the CVE record itself carries the CVSS v4.0 9.1 rating. Security teams should treat this as high-priority given the network-reachable, no-privilege-required nature of the flaw.
Mitigation and recommended actions
- Immediate: Upgrade
ash_authenticationto 4.15.0 or later (or 5.0.0-rc.14 or later if on the 5.0 release-candidate track). These releases fix both the fail-opennilcomparison and enforce confirmation checks at the action layer. - If immediate patching is not possible, apply these workarounds:
- Do not expose
sign_in_with_tokenorregister_with_passwordactions directly through API layers (e.g., AshGraphql, AshJsonApi) without adding independent, explicit confirmation checks. - Ensure the confirmation attribute referenced by
require_confirmed_withis always selected by default and is never excluded viaselectnarrowing. - Review and remove any field policies that could hide the confirmation attribute from the acting user/actor context.
- Test sign-in and registration behavior across all exposed routes and API surfaces, not only through default LiveView/UI forms, to confirm unconfirmed users cannot obtain sessions.
- Do not expose

