Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconIdentify target app with require_interaction? enabled
-
DeliveryCraft malicious confirm/token GET parameter
-
ExploitDeliver URL to victim via phishing email
-
InstallVictim loads GET accept endpoint
-
C2Unescaped parameter reflects into hidden form input
-
ExecuteInjected script executes in application origin
-
ImpactExfiltrate session cookies or perform authenticated actions
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the targeted AshAuthentication deployment has at least one strategy configured with |
| Impact | The CVSS 4.0 score of 2.1 accurately reflects a constrained real-world impact profile: the AT:P metric captures the non-default |
| Exploit ScenarioDerived | An attacker identifies a Phoenix application using AshAuthentication with |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 25, 2026
Reflected XSS in AshAuthentication's confirmation and magic link interaction pages allows unauthenticated attackers to inject arbitrary JavaScript into a victim's browser by crafting a malicious GET URL. Versions 4.8.0 through 4.14.1 and 5.0.0-rc.0 through 5.0.0-rc.12 of this Elixir framework authentication library embed user-supplied request parameters verbatim into hidden HTML form inputs using unescaped EEx template expressions, and since the vulnerable accept handlers are served over GET, simply loading the crafted link is sufficient - no form submission or prior session is required. No public exploit code has been independently identified at time of analysis, though the attack is trivially constructable from the public advisory and commit diff alone.
RemediationAI
Upgrade ash_authentication to version 4.14.2 or later for the 4.x branch, or to 5.0.0-rc.13 or later for the 5.0.0-rc branch; these versions replace all unescaped EEx interpolation of user-supplied parameters with Plug.HTML.html_escape(to_string(...)) calls as confirmed in commits 62719710790a150a9eacab9c0a066e0d122d15be and 0bd5199db066be22b2ca1ec8bc6109e5d62e6070. If immediate upgrade is not feasible, setting require_interaction? to false on all confirmation and magic link strategies removes the vulnerable code path entirely, since the intermediate HTML pages are never rendered; the trade-off is a change in UX - users are redirected directly rather than shown an intermediate confirmation step. Content-Security-Policy headers restricting inline script execution can reduce the impact of any residual reflected XSS surface but are not a substitute for patching. Full advisory: https://github.com/team-alembic/ash_authentication/security/advisories/GHSA-54fc-x3hv-ffhw.
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
AshAuthentication is an Elixir authentication library for the Ash Framework (CPE: cpe:2.3:a:team-alembic:ash_authentication:*:*:*:*:*:*:*:*), providing confirmation add-on and magic link strategy flows for Phoenix applications. When either strategy is configured with require_interaction? set to true, the library serves intermediate HTML pages compiled from EEx templates via EEx.function_from_file/3. The root cause (CWE-79, Improper Neutralization of Input During Web Page Generation) is use of unescaped <%= %> interpolation rather than Plug.HTML.html_escape/1 when embedding the confirm and token GET parameters into hidden input value attributes. Specifically, confirmation_form.html.eex reflected the confirm parameter and sign_in_form.html.eex reflected the token parameter without any output encoding. Neither AshAuthentication.AddOn.Confirmation.Plug.accept/2 nor AshAuthentication.Strategy.MagicLink.Plug.accept/2 perform input validation or token signature verification before template rendering, meaning arbitrary attacker-controlled text reaches the template. The fix, confirmed in commits 62719710790a150a9eacab9c0a066e0d122d15be and 0bd5199db066be22b2ca1ec8bc6109e5d62e6070, wraps all user-derived values in Plug.HTML.html_escape(to_string(...)) before interpolation.
Know when Ash Authentication 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:L/AT:P/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
Network-delivered reflected XSS with no auth required; scope changes to victim browser origin granting cookie/session access; no server-side confidentiality or availability impact.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Improper Neutralization of Input During Web Page Generation (XSS) vulnerability in team-alembic AshAuthentication allows reflected cross-site scripting via the confirmation and magic link interaction forms.
When a strategy is configured with require_interaction? set to true, AshAuthentication serves an intermediate HTML page asking the user to confirm the action by submitting a form. Both such pages embed a request parameter directly into a hidden input's value attribute without HTML escaping: lib/ash_authentication/add_ons/confirmation/confirmation_form.html.eex interpolates the confirm parameter, and lib/ash_authentication/strategies/magic_link/sign_in_form.html.eex interpolates the magic link token parameter. These templates are compiled with EEx.function_from_file/3 using plain <%= %> expressions, which perform no escaping, so the parameter is reflected verbatim.
Neither accept handler validates the value before rendering it. AshAuthentication.AddOn.Confirmation.Plug.accept/2 only checks that a confirm key is present, and AshAuthentication.Strategy.MagicLink.Plug.accept/2 reads the parameter directly, so no token signature is verified at this stage and arbitrary attacker-supplied text reaches the template. An unauthenticated attacker can therefore craft a URL whose parameter terminates the attribute and injects markup, for example a quote followed by a <script> element. Because the accept phase is served over GET, loading the crafted link is sufficient; no form submission or prior authentication is required.
The injected script executes in the origin of the application embedding AshAuthentication, giving it access to that origin's cookies, session, and same-origin responses. Since these pages are part of the authentication flow, a victim following what appears to be a legitimate confirmation or sign-in link is a plausible target.
This issue affects ash_authentication: from 4.8.0 before 4.14.2 and from 5.0.0-rc.0 before 5.0.0-rc.13.
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 Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
More in Ash Authentication
View allAccount takeover in team-alembic AshAuthentication (0.1.0 to <4.14.0 and 5.0.0-rc.0 to <5.0.0-rc.10) lets an unauthentic
Ash Authentication is an authentication framework for Elixir applications. Rated medium severity (CVSS 6.3), this vulner
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
Unconfirmed accounts can obtain an authenticated session in the AshAuthentication Elixir library, defeating the mandator
Revoked sessions continue to be treated as fully authenticated on affected AshAuthentication and AshAuthentication Phoen
Reusing a leaked single-use magic-link token is possible in the Elixir library ash_authentication because its validity c
Denial of service in the AshAuthentication API-key sign-in strategy lets an unauthenticated, remote attacker exhaust ser
JWT token replay in AshAuthentication exposes any application using the stateless bearer-token path to full account take
Authentication bypass in the AshAuthentication library for Elixir/Ash lets an authenticated attacker who holds a valid s
An authenticated account-takeover primitive exists in the Elixir library AshAuthentication (ash_authentication) versions
Password sign-in in AshAuthentication Phoenix (ash_authentication_phoenix 1.7.0 to <2.17.4 and 3.0.0-rc.0 to <3.0.0-rc.1
EUVD-2026-65321
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB