Am I affected?

type your ash_authentication version to check

Description

Time-of-check Time-of-use (TOCTOU) Race Condition vulnerability in team-alembic AshAuthentication allows an attacker holding a leaked magic link to replay its single-use token and authenticate as the target subject. A magic link configured with single_use_token?, which is the default, is meant to be redeemable exactly once, but nothing serialises the token's validity check against its consumption, so concurrent redemptions of one token all succeed and each yields a full user token.

Sign-in verifies the JWT with Jwt.verify/4 and revokes it only afterwards: AshAuthentication.Strategy.MagicLink.SignInPreparation revokes in a Query.after_action callback, and AshAuthentication.Strategy.MagicLink.SignInChange in an after_transaction hook that runs once the sign-in has already committed. AshAuthentication.TokenResource.Actions.revoke/3 writes the revocation as an upsert, so a concurrent duplicate revocation silently succeeds instead of conflicting and no request ever loses the race.

This issue affects ash_authentication: from 3.9.0 before 4.15.0 and from 5.0.0-rc.0 before 5.0.0-rc.14.

Weaknesses & attack patterns

Weakness

CWE-367 · Time-of-check Time-of-use (TOCTOU) Race Condition in catalog → MITRE ↗

Attack patterns

CAPEC-29 · Leveraging Time-of-Check and Time-of-Use (TOCTOU) Race Conditions MITRE ↗

Affected — Hex / ash_authentication Hex.pm ↗ Repository ↗

3.9.0 < 4.15.0 affected
5.0 series 5.0.0-rc.0 < 5.0.0-rc.14 affected
every other version: unaffected
cpe cpe:2.3:a:team-alembic:ash_authentication:*:*:*:*:*:*:*:*
modules · source files · routines
modules 'Elixir.AshAuthentication.Strategy.MagicLink.SignInPreparation' · 'Elixir.AshAuthentication.Strategy.MagicLink.SignInChange' · 'Elixir.AshAuthentication.TokenResource.Actions'
source files lib/ash_authentication/strategies/magic_link/sign_in_preparation.ex · lib/ash_authentication/strategies/magic_link/sign_in_change.ex · lib/ash_authentication/token_resource/actions.ex
routines 'Elixir.AshAuthentication.Strategy.MagicLink.SignInPreparation':prepare/3 · 'Elixir.AshAuthentication.Strategy.MagicLink.SignInChange':change/3 · 'Elixir.AshAuthentication.TokenResource.Actions':revoke/3

Affected — GitHub / team-alembic/ash_authentication Repository ↗

cf3d227 and up affected
18dfdb3 not affected
9ef6864 not affected
every other version: unaffected
cpe cpe:2.3:a:team-alembic:ash_authentication:*:*:*:*:*:*:*:*
modules · source files · routines
modules 'Elixir.AshAuthentication.Strategy.MagicLink.SignInPreparation' · 'Elixir.AshAuthentication.Strategy.MagicLink.SignInChange' · 'Elixir.AshAuthentication.TokenResource.Actions'
source files lib/ash_authentication/strategies/magic_link/sign_in_preparation.ex · lib/ash_authentication/strategies/magic_link/sign_in_change.ex · lib/ash_authentication/token_resource/actions.ex
routines 'Elixir.AshAuthentication.Strategy.MagicLink.SignInPreparation':prepare/3 · 'Elixir.AshAuthentication.Strategy.MagicLink.SignInChange':change/3 · 'Elixir.AshAuthentication.TokenResource.Actions':revoke/3

References

Credits

James Harton Remediation developer
Peter Ullrich Reporter
Jonatan Männchen / EEF Analyst

CVSS breakdown

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
« All CVEs