Skip to main content

FrontMCP and mcp-from-openapi have bypass of OpenAPI external $ref SSRF fix (CVE-2026-59973)

0
High
Published: 09/11/2026 (09/11/2026, 22:02:04 UTC)
Source: GCVE Database
Product: mcp-from-openapi

Description

## Summary The published fix for GHSA-v6ph-xcq9-qxxj / CVE-2026-39885 added a direct hostname denylist for OpenAPI external `$ref` dereferencing, but the latest patched dependency `mcp-from-openapi` 2.3.0 still makes backend-origin requests to loopback when the target is reached through hostname resolution, redirects, or IPv4-mapped IPv6 syntax. FrontMCP latest release v1.2.1 and current main still call `OpenAPIToolGenerator.fromURL()` and `OpenAPIToolGenerator.fromJSON()` from `mcp-from-openapi` 2.3.0 when loading OpenAPI adapters. An attacker who can cause a hosted or multi-user FrontMCP deployment to load an untrusted OpenAPI spec can trigger requests from the server to localhost or private services during tool generation. This is a latest-version bypass of the previous fix. A direct `http://127.0.0.1` `$ref` control is now denied and produces zero canary hits, while semantically equivalent loopback targets still reach the canary. ## Latest versions checked - `frontmcp` npm latest: 1.2.1 - `@frontmcp/adapters` npm latest: 1.2.1 - `mcp-from-openapi` npm latest: 2.3.0 - FrontMCP release tag: v1.2.1, commit db323976c66297d684a3e63bbfe1db6b310f2944 - FrontMCP current main checked: c15b79abe8c6a3cb71d4b7a3bafb8190730dc756 The release tag and current main both keep `mcp-from-openapi` 2.3.0 in `package.json` and `libs/adapters/package.json`, and both keep the OpenAPI adapter forwarding untrusted `url`, `spec`, and `loadOptions.refResolution` into `OpenAPIToolGenerator`. ## Technical details FrontMCP's OpenAPI adapter reaches the affected dependency paths: - `libs/adapters/src/openapi/openapi.adapter.ts` imports `OpenAPIToolGenerator` from `mcp-from-openapi`. - `loadOpenAPISpec()` calls `OpenAPIToolGenerator.fromURL(this.options.url, ...)` and forwards `loadOptions.refResolution`. - The same method calls `OpenAPIToolGenerator.fromJSON(this.options.spec, ...)` and forwards `loadOptions.refResolution`. In `mcp-from-openapi` 2.3.0, the patched guard is applied before the HTTP resolver fetches an external `$ref`. It checks the parsed URL hostname string against deny patterns for direct local and private addresses. The resolver does not resolve hostnames before allow or deny decisions, does not pin the validated IP to the fetch, and does not revalidate redirect targets before following them. It also misses IPv4-mapped IPv6 loopback forms. As a result, these URLs are accepted by the guard but cause a loopback request from the backend: - `http://127.0.0.1.nip.io:<port>/schema.json`, because the hostname string is not a direct IP even though it resolves to 127.0.0.1. - `http://127.0.0.1.nip.io:<port>/redirect`, because the first host passes and the actual request follows a redirect to `http://127.0.0.1:<port>/schema.json`. - `http://[::ffff:127.0.0.1]:<port>/schema.json` and `http://[::ffff:7f00:1]:<port>/schema.json`, because IPv4-mapped IPv6 loopback is not normalized and denied. `OpenAPIToolGenerator.fromURL()` is also still unguarded for the initial OpenAPI spec URL. The PoC includes that as supporting evidence, but the primary report is the external `$ref` fix bypass. ## Reproduction The attached local PoC starts a loopback canary and loads generated OpenAPI specs using `mcp-from-openapi` 2.3.0. The request body schema contains a single external `$ref` for each test case. The canary records every backend-origin request. Run: ```bash cd /home/unkn0wn/security_audit/frontmcp-ssrf-poc node repro-frontmcp-latest-ssrf-bypasses.mjs ``` Important output from a fresh run on 2026-05-25: ```json {"name":"direct-127-denied-control","kind":"external_ref","refUrl":"http://127.0.0.1:45117/schema.json","ok":false,"hitCount":0,"hits":[]} {"name":"dns-name-to-127-bypass","kind":"external_ref","refUrl":"http://127.0.0.1.nip.io:45117/schema.json","ok":true,"hitCount":1,"hits":[{"url":"/schema.json","host":"127.0.0.1.nip.io:45117","authorization":null}]} {"name":"dns-name-to-127-bypass-with-allowedHosts","kind":"external_ref","refUrl":"http://127.0.0.1.nip.io:45117/schema.json","ok":true,"hitCount":1,"hits":[{"url":"/schema.json","host":"127.0.0.1.nip.io:45117","authorization":null}]} {"name":"redirect-to-127-after-allowed-host","kind":"external_ref","refUrl":"http://127.0.0.1.nip.io:45117/redirect","ok":true,"hitCount":2,"hits":[{"url":"/redirect","host":"127.0.0.1.nip.io:45117","authorization":null},{"url":"/schema.json","host":"127.0.0.1:45117","authorization":null}]} {"name":"ipv4-mapped-ipv6-dotted-bypass","kind":"external_ref","refUrl":"http://[::ffff:127.0.0.1]:45117/schema.json","ok":true,"hitCount":1,"hits":[{"url":"/schema.json","host":"[::ffff:7f00:1]:45117","authorization":null}]} {"name":"ipv4-mapped-ipv6-hex-bypass","kind":"external_ref","refUrl":"http://[::ffff:7f00:1]:45117/schema.json","ok":true,"hitCount":1,"hits":[{"url":"/schema.json","host":"[::ffff:7f00:1]:45117","authorization":null}]} {"name":"external-refs-disabled-control","kind":"external_ref","refUrl":"http://127.0.0.1.nip.io:45117/schema

CVSS v3.1

Score 8.5high

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
Low
Availability
None
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N

Affected software

npmghsa
mcp-from-openapi
Affected versions
>=2.3.0 <2.5.0
npmghsa
@frontmcp/adapters
Affected versions
>=1.2.1 <1.5.0
npmghsa
frontmcp
Affected versions
>=1.2.1 <1.5.0

Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.

AI-Powered Analysis

Machine-generated threat intelligence

AILast updated: 09/12/2026, 00:45:33 UTC

Technical Analysis

The vulnerability in mcp-from-openapi 2.3.0 and FrontMCP 1.2.1 bypasses the hostname denylist intended to prevent SSRF via OpenAPI external $ref dereferencing. The denylist checks only the hostname string without resolving it to IP addresses before allowing or denying requests, and it does not revalidate redirect targets or normalize IPv4-mapped IPv6 loopback addresses. This allows attackers to craft URLs that appear safe but resolve to loopback addresses, triggering backend requests to localhost or private services during OpenAPI tool generation. The flaw affects the methods OpenAPIToolGenerator.fromURL() and fromJSON() used by FrontMCP's OpenAPI adapter. The vulnerability is confirmed by proof-of-concept tests showing successful backend requests to loopback addresses via crafted URLs. The issue is tracked as CVE-2026-59973 with a CVSS 3.1 score of 8.5 (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N). A patch is available for affected versions.

Potential Impact

An attacker able to supply or cause loading of an untrusted OpenAPI specification in affected FrontMCP deployments can trigger server-side requests to internal or localhost services. This SSRF bypass can lead to unauthorized access to internal network resources or services that are not otherwise exposed externally. The impact includes high confidentiality loss and partial integrity loss but no availability impact. The vulnerability affects multi-user or hosted FrontMCP deployments that load untrusted OpenAPI specs.

Mitigation Recommendations

A patch is available for the affected versions of mcp-from-openapi and FrontMCP. Users should upgrade to versions >=2.5.0 for mcp-from-openapi and >=1.5.0 for FrontMCP where this issue is fixed. Until patched, avoid loading untrusted OpenAPI specifications or disable external $ref dereferencing if possible. The vendor advisory confirms a patch is available; therefore, remediation should focus on applying the official fix.

Pro Console: star threats, build custom feeds, automate alerts via Slack, email & webhooks.Upgrade to Pro

Technical Details

Gcve Source
db.gcve.eu
Osv Id
GHSA-65h7-9wrw-629c
Osv Schema Version
1.4.0
Aliases
["CVE-2026-59973"]
Ecosystems
["npm"]
Database Specific Severity
HIGH
Cvss Version
3.1

Threat ID: 6aa49ff555bf5e2cf5a86594

Added to database: 09/12/2026, 00:42:29 UTC

Last enriched: 09/12/2026, 00:45:33 UTC

Last updated: 09/12/2026, 02:39:17 UTC

Views: 4

Community Reviews

0 reviews

Crowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.

Sort by
Loading community insights…

Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.

Actions

PRO

Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.

Please log in to the Console to use AI analysis features.

Need more coverage?

Upgrade to Pro Console for AI refresh and higher limits.

For incident response and remediation, OffSeq services can help resolve threats faster.

Latest Threats

Breach by OffSeqOFFSEQFRIENDS — 25% OFF

Check if your credentials are on the dark web

Instant breach scanning across billions of leaked records. Free tier available.

Scan now
OffSeq TrainingCredly Certified

Lead Pen Test Professional

Technical5-day eLearningPECB Accredited
View courses