May 13, 2026·7 min read·6 visits
Authenticated users can bypass access controls to connect to any registered MCP server via the `/mcp-connect/{id}` endpoint due to a misconfigured global allowlist in the platform's authorization routing logic.
An authorization bypass vulnerability in the Obot MCP Gateway allows authenticated users to access arbitrary Model Context Protocol (MCP) servers without possessing the required Access Control Rules (ACR) or ownership privileges, leading to unauthorized interaction with external tools and data sources.
The Obot platform functions as a gateway for Model Context Protocol (MCP) servers, integrating external tools and contextual data into Large Language Models. This integration enables LLMs to query external databases, fetch code from private repositories, or interact with local file systems depending on the connected MCP server. The platform architecture relies on an API gateway to route client requests to specific MCP servers using unique endpoint identifiers.
Vulnerability GHSA-vw82-7fv8-r6gp constitutes an Improper Authorization (CWE-285) flaw within this gateway routing logic. The central authorizer fails to enforce fine-grained access control on the /mcp-connect/{id} endpoint. The application effectively bypasses expected Access Control Rules (ACR) and ownership validation constraints for this specific route, defaulting to a globally permitted state.
Because the vulnerability exists in the routing layer rather than the MCP server implementations themselves, the flaw is universally applicable to all MCP servers connected to a vulnerable Obot instance. Any authenticated user can abuse this condition to establish a direct connection to an MCP server, provided they know or can guess the target server's identifier.
The root cause of this vulnerability lies in an improper configuration of the authorization bypass list within the gateway's core routing implementation. Specifically, the source file pkg/api/authz/authz.go defines arrays of route prefixes that are explicitly exempt from granular access control checks. These arrays, authenticatedPaths and unauthenticatedPaths, dictate whether a request requires deep authorization evaluation or simple authentication validation.
Prior to version v0.21.1, the developer included the /mcp-connect/ path prefix in both of these global allowlists. When an incoming request matches a prefix in these arrays, the central authorizer terminates its evaluation early and permits the request to proceed to the handler logic. This early termination instructs the system to bypass the specific ownership and permission checks required for individual MCP servers.
Consequently, the request handler for the /mcp-connect/ endpoint receives the incoming connection request but assumes that the authorization layer has already vetted the user's permissions. The handler then establishes the protocol connection to the underlying MCP server based solely on the {id} parameter provided in the URL path, leading directly to the authorization bypass condition.
The remediation implemented in version v0.21.1 centralizes and strictly enforces authorization for MCP server connections. The most critical change involves removing the /mcp-connect/ prefix from the global bypass arrays in pkg/api/authz/authz.go. This removal forces all requests directed at this endpoint to undergo comprehensive evaluation by the central authorizer before reaching the connection handler.
To handle the specific authorization requirements of MCP servers, the maintainers introduced explicit identifier checking logic located in checkMCPID within pkg/api/authz/mcpid.go. The updated authorizer intercepts the request, extracts the MCPID from the URL parameters, and performs mandatory validation checks against the authenticated user's session context.
The updated checkMCPID function mandates two distinct verification paths for authenticated users. First, it verifies if the user is the direct owner of the targeted MCPServerInstance. If the user is not the direct owner, the function utilizes an Access Control Rule (ACR) helper to verify if the user possesses explicit permissions granted via a MCPServerCatalogID or a PowerUserWorkspaceID. Only upon satisfying one of these conditions does the authorizer permit the connection.
// Pseudocode representation of the patched logic in checkMCPID
func checkMCPID(user *User, mcpID string) error {
// 1. Check direct ownership
if isOwner(user.ID, mcpID) {
return nil
}
// 2. Check catalog or workspace permissions via ACR
hasPermission := checkACR(user.ID, mcpID, MCPServerCatalogID) ||
checkACR(user.ID, mcpID, PowerUserWorkspaceID)
if !hasPermission {
return errors.New("unauthorized access to MCP server")
}
return nil
}Exploitation of this vulnerability requires a minimal set of prerequisites. The attacker must possess a valid, authenticated session on the target Obot instance. This session does not require administrative privileges; a standard low-privileged user account is sufficient. The attacker also requires the unique identifier of a target MCP server, such as ms1test, which they may obtain through information disclosure vulnerabilities, predictable naming conventions, or prior knowledge of the system architecture.
The attack begins with the construction of a standard HTTP GET request directed at the /mcp-connect/{target_mcp_id} endpoint. The attacker includes their valid authentication tokens (e.g., session cookies or Bearer tokens) within the request headers. Upon receiving this request, the vulnerable Obot gateway processes the route, identifies the /mcp-connect/ prefix, and bypasses the authorization checks due to the flawed allowlist configuration.
The Obot gateway subsequently establishes a connection to the specified MCP server on behalf of the attacker. The attacker now possesses a direct communication channel with the external tool. They can issue commands, execute queries, or retrieve contextual data exactly as if they were a highly privileged user explicitly authorized to use that specific MCP integration.
The impact of this authorization bypass is severe, meriting a CVSS score of 9.3 (Critical). The core consequence is the unauthorized exposure of external tools and sensitive contextual data managed by the targeted MCP servers. Because the vulnerability facilitates pivoting from the Obot platform to interconnected systems, the CVSS Scope metric is appropriately classified as Changed (S:C).
The precise nature of the data exposure depends entirely on the configuration and purpose of the compromised MCP server. If an MCP server connects to an internal database to provide context to an LLM, the attacker gains the ability to execute database queries or extract sensitive records. If the server interacts with a Version Control System, the attacker acquires read access to private source code repositories and potentially write access if the integration allows it.
Furthermore, this vulnerability compromises the fundamental integrity of the access control model within the Obot platform. Administrators rely on Access Control Rules (ACRs) to isolate resources and enforce least privilege principles. This flaw invalidates those isolation mechanisms, exposing all integrated MCP servers to all authenticated users regardless of the intended operational boundaries.
The primary and only definitive remediation for this vulnerability is upgrading the Obot MCP Gateway to version v0.21.1 or later. The patch introduces fundamental architectural changes to the authorization routing logic that cannot be replicated via external configuration files. Administrators must deploy the updated binary or container image to ensure the /mcp-connect/ endpoint correctly enforces ownership and Access Control Rules.
In environments where immediate patching is not technically feasible, administrators possess no viable configuration workarounds within the application itself. Mitigating the risk temporarily requires network-level intervention. Security teams can deploy Web Application Firewall (WAF) rules to restrict access to the /mcp-connect/ URI path based on specific IP addresses or require mandatory multi-factor authentication at the reverse proxy layer before the request reaches the Obot gateway.
Organizations should initiate proactive detection efforts by auditing HTTP access logs and application logs. Security analysts must search for successful GET requests to /mcp-connect/{id} endpoints and cross-reference the authenticated user ID associated with the request against the explicit owners or authorized users of the corresponding MCP server. Discrepancies between the requesting user and the authorized user list indicate active exploitation of this vulnerability.
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L| Product | Affected Versions | Fixed Version |
|---|---|---|
Obot MCP Gateway Obot Platform | < 0.21.1 | v0.21.1 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-285 |
| Attack Vector | Network |
| CVSS Score | 9.3 |
| Privileges Required | Low (Authenticated) |
| Impact Context | Changed Scope (Access to external tools/data) |
| Patch Status | Patched in v0.21.1 |
Improper Authorization in routing logic allows bypass of access control checks.