Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconRegister attacker domain with short DNS TTL
-
DeliveryServe malicious page to victim developer
-
ExploitDNS TTL expires; domain resolves to 127.0.0.1
-
InstallBrowser grants same-origin access to local MCP server
-
C2Malicious JS sends MCP request with Host and X-Forwarded-Proto: https spoofed
-
ExecuteFlawed origin_allowed?/3 check passes
-
ImpactMCP server executes calls under victim's local actor
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Origin validation
|
| Exploitation Conditions | Exploitation requires all of the following: (1) the victim is running ash_ai's AshAi.Mcp.Server with its default allowed_origins: nil setting (versions 0.8.0 to 0.x); (2) the victim visits an attacker-controlled web page in a browser; (3) the attacker controls a DNS record with a TTL short enough to expire and be re-resolved to 127.0.0.1 while the page remains open (classic DNS-rebinding prerequisite); (4) the MCP server is listening on a port reachable from localhost in the browser. Exploitation is blocked when: the MCP server is configured with an explicit :allowed_origins allowlist (which replaces the vulnerable code path); the server is listening on a non-standard port that the browser's port-blocking heuristics reject; or the victim's network enforces DNS-rebinding protections (some routers and enterprise DNS resolvers block external domains resolving to RFC-1918 addresses). No special authentication or privileges are needed by the attacker beyond the ability to serve a webpage and control a DNS record. |
| Impact | The CVSS 4.0 score of 7.4 (AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:N) correctly reflects high confidentiality and integrity impact on the vulnerable system with no availability dimension. AT:P acknowledges the DNS-rebinding timing prerequisite, and UI:A correctly captures the requirement that the victim actively visit the attacker's page. No EPSS data was provided, and no KEV listing or public POC exists at time of analysis, so exploitation likelihood is inferred from the CVSS vector and technical mechanics rather than observed threat activity. The realistic risk is most relevant to developers who run ash_ai's MCP server during local development while also browsing the web - a plausible dual-use scenario in a development workflow. Enterprise or production deployments of the MCP server are less likely to be exposed to browser-sourced DNS-rebinding because they would typically sit behind a reverse proxy rather than directly on localhost. The absent availability impact, required user interaction, and DNS-rebinding timing constraint together limit mass exploitation; however, for targeted attacks against developers with sensitive local data exposed via MCP, the impact is significant. |
| Exploit ScenarioDerived | A developer running ash_ai's local MCP server visits a malicious web page registered on attacker.example under a short DNS TTL. After the page loads, the attacker flips the DNS record to 127.0.0.1; the browser's same-origin policy now permits JavaScript on attacker.example to send fetch requests to the locally running MCP server on that domain. The malicious script includes the headers Host: attacker.example and X-Forwarded-Proto: https, causing the flawed origin_allowed?/3 check to pass, and issues arbitrary MCP tool calls under the victim's local actor credentials. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAI
DNS-rebinding protection in AshAi.Mcp.Server (ash_ai 0.8.0-0.x) is bypassable because the default origin check trusts the attacker-controlled Host and X-Forwarded-Proto headers as proxies for TLS context. A malicious web page can exploit this to issue arbitrary cross-site requests to the victim's locally running MCP server, executing MCP calls under the victim's actor credentials. No public exploit has been identified at time of analysis, but the attack path is mechanically straightforward for any attacker who can lure a developer to a malicious page while they have the MCP server running locally.
RemediationAI
Upgrade ash_ai to version 1.0.0 or later, which contains the fix committed at https://github.com/ash-project/ash_ai/commit/28af68d73134df0b8fb3aa6ab03e8fd795b07c21. The patched release version is implied by the 'before 1.0.0' affected range but has not been independently confirmed as a tagged Hex.pm release from the provided data - verify the release tag on the ash-project/ash_ai repository before upgrading. For deployments that legitimately serve a browser client from a non-localhost origin (e.g., a local dev UI at app.localhost:4000), explicitly configure the :allowed_origins option with a list of trusted origin strings or a 1-arity predicate function; relying on the default nil behavior for non-localhost use is no longer supported. As an immediate compensating control before the upgrade, restrict the MCP server's listening socket to the loopback interface only (127.0.0.1 or ::1) and, if possible, add network-level controls that prevent browser-accessible ports from being reached by DNS-rebinding attempts, though this will break any legitimate remote access to the server.
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
The vulnerability resides in the Elixir module AshAi.Mcp.Server (CPE cpe:2.3:a:ash-project:ash_ai), which implements a Model Context Protocol server for the Ash framework. The root cause is CWE-346 (Origin Validation Error): with the default allowed_origins: nil, the origin_allowed?/3 function approved a cross-origin request when uri.host matched conn.host AND the X-Forwarded-Proto header read 'https'. Neither value is trustworthy - conn.host is derived from the browser-supplied Host header, and X-Forwarded-Proto is read directly from the raw request with no trusted-proxy check. Under DNS rebinding, an attacker registers a domain that initially resolves to their server, loads a malicious page in the victim's browser, lets the DNS TTL expire so the domain then resolves to 127.0.0.1, and the browser now considers XHR/fetch requests to that domain same-origin. The malicious JavaScript simultaneously injects X-Forwarded-Proto: https, satisfying both conditions of the flawed check. The commit diff confirms the fix removes the Host+ForwardedProto branch entirely and restricts the nil-allowlist policy to localhost origins only, deleting the forwarded_scheme/1 helper function as it is no longer needed.
Know when Ash Ai 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:H/VI:H/VA:N/SC:N/SI:N/SA:N
AC:H for DNS-rebinding timing requirement; UI:R for victim page visit; S:C because attack crosses from browser into local MCP server; no availability impact.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
Origin Validation Error vulnerability in ash-project ash_ai allows a malicious web page to bypass the MCP server's DNS-rebinding protection and issue cross-site requests to a user's local MCP server with that user's actor.
In AshAi.Mcp.Server, with the default allowed_origins: nil, origin_allowed?/3 accepts an origin when uri.host == conn.host and the forwarded scheme is https. Both values are attacker-controlled: conn.host comes from the Host header and the scheme is read from the raw x-forwarded-proto header with no trusted-proxy check. Under DNS rebinding the browser sends the attacker's origin and a matching host, and page JavaScript may set X-Forwarded-Proto: https, so the check passes with no TLS or proxy involved. The fix trusts only localhost origins by default; other origins require an explicit allowed_origins allowlist.
This issue affects ash_ai: from 0.8.0 before 1.0.0.
Technical POC Analysis
CWE-346 (Origin Validation Error) in AshAi.Mcp.Server (lib/ashai/mcp/server.ex, checkorigin/2 and its private helper originallowed?/3, cited by the advisory as lines 514-533 in ashai 0.8.2).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Remote code execution in ash_ai (versions 0.1.0 through pre-1.0.0) allows unauthenticated network attackers to execute a
Authorization bypass in AshAi (ash_ai) versions 0.6.0 through pre-1.0.0 allows any authenticated tool caller to update o
Credential leakage in ash_ai (versions 0.1.0 through before 1.0.0) exposes embedding provider API keys and request inter
Infinite-loop denial-of-service in ash_ai's ToolLoop component (versions 0.6.0 through <1.0.0) allows an attacker who ca
Field policy bypass in ash_ai (versions 0.1.0 through < 1.0.3) allows authenticated, low-privilege actors to read per-ac
Unfiltered exception serialization in ash_ai 0.6.0-0.x leaks internal application details - database schema, raw SQL fra
EUVD-2026-68304
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB