CVE-2026-54450
LowCVSS 2.9Summary
ToolHive prior to 0.29.1 has a flaw in networking.IsPrivateIP (pkg/networking/utilities.go) that omits the IPv6 NAT64 prefixes 64:ff9b::/96 and 64:ff9b:1::/48. NAT64 addresses embedding private, loopback, or link-local IPv4 targets are classified as public and allowed, enabling blind probing of internal TCP/TLS reachability on a host behind a NAT64/DNS64 gateway.
Risk Assessment
An attacker can use an external OAuth client to probe internal services through a NAT64 gateway, obtaining an internal reachability oracle, though this does not lead to metadata credential exfiltration.
Recommendation
Upgrade ToolHive to version 0.29.1 or later, which fixes NAT64 address classification in IsPrivateIP.
Other vulnerabilities in ToolHive
See all- CVE-2026-58197High
In ToolHive prior to CLI 0.30.1 and Studio 0.38.0, locally run MCP server containers use the default network permission profile without network isolation, permitting access to host.docker.internal while ToolHive API and MCP proxy endpoints are reachable without authentication. A malicious or compromised MCP server can use the Docker gateway to contact host-local services, other ToolHive-managed MCP proxies, or the ToolHive control plane without escaping the container. This is fixed in CLI 0.30.1 and Studio 0.38.0.
- CVE-2026-58196Medium
ToolHive prior to 0.31.0 has a vulnerability in remote authentication where the client trusts the MCP server for authentication discovery destinations, allowing a malicious server to issue GET requests to internal services (link-local, RFC1918, cloud metadata) outside the server's container. This can lead to data exfiltration or privilege escalation.
Original NVD description (English source)
ToolHive is a utility designed to simplify the deployment and management of Model Context Protocol (MCP) servers. Prior to 0.29.1, networking.IsPrivateIP in pkg/networking/utilities.go omits the IPv6 NAT64 prefixes 64:ff9b::/96 and 64:ff9b:1::/48, so NAT64 addresses embedding private, loopback, or link-local IPv4 targets are classified as public and allowed. The most direct attacker-controlled path begins when an external OAuth client supplies a client_id URL that CIMDStorageDecorator.GetClient routes through FetchClientMetadataDocument in pkg/oauthproto/cimd/fetch.go; protectedDialerControl in pkg/networking/http_client.go and validateHost in pkg/skills/gitresolver/reference.go share the defective classification but use operator-controlled or user-controlled destinations. On a ToolHive host behind a NAT64/DNS64 gateway, the gateway translates an allowed address such as 64:ff9b:1::a9fe:a9fe to 169.254.169.254, permitting blind probing of internal TCP or TLS reachability. The attacker-controlled CIMD path requires HTTPS, verifies certificates, and does not reflect response bodies, so the established impact is an internal reachability oracle rather than metadata credential exfiltration; the webhook client is not affected because it does not use this IP guard. This issue is fixed in version 0.29.1.

