🛡️ CVE-2026-49257 — mcp-pinot-server

🔴 CVSS 10.0 — Critical ✅ No Known Exploit CWE-306 NVD
10.0
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

mcp-pinot: Unauthenticated tool invocation via default oauth_enabled=False + host 0.0.0.0 bind

Resolution

Fixed in [v3.1.0](https://github.com/startreedata/mcp-pinot/releases/tag/v3.1.0), released 2026-05-25. The fix was merged in [PR #95](https://github.com/startreedata/mcp-pinot/pull/95) at commit [1c7d3f9](https://github.com/startreedata/mcp-pinot/commit/1c7d3f9cd384854bf72c127d230bdb32299475ad).

The fix changes the default HTTP bind host to 127.0.0.1, refuses non-loopback HTTP/HTTPS exposure unless OAuth is enabled, makes Helm exposure opt-in and OAuth-gated, and adds parser-backed single-statement read-only validation for read-query.

CVSS evaluation

Reviewed on 2026-05-25. The advisory remains Critical with CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H = 10.0.

Rationale:

| Metric | Value | Reason |

|---|---|---|

| AV | Network | The default HTTP server bound to 0.0.0.0:8080 and accepted remote HTTP requests. |

| AC | Low | Exploitation required only a direct MCP tool call. |

| PR | None | OAuth was disabled by default. |

| UI | None | No user interaction was required. |

| S | Changed | The vulnerable MCP server used its server-side credentials to act on the separate Pinot cluster security boundary. |

| C | High | Unauthenticated callers could read table data and cluster metadata through server-side Pinot credentials. |

| I | High | Unauthenticated callers could create or update schemas and table configs where the server-side account had those privileges. |

| A | High | Expensive queries and configuration mutations could degrade or disrupt Pinot availability. |

# Unauthenticated tool invocation via default oauth_enabled=False + host 0.0.0.0 bind

Summary

mcp-pinot v3.0.1 (and earlier) defaults to running an HTTP MCP server bound to 0.0.0.0:8080 with no authentication enabled. All MCP tools, including SQL query execution, schema creation, and table-config mutation, are reachable by any network-adjacent caller. The server proxies these calls using server-side Pinot credentials, producing a confused-deputy condition that yields full read/write access to the configured Pinot cluster.

Affected versions

  • All releases on main, confirmed in tags v2.1.0 through v3.0.1.
  • Affected files: mcp_pinot/server.py, mcp_pinot/config.py.

Root cause

Three defaults compose to produce unauthenticated network exposure:

1. Auth is opt-in and defaults to off (mcp_pinot/config.py:64,328):

```python

@dataclass

class ServerConfig:

...

oauth_enabled: bool = False

...

def load_server_config() -> ServerConfig:

return ServerConfig(

...

oauth_enabled=os.getenv("OAUTH_ENABLED", "false").lower() == "true",

...

)

```

2. Auth construction is gated by oauth_enabled (mcp_pinot/server.py:26-46):

```python

_auth = None

if server_config.oauth_enabled:

oauth_config = load_oauth_config()

token_verifier = JWTVerifier(...)

_auth = OAuthProxy(...)

mcp = FastMCP("Pinot MCP Server", auth=_auth)

```

When oauth_enabled is false (default), _auth stays None and FastMCP registers all @mcp.tool endpoints with no authentication.

3. Default bind is all interfaces on a well-known port (mcp_pinot/config.py:60-61):

```python

host: str = "0.0.0.0"

port: int = 8080

```

The HTTP transport in server.py:263-268 uses these values directly. Any operator following the README's HTTP transport instructions (uv pip install, .env from .env.example, run) ends up with a network-reachable MCP server with no auth.

Confused-deputy

The Pinot client uses server-side credentials loaded from environment variables (mcp_pinot/config.py:285-294, 300-315). When an unauthenticated MCP caller invokes read_query or any other tool, the request is executed with the server's PINOT_TOKEN or PINOT_USERNAME/PINOT_PASSWORD, which is typically a privileged service account. The MCP server effectively launders the caller's lack of identity into the server's privileges against the upstream cluster.

Exposed tools

All 14 tools in mcp_pinot/server.py are exposed without auth in the default configuration:

| Tool | Impact when unauthenticated |

|---|---|

| read_query | Arbitrary SELECT against any table allowed by server-side filter (or all tables if no filter) |

| list_tables | Enumerate cluster schemas |

| table_details, segment_list, segment_metadata_details, tableconfig_schema_details, index_column_details, get_schema, get_table_config | Read cluster metadata |

| create_schema, update_schema | Create or mutate Pinot schemas |

| create_table_config, update_table_config | Create or mutate table configurations |

| reload_table_filters | Reload server filter file; response leaks previous_filters and new_filters lists |

| test_connection | Cluster diagnostics including host, port, scheme, database, and auth-mode |

Reproduction

Minimal reproduction against a default-configured `mcp

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs no privileges on the target. No user interaction is required. The scope is changed, meaning a successful attack can affect components beyond the vulnerable one. Rated impact: confidentiality high, integrity high, availability high.

Weakness class

CVE-2026-49257 is classified as CWE-306: Missing Authentication for Critical Function. A sensitive function can be reached without authenticating at all.

Affected software

CVE-2026-49257 is recorded against 2 packages.

  • mcp-pinot-server (fixed in 3.1.0)
  • unknown

Timeline and source

Published on 26 June 2026 and last revised on 13 July 2026. No public exploit is currently recorded for this entry. Record sourced from NVD.

References

github.com (Web)
nvd.nist.gov (Advisory)
github.com (Web)
github.com (Web)
github.com (Web)
github.com (Package)

Details

Severity CRITICAL
CVSS Score 10.0
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
CWE CWE-306
Public Exploit ✅ No
Source NVD
Published 2026-06-26
Updated 2026-08-12
Modified 2026-07-13
Fix URL N/A

Affected Packages

Software From version Fixed in
mcp-pinot-server 3.1.0
unknown

Exploit Protection

Are you running mcp-pinot-server?

CVE-2026-49257 carries CVSS 10.0 Critical rating. BotEraser checks your installation against this and other known CVE records, and blocks IPs associated with exploit activity.

Check My Site For CVE-2026-49257 →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.