GHSA-7xgj-8392-5q4r: FastMCP: post-transform authorization skip exposes tools

GHSA-7xgj-8392-5q4rMEDIUM
Published October 23, 2026
CISO Take

FastMCP, a widely used framework for building MCP servers, skips the final authorization check when a server transform changes a component's metadata. A low-privilege caller who knows or guesses the transformed tool, resource, or prompt name can invoke it directly even though it is hidden from listings and the policy denies it. The package has 1,595 downstream dependents and 26 other tracked CVEs. There is no KEV listing, no EPSS score, no public exploit, and no Nuclei template. However, the advisory includes a working in-process proof of concept, so exploitation is easy for any authenticated user. Upgrade to FastMCP 3.4.10 or 4.1.2. Until then, enforce authorization at the handler or server boundary and avoid overlapping proxy templates for protected resources.

Sources:GitHub AdvisoryNVDATLAS

What is the risk?

Medium (CVSS 6.8). Exploitation requires network access and a valid low-privilege identity. Complexity is rated high because the server must use transforms with a metadata-aware AuthCheck, and the attacker must know the component name. Impact on confidentiality and integrity is high: the attacker can run administrative tools with side effects and read protected resources and prompts. Availability is not affected. Exploit code is not public, but the PoC in the advisory is trivial to adapt. Real-world exposure depends on whether deployments combine component authorization with transforms or proxy templates; plain setups are not affected.

How does the attack unfold?

Initial Access
The attacker authenticates to the MCP server with a valid low-privilege identity that lacks the admin scope.
AML.T0012
Discovery
The attacker learns or guesses the final transformed name of a hidden protected tool, resource, or prompt.
AML.T0084.001
Exploitation
The attacker sends a direct call; the server applies the transform and returns the component without rechecking its authorization policy.
AML.T0053
Impact
The protected tool runs with its side effects, or the protected resource or prompt content is returned to the unauthorized caller.
AML.T0085.001

What systems are affected?

PackageEcosystemVulnerable RangePatched
OpenAI Nodepip>= 3.0.0, < 3.4.103.4.10
11.2K1.8K dependentsPushed 7d ago56% patched~139d to patchFull package profile →
OpenAI Nodepip>= 3.0.0, < 3.4.103.4.10
11.2K1.8K dependentsPushed 7d ago56% patched~139d to patchFull package profile →

How severe is it?

CVSS 3.1
6.8 / 10
EPSS
N/A
Exploitation Status
No known exploitation
Sophistication
Trivial

What is the attack surface?

AVACPRUISCIA
AVNetwork
ACHigh
PRLow
UINone
SUnchanged
CHigh
IHigh
ANone

What should I do?

1 step
  1. 1) Upgrade fastmcp and fastmcp-slim to 3.4.10 (3.x line) or 4.1.2 (4.x line). 2) Until upgraded, remove overlapping proxy templates for protected resources. 3) Enforce authorization inside tool and resource handlers or at the server or gateway boundary, rather than relying on a policy whose inputs a transform changes. 4) Audit servers for ToolTransform or other transforms combined with restrict_tag or other metadata-aware auth checks. 5) Review MCP server logs for direct tools/call, resources/read, or prompts/get requests for components absent from the caller's listing, and for privileged tool invocations by low-scope identities.

How is it classified?

Which compliance frameworks are affected?

This CVE is relevant to:

EU AI Act
Art. 15-Accuracy, robustness and cybersecurity
ISO 42001
A.6.2.6-AI system operation and monitoring
NIST AI RMF
MANAGE 2.3-Mechanisms for responding to unknown risks and for managing AI system components
OWASP LLM Top 10
LLM06-Excessive Agency

Frequently Asked Questions

What is GHSA-7xgj-8392-5q4r?

FastMCP, a widely used framework for building MCP servers, skips the final authorization check when a server transform changes a component's metadata. A low-privilege caller who knows or guesses the transformed tool, resource, or prompt name can invoke it directly even though it is hidden from listings and the policy denies it. The package has 1,595 downstream dependents and 26 other tracked CVEs. There is no KEV listing, no EPSS score, no public exploit, and no Nuclei template. However, the advisory includes a working in-process proof of concept, so exploitation is easy for any authenticated user. Upgrade to FastMCP 3.4.10 or 4.1.2. Until then, enforce authorization at the handler or server boundary and avoid overlapping proxy templates for protected resources.

Is GHSA-7xgj-8392-5q4r actively exploited?

No confirmed active exploitation of GHSA-7xgj-8392-5q4r has been reported, but organizations should still patch proactively.

How to fix GHSA-7xgj-8392-5q4r?

1) Upgrade fastmcp and fastmcp-slim to 3.4.10 (3.x line) or 4.1.2 (4.x line). 2) Until upgraded, remove overlapping proxy templates for protected resources. 3) Enforce authorization inside tool and resource handlers or at the server or gateway boundary, rather than relying on a policy whose inputs a transform changes. 4) Audit servers for ToolTransform or other transforms combined with restrict_tag or other metadata-aware auth checks. 5) Review MCP server logs for direct tools/call, resources/read, or prompts/get requests for components absent from the caller's listing, and for privileged tool invocations by low-scope identities.

What systems are affected by GHSA-7xgj-8392-5q4r?

This vulnerability affects the following AI/ML architecture patterns: Agent frameworks, MCP servers, Tool-calling pipelines, MCP proxy gateways.

What is the CVSS score for GHSA-7xgj-8392-5q4r?

GHSA-7xgj-8392-5q4r has a CVSS v3.1 base score of 6.8 (MEDIUM).

What is the AI security impact?

Affected AI Architectures

Agent frameworksMCP serversTool-calling pipelinesMCP proxy gateways

MITRE ATLAS Techniques

AML.T0012Valid Accounts
AML.T0053AI Agent Tool Invocation
AML.T0085.001AI Agent Tools

Compliance Controls Affected

EU AI Act: Art. 15
ISO 42001: A.6.2.6
NIST AI RMF: MANAGE 2.3
OWASP LLM Top 10: LLM06

What are the technical details?

Original Advisory

## Maintainer assessment and remediation This report is accepted as a FastMCP authorization vulnerability. In supported configurations, a server transform can change the metadata used by a component's authorization policy. Direct lookups previously checked the original component but returned the transformed component without rechecking its policy. A client that knows the component identifier can invoke a tool or retrieve a resource or prompt that the configured policy denies. The fixes authorize the final transformed tools, resources, templates, and prompts. A denied concrete resource also shadows a matching resource template at its URI, preventing proxy templates from retrieving the same protected resource upstream. Authorized callers, authorized component versions, and templates for genuinely absent concrete resources remain supported. Affected stable release lines: FastMCP 3.0.0–3.4.9 and 4.0.0–4.1.1. The missing final authorization check is present in v3.0.0 history and was reproduced on v3.4.9 and v4.1.0. Both `fastmcp` and `fastmcp-slim` installations are affected when using component authorization with transforms or protected concrete resources overlapping proxy templates. Fixes are available in FastMCP 3.4.10 and 4.1.2. Until upgrading, avoid overlapping proxy templates for protected resources and enforce the required authorization at the handler or server boundary rather than relying on a policy whose inputs are changed by a transform. ## Original report # Post-transform component authorization is skipped on direct calls ## Summary FastMCP's direct component paths can return a transformed component before its applicable `AuthCheck`, allowing low-privilege callers to execute hidden protected behavior. I reproduced this against FastMCP 4.1.0 and commit `e2fcc412001ff7414095c5dc282f94c70299a612` using only an in-process FastMCP server. The attacker does not have server-side access and does not control FastMCP configuration. ## Details ### Attacker prerequisites A server uses a supported provider, server, or session transform and a metadata-aware component `AuthCheck`. The attacker has a valid low-privilege identity, lacks the required scope, and knows or guesses the final transformed component name. They do not control the transform or the policy. ### Root cause Listing applies transforms and then authorizes the transformed component. In the direct lookup path, FastMCP 4.1.0 applies the transform and returns the component without authorizing that final component. See [`server.py:933-940`](https://github.com/PrefectHQ/fastmcp/blob/v4.1.0/fastmcp_slim/fastmcp/server/server.py#L933-L940). The MCP `tools/call` handler reaches this path; equivalent direct paths exist for resources, templates, and prompts. ## Proof of concept Save this as `poc_transform_auth.py`: ```python import anyio from fastmcp import FastMCP from fastmcp.server.auth import restrict_tag from fastmcp.server.transforms.tool_transform import ToolTransform from fastmcp.tools.base import Tool from fastmcp.tools.tool_transform import ToolTransformConfig async def main() -> None: server = FastMCP("auth-boundary") server.add_tool( Tool.from_function( lambda: "PROTECTED SECRET", name="tagged_tool", tags={"public"}, auth=restrict_tag("admin", scopes=["admin"]), ) ) server.add_transform( ToolTransform({"tagged_tool": ToolTransformConfig(tags={"admin"})}) ) print("listed:", [tool.name for tool in await server.list_tools()]) try: result = await server.call_tool("tagged_tool") except Exception as exc: print("BLOCKED:", type(exc).__name__) else: print("VULNERABLE: direct call returned", result.content[0].text) anyio.run(main) ``` Run it in an isolated environment: ```bash uv run --with fastmcp==4.1.0 -- python poc_transform_auth.py ``` Observed on 4.1.0 for a caller without the `admin` scope: ```text listed: [] VULNERABLE: direct call returned PROTECTED SECRET ``` ## Impact A low-privilege caller can directly execute administrative tools hidden from listing, including their side effects and returned secrets. The same ordering flaw can expose protected resources, templates, or prompts. ### Recommended remediation Apply component authorization to the final transformed component in every direct resolution/execution path, after all provider, server, and session transforms. Reuse one ordered resolver for list and direct operations so lookup never returns a transformed component before its applicable `AuthCheck` runs. ## AI assistance Yes — OpenAI Codex assisted static analysis/PoC/writeup; reproduction was validated against stated version.

Exploitation Scenario

An organization runs an internal FastMCP server that exposes an admin-only tool, tagged and protected by a scope-based AuthCheck. A server transform re-tags the tool, so it no longer appears in listings for non-admin users. An employee or compromised low-privilege agent identity learns the tool name from documentation, leaked configuration, or guessing. They send a direct tools/call request. The server applies the transform and returns the tool without re-checking the policy, so the tool runs and returns secrets or performs a privileged action. In the same way, a denied resource can be retrieved through an overlapping proxy template.

Weaknesses (CWE)

CWE-862 — Missing Authorization: The product does not perform an authorization check when an actor attempts to access a resource or perform an action.

  • [Architecture and Design] Divide the product into anonymous, normal, privileged, and administrative areas. Reduce the attack surface by carefully mapping roles with data and functionality. Use role-based access control (RBAC) [REF-229] to enforce the roles at the appropriate boundaries. Note that this approach may not protect against horizontal authorization, i.e., it will not protect a user from attacking others with the same role.
  • [Architecture and Design] Ensure that access control checks are performed related to the business logic. These checks may be different than the access control checks that are applied to more generic resources such as files, connections, processes, memory, and database records. For example, a database may restrict access for medical records to a specific database user, but each record might only be intended to be accessible to the patient and the patient's doctor [REF-7].

Source: MITRE CWE corpus.

CVSS Vector

CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:N

Timeline

Published
October 23, 2026
Last Modified
October 23, 2026
First Seen
October 24, 2026

Related Vulnerabilities