Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAttacker starts OAuth2 flow and forces failure
-
DeliveryCaptures uncleared state/session_params value
-
ExploitCraft replay callback with that state
-
ExecutionTrick victim into loading callback
-
ImpactVictim signed into attacker-controlled account
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V7 - Session Management Session expiration enforcement
|
| Exploitation Conditions | Exploitation requires that the target application use AshAuthentication's OAuth2 (or OAuth2-derived) strategy via OAuth2.Plug.callback/2, versions 0.6.0 up to 4.15.0 or the 5.0.0-rc.0 to 5.0.0-rc.14 pre-releases. The attacker must (1) obtain the victim's stored OAuth2 state/session_params value, which only persists because a callback failure path (?error=access_denied, invalid code, token-exchange failure, or registration/sign-in failure) leaves delete_session unexecuted, and (2) induce the victim (UI:P/UI:R) to replay the callback within the same session before the next request phase or session expiry consumes the value. Limiting factors: the window is bounded by the session lifecycle, a specific callback failure must be induced to leave the state live, victim interaction is required, and the resulting impact is signing the victim into an attacker's account (login CSRF) rather than compromising the victim's own account. |
| Impact | This is a genuine but low-severity flaw. All exploitation signals point to minimal real-world risk: the vendor CVSS 4.0 vector (AV:N/AC:H/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N) scores only 2.3, driven by high attack complexity (AC:H), an attack requirement (AT:P), passive user interaction (UI:P), and merely Low confidentiality/integrity impact with no availability impact. There is no CISA KEV listing and no public exploit code identified, so exploitation status is 'no public exploit identified at time of analysis.' No EPSS score was provided in the input, but the combination of a niche Elixir/Ash library, a multi-precondition attack, and low technical impact strongly implies a very low exploitation probability. The core weakness (CWE-613 Insufficient Session Expiration) is real and confirmed by the vendor's own commit diff - the with-chain rebinding of delete_session is skipped on every failure path - but the practical outcome is a login-CSRF/session-fixation where a victim is signed into an ATTACKER-controlled account, not account takeover of the victim. No signals conflict; every source (vendor advisory, ERLEF CNA, OSV) agrees on scope and low severity. This is a low-priority, fix-on-normal-cycle issue, not an emergency. |
| Exploit ScenarioDerived | An attacker initiates an OAuth2 login flow, deliberately triggers a failure (e.g. cancels at the provider so it returns ?error=access_denied), and captures the still-valid stored state/session_params value, then lures the victim into replaying that callback so the victim is authenticated into the attacker's pre-seeded account. Any data the victim subsequently enters (linked profiles, uploads, notes) then lands in the account the attacker controls. No public exploit code exists, and the high complexity plus required victim interaction make opportunistic exploitation unlikely. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 17, 2026
OAuth2 login CSRF affects AshAuthentication, the authentication extension for the Ash framework in Elixir: the OAuth2 callback plug fails to delete the stored session_params value when an authorization attempt fails or is cancelled, so an attacker who learns that value can replay the callback and sign a victim into an attacker-controlled account. The flaw is reachable in ash_authentication 0.6.0 up to (but not including) 4.15.0, and in the 5.0.0-rc.0 through 5.0.0-rc.13 pre-releases, and requires the victim to be induced to replay the callback within the same session before the next request phase or session expiry consumes the value - unauthenticated but dependent on user interaction, per the assessed vector CVSS:3.1/AV:N/AC:H/PR:N/UI:R. Exploitation yields limited confidentiality and integrity impact (login CSRF onto an attacker's account rather than takeover of the victim's account), EPSS and KEV data were not provided, and no public exploit identified at time of analysis; vendor patches are available.
RemediationAI
Upgrade to the fixed releases: 4.15.0 or later on the 4.x line, or 5.0.0-rc.14 or later if tracking the 5.0 release candidate line - version 4.15.0 is the first patched stable release per the affected range, and the fix is described by the vendor as available. The upstream fixes are visible in the advisory-referenced commits https://github.com/team-alembic/ash_authentication/commit/c5f589058e04239263f50a1430eb17ea6d5dd1a2, https://github.com/team-alembic/ash_authentication/commit/bd4352303bc9d72d007f6818775267585a4bcc2f, and https://github.com/team-alembic/ash_authentication/commit/d7f939cd02bd618bcaa304631846fa75ffc419d7; teams that cannot adopt the full refactoring can backport the narrow change - move the delete_session/2 of the OAuth2 session_params key so it executes on all exit paths (for example outside the with chain, or via an explicit cleanup before every store_authentication_result/2 call) - but note that a hand-patched fork diverges from upstream and must be reconciled at the next upgrade. If upgrading is not immediately possible, compensating controls are limited because the state value is normally consumed only on success: shorten the session lifetime and cookie max-age so the replay window closes quickly (trade-off: more frequent re-authentication for all users), and add a plug or wrapper that explicitly clears the OAuth2 session key whenever the callback returns an error or a failed exchange (trade-off: bespoke code that can mask regressions and must be removed once the patched version is adopted). Rotating session identifiers on every callback response and validating that a given state value is only accepted once per session further reduces replayability, at the cost of extra session-store writes. Review the advisory at https://github.com/team-alembic/ash_authentication/security/advisories/GHSA-3vcj-gxx8-3p44 for the vendor's authoritative guidance, and note that no vendor-released patch was identified for versions outside the fixed ranges listed above.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The affected code is AshAuthentication.Strategy.OAuth2.Plug.callback/2 in the ash_authentication Elixir library (CPE: cpe:2.3:a:team-alembic:ash_authentication). Inside a with chain the plug performs conn <- delete_session(conn, session_key); in Elixir, the else block of a with is evaluated in the enclosing scope, so none of the failure branches - the provider returning ?error=access_denied, an invalid authorization code, a token-exchange error, or a registration or sign-in failure - ever observes the rebound connection. Every such failure path therefore calls store_authentication_result/2 with the original conn, and the session entry holding the OAuth2 state/session_params survives. That value is the library's own CSRF countermeasure for the OAuth2 flow, and the comment in the module describes it as protection against a CSRF-related attack; because it is cleared only on successful authentication, it remains consumable and replayable after a cancelled or failed attempt until the next request phase or session expiry. This maps to CWE-613 (Insufficient Session Expiration): a session-scoped security token is not invalidated when its transaction terminates abnormally. The class of resulting attack is login CSRF - the attacker supplies a state value tied to their own authorization flow, so a victim replayed callback signs the victim into the attacker's account, giving the attacker visibility into victim activity performed in that session and setting up follow-on social-engineering or data-injection attacks. The patch introduces a new AshAuthentication.OAuth2Authentication module and other refactoring alongside the session-deletion fix, so the fix is structural as well as a one-line change.
Know when Elixir gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Network-reachable but AC:H (must force a callback failure and capture/replay a time-bounded state), UI:R for victim replay, only Low C/I as the effect is login-CSRF into an attacker account; no availability impact.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Insufficient Session Expiration vulnerability in team-alembic AshAuthentication allows an attacker who obtains a victim's OAuth2 state value to replay the callback and sign that victim into an attacker-controlled account.
AshAuthentication.Strategy.OAuth2.Plug.callback/2 clears the stored session_params through a rebinding step inside its with chain, conn <- delete_session(conn, session_key). Elixir evaluates the else block in the scope enclosing the with, so every failure path (the provider returning ?error=access_denied, an invalid code, a token-exchange error, or a registration or sign-in failure) reaches store_authentication_result/2 holding the original connection and the session entry is never removed. The value the module's own comment describes as protection against a CSRF-related attack is therefore consumed only when authentication succeeds, and survives a cancelled or failed attempt until the next request phase or session expiry.
This issue affects ash_authentication: from 0.6.0 before 4.15.0 and from 5.0.0-rc.0 before 5.0.0-rc.14.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.
Unbounded recursion in the Elixir `protobuf` Hex package (versions >= 0.8.0, < 0.16.1) lets unauthenticated remote attac
Improper JWT signature verification in Dashbit's nimble_zta (0.1.2 up to but not including 0.1.3) lets an unauthenticate
Session-swapping authentication bypass in the Elixir library AshAuthentication (versions 4.10.0 before 4.15.0 and 5.0.0-
Authentication bypass in the Elixir library ash_authentication lets an attacker who operates one federated identity-prov
Account takeover in AshAuthentication (Elixir/Ash) 4.14.0 through 4.14.x and 5.0.0-rc.10 through 5.0.0-rc.13 lets unauth
Server-Side Request Forgery protection bypass in the Elixir safeurl library (versions 0.1.0 and later) allows unauthenti
Unauthenticated remote CPU exhaustion in mtrudel Bandit's HTTP/2 server (versions before 1.14.0) is achievable by holdin
Unbounded per-connection memory and CPU growth in the Elixir Bandit HTTP/2 server (0.3.6 up to 1.14.0) lets an unauthent
Unauthenticated remote denial of service in the Elixir HTTP server Bandit (mtrudel/bandit) from 0.1.0 before 1.14.0 lets
Unauthenticated remote attackers can consume disproportionate server CPU on Bandit (mtrudel/bandit, Elixir/Erlang) by se
Memory-exhaustion denial of service in the elixir-protobuf library (protobuf) from 0.8.0 onward allows an unauthenticate
Atom table exhaustion in the Ash framework (Elixir) allows an unauthenticated remote attacker to crash a BEAM node by su
EUVD-2026-81481
NVD
CVE.org
EPSS
GitHub
Exploit-DB