CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-59973

CVE-2026-59973: High-Severity Server-Side Request Forgery in FrontMCP and mcp-from-openapi

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 15, 2026·7 min read·35 visits

Executive Summary (TL;DR)

A validation bypass in FrontMCP and mcp-from-openapi allows authenticated users to execute arbitrary Server-Side Request Forgery (SSRF) attacks against internal interfaces, bypassing existing string-based denylists through DNS wildcards, HTTP redirects, or IPv4-mapped IPv6 addresses.

CVE-2026-59973 is a high-severity Server-Side Request Forgery (SSRF) vulnerability in FrontMCP and its underlying OpenAPI parsing library, mcp-from-openapi. The flaw allows authenticated attackers capable of importing or configuring OpenAPI specifications to bypass string-based hostname filtering mechanisms. By employing DNS wildcard loopbacks, HTTP redirects, or IPv4-mapped IPv6 address formatting, attackers can coerce the application into sending HTTP requests to internal networks, loopback adapters, and cloud metadata environments.

Vulnerability Overview

FrontMCP is a TypeScript framework that exposes external tools and data resources to artificial intelligence models via the Model Context Protocol (MCP). The platform relies on OpenAPI schemas to dynamically generate client and tool interfaces. To ingest these schemas, FrontMCP implements an adapter framework that loads and parses specifications directly from external web resources or dereferences internal $ref schema definitions. The underlying parsing tasks are delegated to the library mcp-from-openapi.

The attack surface exists in any multi-user deployment where authenticated users can import or register external OpenAPI specifications. Because these specifications frequently contain schema references located on arbitrary remote hosts, the system must perform network fetches to complete the dereferencing process. An attacker can manipulate these remote requests, routing them toward restricted network resources or private endpoints.

This behavior matches the pattern of a Server-Side Request Forgery (SSRF) vulnerability, classified as CWE-918. The earlier mitigation strategy implemented a simple string-based denylist against hostnames, which failed to address fundamental network resolution realities. Consequently, an attacker can bypass the filters, triggering network operations on behalf of the FrontMCP container to probe and exploit the internal ecosystem.

Root Cause Analysis

The underlying security flaw resides in the validation design of the HTTP resolver. The logic historically evaluated the literal hostname extracted from the $ref URL before conducting any DNS lookup or network negotiation. This approach assumes that a domain name resolves exclusively to its literal string representation and ignores the standard behavior of the operating system DNS client.

Because the HTTP client resolves domain names to IP addresses directly at the socket level, several specific techniques can bypass the string filter. For example, wildcard DNS systems such as nip.io map arbitrary subdomains to designated IP addresses. If an attacker passes 127.0.0.1.nip.io, the string parser evaluates it as a public domain and permits the request, while the DNS resolution step maps the target directly to the local loopback interface.

HTTP redirects introduce a secondary bypass vector. The validator assesses the original URL, confirms that it points to an allowed public resource, and starts the HTTP request. If the target server responds with an HTTP redirect status (e.g., 302 Found) pointing to an internal resource, the client follows the redirect automatically. The internal validation routine is bypassed because the redirect occurs within the client runtime without re-triggering the resolver's boundary checks.

IPv4-mapped IPv6 representations are also a factor. Standard regex pattern matching often fails to normalize variations such as [::ffff:127.0.0.1] or hexadecimal variants like [::ffff:7f00:1]. These variants resolve directly to local interfaces while bypassing standard string filters. Additionally, the main endpoint loader fromURL lacked any validation, making the initial specification retrieval process entirely vulnerable.

Code Analysis

The following diagram illustrates the vulnerable validation flow where the security checks are decoupled from the physical connection target:

The vulnerability is addressed in the be3409cce6e97642696d4ee5a4e4e2712490b277 commit for mcp-from-openapi and the 96a78eaa5c6c4bc51cced557d83d1a03344cb03d commit for frontmcp. Below is the essential implementation of the new, secure validation loop within the updated src/ssrf.ts module:

// Secure validation resolves DNS and checks IP ranges recursively
export async function assertUrlSafe(
  url: string,
  ssrf: ResolvedSsrfOptions,
  lookup: SsrfHostLookup = defaultLookup,
): Promise<void> {
  let parsed: URL;
  try {
    parsed = new URL(url);
  } catch {
    throw new SsrfError(`Invalid spec URL: ${url}`, { url });
  }
 
  const protocol = parsed.protocol.replace(/:$/, '');
  if (protocol !== 'http' && protocol !== 'https') {
    throw new SsrfError(`Protocol "${protocol}" is not allowed`, { url });
  }
 
  const hostname = parsed.hostname;
  if (!isIpLiteral(hostname)) {
    let addresses: ResolvedAddress[];
    try {
      addresses = await lookup(hostname);
    } catch {
      return;
    }
    for (const { address } of addresses) {
      if (isBlockedAddress(address)) {
        throw new SsrfError(`Host "${hostname}" resolves to blocked address ${address}`, { url });
      }
    }
  }
}

Furthermore, the patch implements a manual redirection handler safeFetch that prevents the Node runtime from automatically resolving HTTP redirects. By using redirect: 'manual', the application can intercept the target location and run it through the same resolution validation loop:

// Manual redirect loop to enforce SSRF validation at every hop
const isRedirect = status >= 300 && status < 400 && status !== 304;
if (isRedirect && followRedirects) {
  const location = response.headers?.get?.('location');
  if (location) {
    current = new URL(location, current).toString();
    // Recalculates and validates the target on the next loop iteration
  }
}

Exploitation

Exploitation of CVE-2026-59973 requires the ability to register or update an OpenAPI adapter in FrontMCP. This action is typical for authenticated users or administrators configuring integration services. The target platform must have network connectivity to the internet to perform DNS lookups and initial fetches from the external specification sources.

An attacker begins by identifying an internal administrative endpoint or metadata service. For instance, in AWS environments, the Instance Metadata Service (IMDSv1/v2) resides at the link-local address 169.254.169.254. The attacker hosts an OpenAPI schema on a public server that includes an external $ref pointing to a wildcard DNS domain such as http://169.254.169.254.nip.io/latest/meta-data/.

When the system attempts to resolve the external schema, the hostname bypasses the string validation rules. The DNS client resolves the address to the link-local IP, forcing the server to retrieve local AWS metadata credentials. The response containing the AWS credentials is then processed as part of the schema compilation, exposing sensitive data to the attacker.

Alternatively, an attacker can use a redirect server to dynamically transition the request from a public URL to an internal port. The initial validation registers a safe public domain, but the subsequent HTTP redirect targets local loopback addresses (e.g., http://127.0.0.1:8080/admin). This exposes internal microservices that lack separate authentication layers.

Impact Assessment

The direct impact of successful exploitation is complete or partial compromise of local and internal services. Since the FrontMCP container acts as the initiator of the requests, it possesses the network privileges assigned to its hosting environment. Attackers can leverage this position to access internal APIs, administrative interfaces, and local processes.

The CVSS v3.1 score is evaluated at 8.5 (High), with a vector of CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N. The scope change parameter (S:C) is critical, reflecting that the vulnerability allows the attacker to transition from the application layer of FrontMCP to the underlying network infrastructure. Confidentiality impact is high because arbitrary internal data can be read, while integrity is rated low as arbitrary write operations can sometimes be executed on target endpoints.

In cloud-native environments, the impact is elevated due to the presence of metadata endpoints (IMDS). Gaining access to AWS, GCP, or Azure metadata can result in the leak of temporary IAM credentials, leading to broader lateral movement across the cloud infrastructure.

Remediation

The primary remediation action is upgrading FrontMCP to version 1.5.0 or higher, which forces mcp-from-openapi to version 2.5.0 or higher. These updates contain the secure-by-default configuration and DNS-resolved filtering capabilities. Administrators must verify their dependency lockfiles to ensure that vulnerable versions of mcp-from-openapi are not cached.

If immediate patching is not possible, several mitigations can protect the system. First, disable external $ref resolution entirely. This can be configured by passing an empty array to allowedProtocols in the OpenAPI adapter options. This stops the server from establishing any outgoing connections during the schema parsing process.

// Workaround: Block all external schema loading
OpenapiAdapter.init({
  name: 'secured-api',
  url: 'https://api.externalpartner.com/openapi.json',
  loadOptions: {
    followRedirects: false,
    refResolution: {
      allowedProtocols: []
    }
  }
});

Second, configure network-level egress controls (firewalls or security groups) to block the FrontMCP runtime from communicating with internal subnets, RFC 1918 address space, loopback interfaces, or cloud metadata endpoints. This network isolation acts as a defense-in-depth barrier against any residual TOCTOU exploits.

Official Patches

agentfront/frontmcpFrontMCP GitHub Advisory detailing the vulnerability and release of version 1.5.0.
agentfront/frontmcpPull Request detailing secure defaults and dependency updates in FrontMCP.
agentfront/mcp-from-openapiPull Request containing the dynamic DNS validation module implementation.

Fix Analysis (2)

Technical Appendix

CVSS Score
8.5/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N

Affected Systems

FrontMCP hosted tool generation servicesInternal networks connected to FrontMCP containersCloud hosting platform metadata environments (IMDSv1/v2)

Affected Versions Detail

Product
Affected Versions
Fixed Version
frontmcp
agentfront
>= 1.2.1 < 1.5.01.5.0
@frontmcp/adapters
agentfront
>= 1.2.1 < 1.5.01.5.0
mcp-from-openapi
agentfront
>= 2.3.0 < 2.5.02.5.0
AttributeDetail
CWE IDCWE-918
Attack VectorNetwork (AV:N)
CVSS Score8.5
Exploit Statuspoc
KEV StatusNot Listed
Impact TypeServer-Side Request Forgery

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1005Data from Local System
Collection
T1046Network Service Discovery
Discovery
CWE-918
Server-Side Request Forgery (SSRF)

The web application server receives an arbitrary URL from an upstream user-supplied specification and requests resources without performing adequate validation of DNS resolutions or intermediate redirection hooks.

Known Exploits & Detection

Wiz Vulnerability Research DatabaseValidation testing confirming successful bypasses on mcp-from-openapi 2.3.0 using loopback canary tests with wildcards, redirects, and IPv4-mapped IPv6 formats.

Vulnerability Timeline

Audit findings identify SSRF bypasses via DNS wildcarding and HTTP redirect loops in mcp-from-openapi 2.3.0.
2026-05-25
mcp-from-openapi version 2.5.0 released with dynamic DNS-level safety validation checks.
2026-06-21
frontmcp version 1.5.0 released locking secure dependencies and adapter fetch policies.
2026-06-22
Public advisory disclosure issued under CVE-2026-59973 and GHSA-65h7-9wrw-629c.
2026-09-15

References & Sources

  • [1]FrontMCP Security Advisory
  • [2]FrontMCP Release Version 1.5.0
  • [3]mcp-from-openapi Release Version 2.5.0

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 1 hour ago•CVE-2026-119282
7.3

CVE-2026-119282: OS Command Injection via Plugin Options in Nx (@nx/maven and @nx/gradle)

An OS command injection and argument injection vulnerability exists in the Nx build system and its official Maven (@nx/maven) and Gradle (@nx/gradle) plugins. When constructing the project dependency graph, the plugins invoke underlying Java build wrappers via subshells while interpolating unsanitized plugin options directly from nx.json into the command arguments. An attacker who supplies a crafted nx.json file via a repository or pull request can execute arbitrary shell commands with the privileges of the user or CI/CD runner invoking any Nx command that computes the project graph.

Amit Schendel
Amit Schendel
4 views•10 min read
•about 2 hours ago•CVE-2026-59978
7.5

CVE-2026-59978: Persistent Denial of Service via Array Injection in AdminNeo

AdminNeo versions 4.6.2 through 5.4.1 contain an improper input validation vulnerability (CWE-20) in the version verification endpoint (?script=version). An unauthenticated remote attacker can submit a crafted HTTP POST request containing an array parameter for 'version', which is serialized into a shared server-side temporary cache file without type checking or authentication. On subsequent requests, the application deserializes this cached array and passes it to cookie() and rawurlencode(), triggering an uncaught fatal TypeError in PHP 8.x environments and causing a persistent 24-hour Denial of Service (DoS) for all users.

Amit Schendel
Amit Schendel
4 views•8 min read
•about 3 hours ago•GHSA-FGXM-5HVV-X4VH
5.3

GHSA-fgxm-5hvv-x4vh: Private Repository Enumeration via Go Module Discovery and HTTP Response Discrepancies in Soft Serve

Charmbracelet Soft Serve versions 0.5.0 through 0.12.2 contain an authorization bypass and observable response discrepancy vulnerability in the HTTP Git server. Remote attackers can determine the existence, exact names, and clone URLs of private repositories by issuing crafted Go remote import path discovery requests (?go-get=1) or by observing differential HTTP status codes across Git Smart HTTP, Dumb HTTP, and Git LFS endpoints.

Alon Barad
Alon Barad
5 views•12 min read
•about 4 hours ago•GHSA-F3FJ-9625-RV3M
5.9

GHSA-f3fj-9625-rv3m: Race Condition in Soft Serve Repository Cache Invalidation

A Time-of-Check to Time-of-Use (TOCTOU) race condition in Charmbracelet Soft Serve versions 0.6.0 through 0.12.2 allows unauthenticated users to retain read access to repositories after their visibility is changed from public to private. The flaw stems from premature cache invalidation in the SetPrivate method prior to committing the visibility update to the underlying database. Concurrent read requests arriving during the database transaction window repopulate the non-expiring in-memory LRU cache with stale public metadata, bypassing access controls across HTTP, SSH, and Git protocols until the server process is restarted.

Alon Barad
Alon Barad
4 views•10 min read
•about 5 hours ago•CVE-2026-119283
7.5

CVE-2026-119283: Unbounded JWE Recipients Array Causes CPU Exhaustion in Authlib joserfc

A resource consumption vulnerability exists in the Authlib joserfc Python library prior to version 1.7.5. When processing JSON Web Encryption (JWE) objects formatted using General JSON Serialization, the library fails to enforce an upper bound on the number of elements within the recipients array. An unauthenticated attacker can supply a JWE containing thousands of recipient entries targeting an RSA key management algorithm, forcing the server to perform an equivalent number of computationally expensive RSA private-key decryption operations per request and exhausting available CPU resources.

Alon Barad
Alon Barad
4 views•9 min read
•about 6 hours ago•CVE-2026-119284
6.9

CVE-2026-119284: Uncontrolled Resource Consumption in joserfc Compact Deserialization

CVE-2026-119284 (GHSA-9pg5-8c7x-5hfx) is an uncontrolled resource consumption vulnerability (CWE-400) in the compact serialization deserialization routines of joserfc prior to version 1.7.6. The library enforced individual segment size limits only after invoking Python's bytes.split(b'.') on untrusted input tokens. By sending oversized compact JWS or JWE tokens, an unauthenticated remote attacker can force the Python interpreter to duplicate and allocate memory for every segment before size validation executes, resulting in memory exhaustion and an Endpoint Denial of Service (DoS).

Amit Schendel
Amit Schendel
8 views•10 min read