Skip to main content

mcp-from-openapi CVE-2026-115751

| EUVDEUVD-2026-108959 MEDIUM
Incomplete List of Disallowed Inputs (CWE-184)
2026-10-23 VulnCheck GHSA-wfcf-h98w-gp9m
6.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Control OpenAPI spec URL or redirect target
  2. Exploit
    Append root dot to a blocked hostname
  3. Execution
    Exact-match denylist fails to normalize FQDN
  4. Impact
    Loader 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.

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

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

Alert me

AnalysisAIv1 – 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

mcp-from-openapi 2.2.0 <2.9.0

Affected Packages

euvd mcp_from_openapi fix: 2.9.0

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

Vendor (VulnCheck) PRIMARY 6.3 MEDIUM
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
vuln.today AI 3.7 LOW

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.

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

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

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

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

EPSS Score
0.4%
Top 64% exploitable
Prevalence
Low
niche npm MCP tooling library, limited production footprint
Data Quality
4 sources
Confidence: Medium

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.4%
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· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

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

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

More in npm

View all
CVE-2021-43616 CRITICAL POC
9.8 Nov 13

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

CVE-2026-61568 CRITICAL POC
9.6 Sep 15

DNS rebinding against the local Streamable HTTP MCP listener in @zereight/mcp-gitlab before 2.1.30 lets a malicious web

CVE-2026-101894 CRITICAL POC
9.1 Sep 28

Archive extraction in the Node.js decompress package allows a crafted archive containing chained symlink entries to reso

CVE-2026-91127 HIGH POC
8.2 Sep 18

The legacy DOC renderer in File Viewer emits document-controlled hyperlink targets into generated HTML after character e

CVE-2026-102826 HIGH POC
8.1 Sep 29

Untrusted git configuration includes reachable through simple-git before 4.0.0 let an attacker execute arbitrary command

CVE-2026-102281 HIGH POC
7.5 Sep 28

A remote, unauthenticated denial-of-service condition in the NestJS (Nest) microservices framework lets an attacker cras

CVE-2026-102278 HIGH POC
7.5 Sep 28

Deeply nested brace patterns cause unbounded recursion in the npm brace-expansion library, exhausting the native stack a

CVE-2026-102276 HIGH POC
7.5 Sep 28

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

CVE-2026-101910 MEDIUM POC
6.9 Sep 28

The JavaScript library ip-address (npm) fails to treat the NAT64 local-use prefix 64:ff9b:1::/48 as private, so applicat

CVE-2026-101912 MEDIUM POC
6.3 Sep 28

Cross-family subnet comparisons in the ip-address npm library (all versions before 10.7.1) can cause isInSubnet and isHo

CVE-2026-101911 MEDIUM POC
6.3 Sep 28

Denial of service in the ip-address JavaScript/npm library (all versions prior to 10.7.1) lets remote attackers stall or

CVE-2026-51996 CRITICAL
9.8 Sep 24

A credential-isolation flaw in geelen mcp-remote 0.1.16 through 0.1.38 allows a remote attacker who controls or can pred

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