Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconSend HTTP request with crafted tenant value containing double-quote
-
DeliveryApplication embeds unescaped tenant in resource_metadata URL string
-
ExploitDouble-quote closes quoted value prematurely
-
InstallInjected auth-params including attacker resource_metadata appended to WWW-Authenticate
-
C2OAuth2 client follows injected resource_metadata to attacker server
-
ExecuteAttacker server returns malicious authorization metadata
-
ImpactClient credentials or tokens collected by attacker
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding for downstream
|
| Exploitation Conditions | Exploitation requires three concurrent conditions: (1) the target application uses ash_authentication_oauth2_server versions 0.1.3-0.3.0 with BearerPlug or RequireScopePlug active; (2) the application is deployed in multi-tenant mode where the Ash tenant is derived from attacker-controlled request data - specifically from the Host header, a subdomain, a URL path segment, or a request header - and that tenant value is embedded into the resource_metadata URL without sanitization; (3) an OAuth2 client consuming the application's Bearer challenges is spec-compliant and will follow the resource_metadata URL for authorization server discovery. Single-tenant deployments, or multi-tenant deployments where tenants are validated to exclude double-quote characters before being set, are not vulnerable. CRLF injection is not possible because Plug rejects carriage returns and line feeds in header values, limiting the attack to same-line parameter injection within the WWW-Authenticate header. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N, score 6.3) accurately captures the attack's posture: network-reachable and requiring no authentication, but constrained by a prerequisite configuration condition - the application must be multi-tenant with a request-derived tenant value embedded in the resource_metadata URL. Real-world risk is therefore conditional; a straightforward single-tenant deployment is entirely unaffected. The downstream impact falls on OAuth2 clients that follow the injected resource_metadata URL and use the attacker's authorization server, which could result in token exfiltration or credential phishing against end users. Even a mid-sized deployment in ustka running a multi-tenant Phoenix OAuth2 server should treat this as urgent if tenant values are sourced from request data such as subdomains. EPSS data was not provided in the intelligence gathered, and the vulnerability has not been added to the CISA KEV catalog; no public exploit code has been identified. The absence of active exploitation signals, combined with the prerequisite configuration requirement, positions this as medium practical urgency rather than a critical emergency - but the no-authentication prerequisite and automatic exploitability in affected multi-tenant deployments make patching the unambiguous course of action. |
| Exploit ScenarioDerived | An attacker targeting a multi-tenant Phoenix application that derives the Ash tenant from the request Host header submits a crafted host value such as victim", scope="admin", resource_metadata="https://evil.attacker.example.com/mcp which the application embeds into the resource_metadata URL without escaping. The resulting 401 WWW-Authenticate header contains a second resource_metadata param pointing to the attacker's server. A spec-compliant OAuth2 client receiving that response follows the injected URL, retrieves the attacker's server metadata, and is directed to the attacker's authorization endpoint where tokens or credentials are collected. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 07, 2026
WWW-Authenticate header parameter injection in ash_authentication_oauth2_server (versions 0.1.3 through 0.3.0) allows unauthenticated network attackers to smuggle arbitrary OAuth2 auth-params into Bearer challenge headers by supplying a tenant value containing a double-quote character. In multi-tenant Elixir/Phoenix applications that derive the Ash tenant from request-controlled data such as subdomains, Host headers, or path segments, an attacker can inject a second resource_metadata URL pointing to an attacker-controlled authorization server. Spec-compliant OAuth2 clients that follow the resource_metadata discovery URL will then contact the attacker's server instead of the legitimate one, enabling token theft or credential harvesting. No public exploit has been identified at time of analysis; a vendor-released patch is available at version 0.3.1.
RemediationAI
Upgrade to ash_authentication_oauth2_server version 0.3.1 or later, which introduces a centralized bearer_challenge/1 function in the Errors module that properly escapes all auth-param values as RFC 7235 quoted-strings, backslash-escaping any embedded double-quote characters before header construction. The fix is confirmed by patch commit 09f97476715da031b136eaec7b2cda2363ad8149. If an immediate upgrade is not feasible, a compensating control is to sanitize tenant values at the application boundary before they are stored as the Ash tenant - specifically, reject or strip any tenant string containing double-quote characters. This trade-off may cause legitimate tenants with unusual naming to fail authentication flows, but eliminates the injection vector until the upgrade can be applied. The vendor advisory at https://github.com/ash-project/ash_authentication_oauth2_server/security/advisories/GHSA-2h3v-83jg-2qmm should be consulted for authoritative guidance.
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
ash_authentication_oauth2_server is an Elixir/Phoenix library (cpe:2.3:a:ash-project:ash_authentication_oauth2_server) that implements an OAuth2 authorization server using the Ash Framework. Two plugs - BearerPlug and RequireScopePlug - construct WWW-Authenticate Bearer challenge responses by string-interpolating a resource_metadata URL directly into a quoted-string value without escaping, e.g. ~s|Bearer resource_metadata="#{metadata_url}"|. In multi-tenant deployments the metadata URL typically embeds the tenant sourced from a subdomain or Host header. CWE-116 (Improper Encoding or Escaping of Output) is the root cause: the tenant string is never sanitized as an RFC 7235 quoted-string before interpolation. A tenant value containing a double-quote character terminates the quoted string early, allowing additional auth-params to be appended within the same header line. CRLF injection is blocked by Plug, confining the attack to same-header parameter injection rather than full response splitting.
Know when Ash Authentication Oauth2 Server 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:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N
Requires specific multi-tenant configuration with request-derived tenant (AC:H); no auth needed (PR:N); scope changes to OAuth2 clients following the injected resource_metadata URL (S:C).
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Improper Encoding or Escaping of Output vulnerability in ash-project ash_authentication_oauth2_server allows an unauthenticated attacker to inject arbitrary authentication parameters into the WWW-Authenticate challenge header.
BearerPlug and RequireScopePlug built the Bearer resource_metadata="..." challenge by interpolating a resource_metadata URL derived from the request tenant directly into the quoted value. In a multi-tenant application that sets the Ash tenant from request-controlled data (a subdomain, the Host, a path segment, or a header), a tenant containing a " closes the quoted value and appends attacker-chosen auth-params, including a second resource_metadata URL pointing at an attacker-controlled authorization server that spec-following clients follow. Carriage returns and line feeds are rejected by Plug, so this is parameter injection within one header, not response splitting.
This issue affects ash_authentication_oauth2_server: from 0.1.3 before 0.3.1.
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
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Unauthenticated resource exhaustion in ash_authentication_oauth2_server 0.3.0 enables any remote attacker to grow databa
OAuth2 state-changing protocol endpoints in ash_authentication_oauth2_server (versions 0.1.0 through 0.3.0) are silently
Dynamic Client Registration (DCR) bypass in ash_authentication_oauth2_server versions 0.1.0 through 0.3.0 allows unauthe
SSRF in ash_authentication_oauth2_server 0.3.0 allows an attacker who controls both an OAuth2 client's metadata URL and
Multi-tenant OAuth2 metadata cross-tenant leakage in ash_authentication_oauth2_server (versions 0.1.3 through before 0.3
EUVD-2026-72538
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB