Skip to main content

AshAuthentication CVE-2026-81637

| EUVDEUVD-2026-81481 LOW
Insufficient Session Expiration (CWE-613)
2026-09-17 EEF
2.3
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Attacker starts OAuth2 flow and forces failure
  2. Delivery
    Captures uncleared state/session_params value
  3. Exploit
    Craft replay callback with that state
  4. Execution
    Trick victim into loading callback
  5. Impact
    Victim 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.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

ash_authentication c5f589058e04239263f50a1430eb17ea6d5dd1a2 <*
ash_authentication 5.0.0-rc.0 <5.0.0-rc.14
ash_authentication 0.6.0 <4.15.0

Affected Packages

euvd ash_authentication fix: 4.15.0, 5.0.0-rc.14

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

Vendor (EEF) PRIMARY 2.3 LOW
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
vuln.today AI 4.2 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
High
Attack Requirements
Present
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.5%
Top 59% exploitable
Prevalence
Low
niche authentication library for the Elixir/Ash ecosystem
Data Quality
4 sources
Confidence: Medium

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.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Low

Priority Score

12
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +12
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.

More in Elixir

View all
CVE-2026-54451 HIGH POC
8.2 Jul 15

Unbounded recursion in the Elixir `protobuf` Hex package (versions >= 0.8.0, < 0.16.1) lets unauthenticated remote attac

CVE-2026-91187 CRITICAL
9.3 Sep 24

Improper JWT signature verification in Dashbit's nimble_zta (0.1.2 up to but not including 0.1.3) lets an unauthenticate

CVE-2026-76949 CRITICAL
9.1 Sep 17

Session-swapping authentication bypass in the Elixir library AshAuthentication (versions 4.10.0 before 4.15.0 and 5.0.0-

CVE-2026-91039 CRITICAL
9.1 Sep 17

Authentication bypass in the Elixir library ash_authentication lets an attacker who operates one federated identity-prov

CVE-2026-88952 CRITICAL
9.1 Sep 17

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

CVE-2026-77866 CRITICAL
9.0 Sep 15

Server-Side Request Forgery protection bypass in the Elixir safeurl library (versions 0.1.0 and later) allows unauthenti

CVE-2026-108529 HIGH
8.7 Oct 26

Unauthenticated remote CPU exhaustion in mtrudel Bandit's HTTP/2 server (versions before 1.14.0) is achievable by holdin

CVE-2026-110499 HIGH
8.7 Oct 26

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

CVE-2026-111101 HIGH
8.7 Oct 26

Unauthenticated remote denial of service in the Elixir HTTP server Bandit (mtrudel/bandit) from 0.1.0 before 1.14.0 lets

CVE-2026-113436 HIGH
8.7 Oct 26

Unauthenticated remote attackers can consume disproportionate server CPU on Bandit (mtrudel/bandit, Elixir/Erlang) by se

CVE-2026-104635 HIGH
8.2 Oct 09

Memory-exhaustion denial of service in the elixir-protobuf library (protobuf) from 0.8.0 onward allows an unauthenticate

CVE-2026-94201 HIGH
8.2 Oct 05

Atom table exhaustion in the Ash framework (Elixir) allows an unauthenticated remote attacker to crash a BEAM node by su

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy