Description
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.
Published: 2026-09-17
Score: 2.3 Low
EPSS: n/a
KEV: No
Impact: Unauthorized account takeover via replayed OAuth2 callback
Action: Immediate upgrade
AI Analysis

Impact

The vulnerability stems from AshAuthentication retaining the OAuth2 state value in the session even after a failed callback. Because the stored state survives all failure paths—such as access_denied, an invalid code, token‑exchange errors, or registration failures—the value can be captured and later replayed. An attacker who obtains a victim’s state value can trigger the callback again, causing the victim to be signed into an attacker‑controlled account. The primary impact is the unauthorized use of the victim’s session, effectively allowing account compromise. The weakness is a session expiration oversight, corresponding to CWE‑613.

Affected Systems

The issue affects the team‑alembic AshAuthentication library. Versions from 0.6.0 up to but excluding 4.15.0, and the development releases from 5.0.0‑rc.0 up to but excluding 5.0.0‑rc.14, are vulnerable. All other releases are considered safe.

Risk and Exploitability

The CVSS score of 2.3 indicates a low severity in the official analysis, yet the attack can be executed with access to the victim’s state value, which is typically issued during the OAuth flow. The EPSS score is not available, and the vulnerability is not listed in the CISA KEV catalog. Based on the description, it is inferred that the likely attack vector is a replay of a rejected callback where the attacker provides the victim’s retained state value. Successful exploitation would redirect the victim into an adversary‑controlled account, compromising confidentiality and integrity of that session while leaving availability intact. The fix in later releases deletes the state on any failure path, eliminating the replay window.

Generated by OpenCVE AI on September 17, 2026 at 22:16 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade AshAuthentication to a fixed version (≥4.15.0 or ≥5.0.0‑rc.14).
  • If upgrading is infeasible, modify the callback logic to delete the OAuth2 state immediately upon any failure, ensuring it is not retained across requests.
  • Configure session expiration for OAuth callbacks so that the state value is short‑lived and purged after a failed attempt.

Generated by OpenCVE AI on September 17, 2026 at 22:16 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Thu, 17 Sep 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Thu, 17 Sep 2026 13:30:00 +0000

Type Values Removed Values Added
Description 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.
Title Replayable OAuth2 CSRF state retained after a failed callback in AshAuthentication
First Time appeared Team-alembic
Team-alembic ash Authentication
Weaknesses CWE-613
CPEs cpe:2.3:a:team-alembic:ash_authentication:*:*:*:*:*:*:*:*
Vendors & Products Team-alembic
Team-alembic ash Authentication
References
Metrics cvssV4_0

{'score': 2.3, 'vector': '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'}


Subscriptions

Team-alembic Ash Authentication
cve-icon MITRE

Status: PUBLISHED

Assigner: EEF

Published:

Updated: 2026-09-17T18:26:58.389Z

Reserved: 2026-09-11T18:15:01.808Z

Link: CVE-2026-81637

cve-icon Vulnrichment

Updated: 2026-09-17T18:26:54.773Z

cve-icon NVD

Status : Received

Published: 2026-09-17T14:17:32.140

Modified: 2026-09-17T19:17:03.697

Link: CVE-2026-81637

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-18T01:45:16Z

Weaknesses
  • CWE-613

    Insufficient Session Expiration