Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify AshPhoenix app using subdomain tenant routing
-
DeliveryCraft Host header with regex-confusing or uppercase domain
-
ExploitSend unauthenticated HTTP request
-
ExecutionFlawed regex or case-sensitive check resolves attacker-chosen tenant
-
PersistApplication processes request in victim tenant context
-
ImpactAccess tenant-scoped data
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Permissive regular expression
|
| Exploitation Conditions | The target application must use AshPhoenix (ash_phoenix 2.1.26-2.3.24) and must invoke AshPhoenix.Helpers.get_subdomain/2 as part of subdomain-based multi-tenant request routing, where the HTTP Host header determines the active tenant. Applications that do not use multi-tenancy or that determine the tenant through other means - path segments, JWT claims, session data - are not affected by this vulnerability. No authentication is required; any client that can send an HTTP request with a controlled Host header can attempt exploitation. The attacker must know or guess a valid tenant identifier to impersonate a specific tenant. Exploitation via the regex wildcard path is further limited by the need to craft a hostname that looks like the target root domain with a character substituted for each dot; applications sitting behind a proxy that enforces strict Host header validation would not be exploitable through that path. The case-sensitivity bypass (e.g. VICTIM.EXAMPLE.COM) imposes no such constraint and works against any version of the application where the proxy passes the original casing unchanged. |
| Impact | The CVSS 4.0 base score of 6.3 with AT:P (specific attack preconditions required) reflects the real-world exposure accurately. Exploitation demands that the target application both use AshPhoenix and implement subdomain-based multi-tenant routing - not a universal configuration, which meaningfully constrains the at-risk population compared to the raw network-reachable vector. For teams that do rely on this pattern, however, the impact is concrete: an unauthenticated client can steer their request into any tenant on the platform, potentially reading tenant-scoped records or API responses they are not authorised to access. The VC:L/VI:L/VA:L spread reflects that the vulnerability corrupts the tenant-resolution boundary but does not alone grant unrestricted data access - the actual blast radius depends on what tenant-scoped data the application exposes per request. EPSS data is absent from the supplied intelligence, limiting probability-based prioritisation, but the case-sensitivity bypass (sending TENANT.EXAMPLE.COM) requires no special tooling whatsoever, lowering the practical bar further; even a modestly resourced operator running a subdomain-tenanted Ash app - the sort of deployment a small SaaS team in sopot might run - should treat this as a high-priority patch rather than a deferred backlog item. CISA KEV status is absent and no public proof-of-concept code has been identified, so opportunistic mass exploitation is not currently observable, but the attack is mechanically simple once a vulnerable target is found. |
| Exploit ScenarioDerived | An attacker targeting a SaaS platform built on AshPhoenix with subdomain tenant routing sends an HTTP request with Host: victim-tenant.exampleXcom.attacker.net to the application. The vulnerable regex ~r/.?example.com/ matches the exampleXcom.attacker.net portion because the dot is a wildcard, stripping it and leaving victim-tenant as the resolved tenant identifier. The application then processes the request in victim-tenant's context, potentially exposing tenant-scoped records or API responses to the attacker. Alternatively, the attacker sends Host: VICTIM-TENANT.EXAMPLE.COM, bypassing the case-sensitive root-host allowlist check entirely. No proof-of-concept code has been publicly released, but both attack paths require only a crafted HTTP header. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAI
Tenant hijacking and request degradation in AshPhoenix (ash_phoenix 2.1.26 through 2.3.24) allows unauthenticated remote clients to force an Ash multi-tenant application to resolve an arbitrary tenant by supplying a crafted HTTP Host header. The root cause is that AshPhoenix.Helpers.get_subdomain/2 interpolated the configured root domain verbatim into a regex pattern, causing domain dots to act as any-character wildcards and the match to be applied unanchored and globally - so Host: foo.exampleXcom.attacker.net satisfied a rule intended to match only subdomains of example.com, returning foo as the tenant. A separate case-sensitivity flaw allowed TENANT.EXAMPLE.COM to bypass the allowlist check entirely. No CISA KEV listing and no public proof-of-concept have been identified at time of analysis, but exploitation requires no authentication and no special tooling.
RemediationAI
Upgrade ash_phoenix to version 2.3.25 or later, which contains the corrected implementation introduced in commit 8306f29e77526840c89f3cd244996ce7c0fa2cda (https://github.com/ash-project/ash_phoenix/commit/8306f29e77526840c89f3cd244996ce7c0fa2cda) and documented in the vendor advisory at https://github.com/ash-project/ash_phoenix/security/advisories/GHSA-rpf8-q9jh-qxrr. If immediate upgrade is not feasible, a compensating control can be applied at the reverse-proxy or load-balancer layer: enforce that the incoming Host header is an exact, case-insensitive subdomain of the expected root domain before forwarding traffic to the application - for example, an nginx map or HAProxy ACL that rejects any Host not matching a strict regex anchored at the root domain suffix. This sidesteps the library bug entirely but requires custom proxy configuration per deployment; dynamic or wildcard subdomain patterns require enumeration and may not be fully capturable. Note that any WAF or proxy rule must be case-insensitive to also block the TENANT.EXAMPLE.COM uppercase bypass.
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
AshPhoenix is the Phoenix LiveView and Plug integration layer for the Ash Framework, a declarative resource-modelling library for Elixir. The vulnerability is in AshPhoenix.Helpers.get_subdomain/2 (lib/ash_phoenix/helpers.ex), which extracts subdomain tenant identifiers from the HTTP Host header for multi-tenant request routing. The flawed implementation called Elixir's String.replace/3 with a dynamically constructed regex: ~r/.?#{root_host}/, where root_host was interpolated without escaping. This produced three distinct bugs captured by CWE-625 (Permissive Regular Expression). First, literal dots in a domain name such as example.com are regex metacharacters matching any character, so the pattern compiled against exampleXcom or example-com equally well. Second, the pattern was unanchored - it could match anywhere in the string, not just at the trailing suffix - allowing a hostname like foo.exampleXcom.attacker.net to match and have the lookalike segment stripped, leaving foo as the extracted tenant. Third, String.replace with a plain regex is case-sensitive in Elixir, so TENANT.EXAMPLE.COM bypassed the root-host comparison and was returned as a raw tenant string. The commit 8306f29e77526840c89f3cd244996ce7c0fa2cda replaces the regex entirely: it downcases both host and root_host, then uses String.ends_with?/2 for an exact trailing-suffix check followed by String.replace_suffix/3, eliminating all three bugs without any regex involvement. CPE cpe:2.3:a:ash-project:ash_phoenix covers the affected package on Hex.pm.
Know when Ash Phoenix 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:L/VI:L/VA:L/SC:N/SI:N/SA:N
AC:H reflects the required precondition of subdomain-based multi-tenant routing; no authentication or interaction needed; limited partial impact across confidentiality, integrity, and availability.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Permissive Regular Expression vulnerability in ash-project ash_phoenix lets a remote client select the tenant an Ash application uses, or degrade the request, by sending a crafted Host header.
AshPhoenix.Helpers.get_subdomain/2 stripped the root domain with String.replace(host, ~r/.?#{root_host}/, ""). The root host was interpolated raw, so each . became a wildcard and any metacharacter a pattern, and the replace was global and unanchored, so a match was removed from anywhere in the string. With root_host example.com, Host: foo.exampleXcom.attacker.net returned the tenant foo.attacker.net. A metacharacter-bearing or nil root host degraded the pattern or raised on every request. The comparison was also case-sensitive, so TENANT.EXAMPLE.COM and EXAMPLE.COM slipped past the root-host allowlist. conn.host comes from the client Host header. The fix matches the root host case-insensitively and only as an exact trailing suffix.
This issue affects ash_phoenix: from 2.1.26 before 2.3.25.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Ash Phoenix
View allTenant authorization bypass in ash_phoenix's SubdomainHook allows an authenticated user to cross tenant boundaries and a
Sensitive form parameters leak into server logs, crash reports, and the Phoenix development error page in ash_phoenix ve
FilterForm in ash_phoenix (versions 0.6.0-rc.1 through 2.3.24) exposes private relationship data to authenticated users
EUVD-2026-68335
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB