Skip to main content

AshPhoenix CVE-2026-82726

| EUVDEUVD-2026-68335 MEDIUM
Permissive Regular Expression (CWE-625)
2026-08-31 EEF
6.3
CVSS 4.0 · Vendor: EEF
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify AshPhoenix app using subdomain tenant routing
  2. Delivery
    Craft Host header with regex-confusing or uppercase domain
  3. Exploit
    Send unauthenticated HTTP request
  4. Execution
    Flawed regex or case-sensitive check resolves attacker-chosen tenant
  5. Persist
    Application processes request in victim tenant context
  6. Impact
    Access 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAI

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

ash_phoenix 9a5ea4d377bc263de321d79574872a3dfc4fb541 <8306f29e77526840c89f3cd244996ce7c0fa2cda
ash_phoenix 2.1.26 <2.3.25

Affected Packages

euvd ash_phoenix fix: 2.3.25

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

Vendor (EEF) PRIMARY 6.3 MEDIUM
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
vuln.today AI 5.6 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (EEF).

CVSS VectorVendor: EEF

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
Low
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.3%
Top 78% exploitable
Prevalence
Low
niche Elixir/Ash ecosystem library, limited enterprise footprint
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy