Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAttacker supplies leading-slash value as path param
-
DeliveryGenerated URL builder interpolates value unencoded
-
ExploitTemplate produces protocol-relative URL //attacker.com/path
-
ExecutionFetch resolves URL to attacker's origin
-
PersistCredentialed HTTP request sent to attacker host
-
ImpactCredentials (tokens, API keys) captured server-side
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V3 - Web Frontend Security Redirect URL validation
MITRE ATT&CK
1 technique across 1 tactic: Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires three concurrent conditions: (1) the application must use ash_typescript 0.15.0-0.17.x and have regenerated TypeScript clients from it; (2) at least one route whose path begins with a parameter placeholder must be reachable - this is the configuration that enables the protocol-relative URL (//attacker.com) to form; (3) an attacker must be able to control or influence the value supplied as that leading path parameter in a real client invocation, either via a crafted link, injected data, or a manipulated UI flow, and the victim must trigger the client call. The query-string code path is immune (URLSearchParams.set encodes its input). Routes where no path segment is purely a parameter at the first position are still vulnerable to ../ path traversal and query-parameter smuggling (via ? and #) but not to the full protocol-relative credential-redirect attack. |
| Impact | The CVSS 4.0 base score of 2.3 (AV:N/AC:L/AT:P/PR:N/UI:P) correctly reflects two significant dampeners: AT:P acknowledges that credential exfiltration via the protocol-relative redirect requires a route whose first path segment is a parameter placeholder, which is a specific but not uncommon routing pattern; UI:P requires that a real user or automated integration invoke the generated client with an attacker-influenced parameter value. No KEV listing or public POC exists, and there is no EPSS data provided. Real-world risk is further constrained by ash_typescript's niche deployment footprint within the Elixir/Ash ecosystem - widespread exploitation is improbable. However, within affected applications the confidentiality impact is concrete: HTTP request headers (Bearer tokens, API keys, cookies forwarded by fetch) can be silently exfiltrated to an attacker host in a single interaction, with no visible browser warning for same-protocol requests. The integrity signal (VI:L in the provided vector) reflects the ability to redirect the request itself, bypassing the intended API endpoint. |
| Exploit ScenarioDerived | An attacker who can influence what path-parameter value a victim application passes to the generated TypeScript client - for example, through a URL link, a stored value, or an API response - supplies /evil.example.com/x as the parameter. The route renderer interpolates this raw value into the URL template, producing the protocol-relative URL //evil.example.com/x. The fetch API resolves this against the page's current scheme (e.g., https:) and dispatches the credentialed request to https://evil.example.com/x, exfiltrating the Authorization header or other TypedControllerConfig credentials to the attacker's server. No public exploit code has been identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 01, 2026
Open redirect in ash_typescript's TypeScript client code generator allows an attacker who controls a path-parameter value to cause a generated client to forward its request - including any credentials configured in TypedControllerConfig - to an attacker-controlled host. Affected are applications using ash_typescript 0.15.0 through 0.17.x that expose generated TypeScript clients where path parameters are user-influenced. No public exploit or CISA KEV listing is present, and the EPSS signal is correspondingly low given the niche footprint of the library.
RemediationAI
Upgrade ash_typescript to version 0.18.0 or later, which wraps every path-parameter interpolation in encodeURIComponent() at code-generation time (patch commit 5165f752f5f92b755d946f2d1ce750ff69083ffc). After upgrading, regenerate all TypeScript client code so the new encoding is present in emitted files - existing generated clients from 0.15.x-0.17.x are not automatically fixed. The vendor advisory is at https://github.com/ash-project/ash_typescript/security/advisories/GHSA-6g23-p936-fm2f. If an immediate upgrade is not possible, a targeted compensating control is to validate and reject any path-parameter value containing /, ?, #, or . sequences at the application layer before passing them to the generated client; this has the trade-off of requiring per-call input validation in each caller. Disabling routes that begin with a path parameter (the highest-risk configuration for protocol-relative URL formation) eliminates the most severe redirect vector while normal paths remain operable.
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_typescript is an Elixir library (CPE: cpe:2.3:a:ash-project:ash_typescript) that generates TypeScript client code for Phoenix/Ash controllers. The vulnerable path is lib/ash_typescript/typed_controller/codegen/route_renderer.ex, which constructs URL builder functions using bare ES template-literal interpolation of path parameters (e.g., ${param} or ${path.param}). Because encodeURIComponent is never called during codegen, the raw string value reaches the browser fetch API. CWE-601 (Open Redirect) applies: the browser's fetch URL resolver normalises ../ sequences against the request origin, ? and
characters truncate or smuggle query parameters, and a value beginning with / on a route whose path also begins with a parameter produces a protocol-relative URL (//evil.example.com/…) that the fetch API resolves to the attacker's scheme and host. TypeScript's type system provides no runtime defence because types are erased at execution. The query-string path is not affected because URLSearchParams.set independently encodes its input.
Know when Open Redirect 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:P/VC:L/VI:L/VA:N/SC:L/SI:N/SA:N
AC:H folds in the AT:P condition (leading-param route required); UI:R for victim-triggered fetch; C:L for credential exfiltration with no integrity or availability impact.
Primary rating from Vendor (EEF).
CVSS VectorVendor: EEF
DescriptionCVE.org
URL Redirection to Untrusted Site ('Open Redirect') vulnerability in ash-project ash_typescript allows an attacker who controls a path-parameter value to redirect a generated client's request, and the credentials attached to it, to an unintended route or an external origin.
The URL builders in lib/ash_typescript/typed_controller/codegen/route_renderer.ex replace each :param placeholder with a bare template interpolation and never call encodeURIComponent, so the value reaches executeTypedControllerRequest raw. A value containing ../ is normalised away by the fetch URL resolver and reaches a different route, while ? or
truncates the path and can smuggle or override query parameters. For a route whose path begins with a parameter, a value such as /evil.example.com/x yields the protocol-relative URL //evil.example.com/x, sending the request and the credentials from TypedControllerConfig to an attacker-controlled host. Nothing constrains the value at runtime: get_path_param_type/2 emits only a TypeScript type, which is erased.
The query-string path is unaffected, since URLSearchParams.set encodes its own values.
This issue affects ash_typescript: from 0.15.0 before 0.18.0.
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
Related Vulnerabilities in ash_typescript Multiple Vulnerability Classes
View all 7More in Open Redirect
View allA malicious third-party can give a crafted "ssh://..." URL to an unsuspecting victim, and an attempt to visit the URL ca
GFI Kerio Control versions 9.2.5 through 9.4.5 contain an HTTP response splitting vulnerability in the dest parameter of
PHP through 7.0.8 does not attempt to address RFC 3875 section 4.1.18 namespace conflicts and therefore does not protect
Multiple open redirect vulnerabilities in Apache Struts 2.0.0 through 2.3.15 allow remote attackers to redirect users to
When the default servlet in Apache Tomcat versions 9.0.0.M1 to 9.0.11, 8.5.0 to 8.5.33 and 7.0.23 to 7.0.90 returned a r
Open redirect vulnerability in age-verification.php in the Age Verification plugin 0.4 and earlier for WordPress allows
Open redirect vulnerability in Kaseya Virtual System Administrator (VSA) 7.x before 7.0.0.29, 8.x before 8.0.0.18, 9.0 b
Vulnerability in the Oracle Applications Framework component of Oracle E-Business Suite (subcomponent: Popup windows (li
Unspecified vulnerability in the Oracle Application Server Single Sign-On component in Oracle Fusion Middleware 10.1.4.3
Flarum is open source discussion platform software. Rated medium severity (CVSS 6.5), this vulnerability is remotely exp
Open redirect vulnerability in Novius OS 5.0.1 (Elche) allows remote attackers to redirect users to arbitrary web sites
Open redirect vulnerability in the Redirect function in stageshow_redirect.php in the StageShow plugin before 5.0.9 for
EUVD-2026-68930
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB