CVE-2026-39885: 
JavaScript vulnerability analysis and mitigation

Overview

CVE-2026-39885 is a Server-Side Request Forgery (SSRF) vulnerability in the mcp-from-openapi library, part of the FrontMCP TypeScript-first framework for the Model Context Protocol (MCP). The flaw allows unauthenticated attackers to cause the server to fetch arbitrary internal or external resources by supplying a malicious OpenAPI specification containing crafted $ref pointers. Affected packages include mcp-from-openapi (versions ≤ 2.1.2), frontmcp, @frontmcp/sdk, and @frontmcp/adapters (all versions ≤ 1.0.3). The vulnerability was published on April 8, 2026, and carries a CVSS v3.1 base score of 7.5 (High) (GitHub Advisory).

Technical details

The root cause (CWE-918) lies in index.js (lines 870–875) of mcp-from-openapi, where OpenAPIToolGenerator.initialize() calls @apidevtools/json-schema-ref-parser's .dereference() method without any URL allowlist, custom resolvers, or protocol restrictions (GitHub Advisory). By default, the ref parser fetches any URL encountered in $ref values — including http://, https://, and file:// URIs — during the initialization call. An attacker only needs to supply a crafted OpenAPI specification (no authentication required) containing $ref values pointing to internal addresses (e.g., http://169.254.169.254/latest/meta-data/) or local files (e.g., file:///etc/passwd). A public proof-of-concept demonstrating the SSRF trigger via a standalone JavaScript script is available in the security advisory (GitHub Advisory).

Impact

Successful exploitation enables an unauthenticated attacker to perform SSRF to internal network services, probe internal ports, read cloud instance metadata (e.g., AWS IAM credentials from http://169.254.169.254/), and read arbitrary local files via the file:// protocol — all with high confidentiality impact and no integrity or availability impact (GitHub Advisory). In cloud-hosted environments, this could lead to theft of IAM credentials, enabling lateral movement to other cloud resources. Any application that processes untrusted OpenAPI specifications using this library is at risk.

Exploitability

A functional proof-of-concept exploit is publicly available in the GitHub Security Advisory, consisting of a standalone JavaScript script that triggers an actual HTTP request to an attacker-controlled server during initialize() — confirmed on mcp-from-openapi v2.1.2 (GitHub Advisory). No privileges or user interaction are required for exploitation. There is no current evidence of in-the-wild exploitation or threat actor attribution. The EPSS score is approximately 0.032% (low probability of near-term exploitation), and the vulnerability is not listed in the CISA KEV catalog (Feedly).

Exploitation steps

  1. Craft a malicious OpenAPI specification: Create a JSON or YAML OpenAPI spec containing a $ref value pointing to a target resource, such as http://169.254.169.254/latest/meta-data/iam/security-credentials/ (AWS metadata) or file:///etc/passwd (local file read).
  2. Supply the spec to the target application: Deliver the malicious OpenAPI spec to any application that uses mcp-from-openapi to process OpenAPI documents — this requires no authentication, only the ability to provide input to the spec loader.
  3. Trigger initialization: The vulnerable application calls OpenAPIToolGenerator.initialize(), which internally invokes $RefParser.dereference() without URL restrictions, causing the server to fetch the attacker-specified URL.
  4. Collect exfiltrated data: For SSRF to cloud metadata, the server's HTTP request to 169.254.169.254 returns IAM credentials or other metadata. For local file reads, the file contents are included in the dereferenced output returned to the caller. For internal network scanning, observe whether the request succeeds or times out to infer port/service availability (GitHub Advisory).

Indicators of compromise

  • Network: Outbound HTTP/HTTPS requests from the Node.js application server to 169.254.169.254 (AWS/GCP/Azure metadata endpoints) or other internal RFC-1918 addresses; unexpected outbound connections to unknown external IPs during OpenAPI spec processing.
  • Logs: Application logs showing $ref resolution errors or unexpected HTTP fetches to internal addresses during initialize() calls; Node.js process network activity logs showing connections to metadata endpoints or internal services.
  • File System: Evidence of file:// URI resolution in application output or error logs, potentially exposing contents of /etc/passwd, /etc/shadow, or other sensitive files.
  • Process: Unusual network activity originating from the Node.js process handling OpenAPI specifications, particularly to cloud metadata IPs or internal subnets not normally accessed by the application (GitHub Advisory).

Mitigation and workarounds

Upgrade mcp-from-openapi to version 2.3.0 or later, and upgrade frontmcp, @frontmcp/sdk, and @frontmcp/adapters to version 1.0.4 or later — these releases introduce a refResolution option to configure and restrict $ref resolution, preventing SSRF (GitHub Release). As a workaround prior to patching, pass resolver options to .dereference() that disable file://, http://, and https:// protocols, or implement an allowlist of trusted hosts. Additionally, restrict which OpenAPI specifications the application will process to trusted, internally-controlled sources only, and consider network segmentation to prevent the application server from reaching cloud metadata endpoints (GitHub Advisory).

Community reactions

The vulnerability was responsibly disclosed by researcher @TharVid via GitHub Security Advisory, and the FrontMCP maintainers acknowledged and credited the reporter in the v1.0.4 release notes (GitHub Release). Social media activity was limited, with brief mentions on Mastodon and Bluesky shortly after disclosure. No significant broader media coverage or notable researcher commentary beyond the advisory itself has been identified.

Additional resources


Source: This report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

GHSA-gvwc-5hr5-44p8HIGH7.5
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-5jh3-w3fj-6758LOW3.7
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-5v8x-rm7w-m4c7LOW3.7
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-7pqp-3q23-mwr8LOW3.7
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026
GHSA-3qg4-7mq2-gm93MEDIUMN/A
  • JavaScript logoJavaScript
  • probe-image-size
NoYesOct 26, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management