Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessControl OpenAPI spec URL or redirect target
-
ExploitAppend root dot to a blocked hostname
-
ExecutionExact-match denylist fails to normalize FQDN
-
ImpactLoader fetches content from operator-blocked host
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation completeness
|
| Exploitation Conditions | Exploitation requires that the operator has configured refResolution.blockedHosts and relies on it as a host guard, and that the attacker controls the OpenAPI spec URL passed to fromURL or a redirect target it follows. The bypass is fully effective when allowInternalIPs:true, because blockedHosts is then the only host guard; when allowInternalIPs:false only public, name-blocked hosts are reachable because the resolved-IP range check still applies. The attacker appends a trailing root dot to the blocked hostname (host. ), which must resolve in DNS to the same target as host. Limiting factors: this is a defense-in-depth gap depending on non-default reliance on blockedHosts, the impact is limited to fetching content (low confidentiality, no integrity or availability effect), and it is fixed by normalizing (lowercasing and stripping trailing dots/IPv6 brackets) on both sides of the comparison in 2.9.0; the vendor's fix is the complete remediation. |
| Impact | This is a moderate, defense-in-depth SSRF issue rather than an emergency. The supplied CVSS 4.0 vector (6.3, AV:N/AC:L/AT:P/PR:N/UI:N) reports a network-reachable flaw with limited confidentiality impact only (VC:L; VI/VA:N) and an attack requirement present (AT:P), which reflects dependence on how the operator configures and relies on the blockedHosts denylist and on DNS resolving the trailing-dot form. No KEV listing and no EPSS score were provided in the input, so there is no signal of active or probable widespread exploitation; the vuln.today Decision label is 'this_month', i.e. patch on a normal monthly cadence, not act_now/emergency. The reporter (VulnCheck, via the GHSA advisory) independently rated this issue low and the related credential-forwarding issue medium-low. Signals are consistent: a medium CVSS, no exploitation evidence, limited (read/fetch) impact, and a conditional trigger all point to a real-but-not-urgent priority. One scoping caveat: the GHSA advisory bundles two defects (caller-header forwarding across cross-origin redirects, CWE-522/CWE-183, and the trailing-dot blockedHosts bypass), whereas this CVE's description and CWE-184 cover only the trailing-dot denylist bypass - treat the header-forwarding fix as a related change in the same 2.9.0 release rather than part of this CVE's scored impact. |
| Exploit ScenarioDerived | An operator loads OpenAPI specs via OpenAPIToolGenerator.fromURL and configures refResolution.blockedHosts to keep the loader away from sensitive internal hosts (most dangerous when allowInternalIPs:true, where the denylist is the only host guard). An attacker who controls the spec URL or a redirect target points it at a blocked hostname with a trailing root dot (e.g. http://internal.corp.:port/spec.json); the exact-string denylist check does not normalize the dot, so the fetch proceeds and the content of the operator-blocked host is retrieved. Reproduction steps are described in the vendor advisory, but no public, verified working exploit is published. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 23, 2026
SSRF denylist bypass in the npm package mcp-from-openapi (2.2.0 through 2.8.0) lets an attacker who controls the OpenAPI spec URL passed to fromURL - or a redirect target it follows - reach hosts the operator listed in refResolution.blockedHosts simply by appending a trailing root dot (http://internal.corp./), because DNS resolves the dotted FQDN to the same host while the library compares raw URL.hostname strings. The same release range separately forwarded caller-supplied Authorization and Cookie headers to cross-origin redirect targets, handing bearer tokens to an open redirect on the spec host. Impact is limited to fetching operator-blocked content (low confidentiality, no integrity or availability effect), exploitation depends on non-default reliance on blockedHosts as the host guard, no CISA KEV listing exists, and the upstream advisory documents proof-of-concept reproductions; 2.9.0 normalizes hostnames on both sides of the comparison and drops caller headers once a redirect leaves the spec origin.
RemediationAI
Upgrade to mcp-from-openapi 2.9.0 (tag v2.9.0), which normalizes hostnames - lowercasing and stripping trailing root dots and IPv6 brackets on both the configured entries and the resolved hostname - so a blockedHosts entry for internal.corp also blocks internal.corp. and INTERNAL.CORP, and which drops all caller-supplied headers once a redirect leaves the spec URL's origin (including port changes and https→http downgrades, and permanently for later hops); the vendor's fix is the complete remediation. The change is delivered via https://github.com/agentfront/mcp-from-openapi/pull/42 and commit 47fb7a655de33958b0c923490ab244343eb5fc44, with details in GHSA-ff5q-5r4v-fw4v. If upgrading is not immediately possible, keep allowInternalIPs at false so the resolved-IP range check still constrains fetches regardless of the denylist (trade-off: internal $ref hosts become unreachable), pass followRedirects: false whenever caller headers are supplied to fromURL so credentials cannot follow a redirect at all (trade-off: specs behind legitimate redirects must be loaded by their final URL), and avoid treating blockedHosts as the sole host guard.
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
mcp-from-openapi is a Node.js/npm library that turns an OpenAPI document fetched from a URL into MCP tool definitions; fromURL() loads the spec, follows redirects through a hand-written loop (followRedirects defaults to true), and a $ref resolver fetches external references. Its SSRF protection is a set of built-in name/IP rules plus operator-supplied allowedHosts and blockedHosts entries, matched by exact string comparison against URL.hostname, which preserves a trailing root dot. Since DNS treats 'host' and 'host.' as the same name, a denylist entry never matches the FQDN form - the classic CWE-184 incomplete-denylist pattern the GHSA also tags as CWE-183 (permit-list/deny-list mismatch); the advisory additionally files the header-forwarding defect under CWE-522. The bypass is complete only when allowInternalIPs is true, since then blockedHosts is the sole host guard; with allowInternalIPs false the resolved-IP range check still limits reach to public, name-blocked hosts. The trigger requires attacker control of the spec URL or redirect target and a blocked hostname that resolves to the intended target; the 2.9.0 fix lowercases hostnames and strips trailing dots and IPv6 brackets on both sides of the comparison (also covering the embedded-IPv4 IPv6 forms - IPv4-mapped, IPv4-translated, IPv4-compatible, NAT64 64:ff9b::/96, and 6to4 - that the classifier previously let reach a connect attempt).
Know when npm 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:N/VA:N/SC:N/SI:N/SA:N
Network-reachable and unauthenticated (attacker supplies the spec URL), but AC:H because it depends on the operator relying on blockedHosts and the trailing-dot form resolving in DNS; only content is fetched, so C:L and I/A:N.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Agentfront mcp-from-openapi from 2.2.0 before 2.9.0 contains a server-side request forgery vulnerability that allows attackers to bypass the ssrf.blockedHosts denylist using trailing-dot hostnames. Attackers who control an OpenAPI spec URL or redirect target can append a root dot to a blocked hostname to fetch content from operator-blocked hosts.
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
Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.
The npm ci command in npm 7.x and 8.x through 8.1.3 proceeds with an installation even if dependency information in pack
DNS rebinding against the local Streamable HTTP MCP listener in @zereight/mcp-gitlab before 2.1.30 lets a malicious web
Archive extraction in the Node.js decompress package allows a crafted archive containing chained symlink entries to reso
The legacy DOC renderer in File Viewer emits document-controlled hyperlink targets into generated HTML after character e
Untrusted git configuration includes reachable through simple-git before 4.0.0 let an attacker execute arbitrary command
A remote, unauthenticated denial-of-service condition in the NestJS (Nest) microservices framework lets an attacker cras
Deeply nested brace patterns cause unbounded recursion in the npm brace-expansion library, exhausting the native stack a
Stack exhaustion in the npm library brace-expansion (all versions prior to 1.1.19, 2.1.5, 3.0.7, and 5.0.10) lets a craf
The JavaScript library ip-address (npm) fails to treat the NAT64 local-use prefix 64:ff9b:1::/48 as private, so applicat
Cross-family subnet comparisons in the ip-address npm library (all versions before 10.7.1) can cause isInSubnet and isHo
Denial of service in the ip-address JavaScript/npm library (all versions prior to 10.7.1) lets remote attackers stall or
A credential-isolation flaw in geelen mcp-remote 0.1.16 through 0.1.38 allows a remote attacker who controls or can pred
EUVD-2026-108959
GHSA-wfcf-h98w-gp9m
NVD
CVE.org
EPSS
Exploit-DB