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-31841

CVE-2026-31841: Raw Database Statement Exposure in Hyperterse MCP Search Tool

Amit Schendel
Amit Schendel
Senior Security Researcher

Mar 12, 2026·6 min read·33 visits

Executive Summary (TL;DR)

Hyperterse < 2.2.0 leaks internal SQL statements via the MCP search tool due to missing output sanitization, exposing database schema details to users and AI agents.

Hyperterse versions 2.0.0 through 2.1.9 exhibit an information disclosure vulnerability (CWE-433) within the Model Context Protocol (MCP) server implementation. The search tool fails to sanitize internal tool representations before returning them to the client, leaking raw SQL database statements. This exposure provides attackers with deep insight into internal database schemas, table structures, and query logic, lowering the barrier for subsequent targeted attacks.

Vulnerability Overview

Hyperterse operates as a Model Context Protocol (MCP) server, bridging artificial intelligence agents with internal backend surfaces. The framework exposes a discrete set of tools that Large Language Models (LLMs) can discover and invoke via natural language. Prior to version 2.2.0, the framework contained a medium-severity information disclosure vulnerability (CVE-2026-31841) within this tool discovery mechanism.

The vulnerability is classified as CWE-433 (Unparsed Raw Web Content Delivery). The system returns internal database queries directly to the client interface without appropriate sanitization or filtering. This defect resides specifically within the search capability, which is responsible for returning available tool schemas to the querying agent based on semantic relevance.

By invoking the search tool, any authenticated or unauthenticated client capable of interacting with the MCP surface receives extensive metadata about the backend operations. The exposed data includes exact SQL query templates, revealing the underlying table names, column structures, and relational mapping parameters utilized by the framework's SQL adapters.

Root Cause Analysis

The root cause lies in the handling of internal Tool object serialization within the MCP server's search functionality. When a client issues a query via the search tool, the Hyperterse backend queries its internal index to locate relevant operational capabilities. These internal representations contain comprehensive metadata, including a Statement field that stores the raw SQL query template (e.g., SELECT * FROM users WHERE id = {{ inputs.userId }}) associated with the tool.

The application code in core/runtime/mcp/mcp.go lacked an output sanitization layer during the construction of the JSON response payload. The callSearchTool function iterated over the search index hits and directly appended the unredacted Tool.Statement field into the final response map. This architectural oversight resulted in internal implementation details being broadcast across the API boundary.

Furthermore, the framework's indexing logic in core/runtime/mcp/search_index.go aggressively indexed all tool statements regardless of their execution context. Even handler-only tools, which execute custom scripts rather than database adapters, had their synthetic placeholder statements injected into the searchable index. This maximized the surface area for exposure, ensuring that almost any search operation would leak internal statement strings back to the requester.

Code Analysis and Patch Review

The remediation for this vulnerability required targeted modifications across the MCP response routing and the search indexing systems. The primary fix was implemented in commit 1fdb9479be0bf87fed24f8553839a3d8b0723f4a. The developers modified the callSearchTool function in core/runtime/mcp/mcp.go to explicitly remove the statement field from the mapped search results.

// core/runtime/mcp/mcp.go (Vulnerable & Patched)
 func (a *Adapter) callSearchTool(ctx context.Context, req *mcpsdk.CallToolRequest) ...
 	for _, hit := range hits {
 		results = append(results, map[string]interface{}{
 			"name":              hit.Tool.Name,
 			relevanceScoreField: hit.RelevanceScore,
 			"description":       hit.Tool.Description,
- 			"statement":         hit.Tool.Statement, // Vulnerable line removed
 			"inputs":            buildInputMetadata(hit.Tool),
 		})
 	}

A secondary hardening measure was introduced via commit efa400591bd8748cc849bae37c6e9b55e0f45b20 to address the internal indexing behavior. The newToolSearchIndex function in core/runtime/mcp/search_index.go was updated to conditionally evaluate whether a statement should be indexed at all.

// core/runtime/mcp/search_index.go (Patched)
 func newToolSearchIndex(tools []*hyperterse.Tool) *toolSearchIndex {
     ...
-    statementText := normalizeText(tool.Statement)
+    statementText := ""
+    if len(tool.Use) > 0 { // Restrict indexing to adapter-backed tools
+        statementText = normalizeText(tool.Statement)
+    }
     ...
 }

This secondary patch ensures that synthetic statements from handler-only tools are excluded from the index entirely, narrowing the data footprint stored in memory. The combination of these two commits fully resolves the unparsed raw web content delivery issue by cutting off the leak at the API boundary and restricting internal data processing.

Exploitation Methodology

Exploitation requires the attacker to have network access to the Hyperterse MCP endpoint and the ability to send callTool requests. The attack sequence begins with the adversary crafting a standard MCP request targeting the internal search tool. The payload utilizes a broad natural language query string designed to trigger multiple matches within the backend index.

Upon receiving the request, the Hyperterse server processes the semantic search and constructs a JSON response array. In vulnerable versions, the application serializes the raw Statement field for each matched tool. The attacker intercepts or parses this JSON payload to extract the SQL strings. A typical leaked statement reveals critical structure: SELECT user_id, email, password_hash FROM core_users WHERE email = {{ inputs.email }}.

With this structural knowledge, the attacker maps the entire database schema without needing an initial blind SQL injection vector. The gathered intelligence acts as a foundational reconnaissance phase. The attacker subsequently leverages the discovered table structures and column naming conventions to craft highly specific logic bypass payloads against the framework's executable tools.

Impact Assessment

The CVSS v3.1 base score for CVE-2026-31841 is 6.5, reflecting a medium severity rating. The primary impact is constrained to a partial loss of confidentiality (C:L). While the vulnerability does not directly expose user data records, it systematically leaks the architectural blueprints of the backend database. This structural exposure includes table designations, column schemas, and parameterized variable mappings.

The vulnerability also carries a partial integrity impact rating (I:L). The framework operates by executing tools that interface directly with the database. Exposing the exact query syntax provides an attacker with the exact template required to manipulate input parameters effectively. This directly aids in the construction of subsequent attacks, significantly reducing the complexity required to achieve unauthorized data modification or logical bypasses.

The vulnerability does not affect system availability (A:N), as the search queries perform read-only index lookups that do not consume excessive resources or crash the daemon. The attack vector is strictly network-based (AV:N) and requires no special privileges (PR:N) or user interaction (UI:N), making it highly reliable and automated across large-scale scanning operations.

Remediation and Mitigation

The vendor provides an official patch in Hyperterse version 2.2.0. Administrators must upgrade the framework binaries and redeploy the affected MCP server components immediately. Following the upgrade, a review of the API traffic logs is recommended to identify any prior anomalous usage of the search tool that resulted in large payload responses.

If immediate patching is technically infeasible, organizations can implement interim configuration hardening. Administrators should review the declarative tool definitions and manually sanitize the Statement fields, utilizing handler-only script-backed tools instead of the SQL adapter for operations handling highly sensitive data structures. This prevents the raw schema from residing in the vulnerable configuration struct entirely.

Organizations must also enforce the Principle of Least Privilege at the database layer. The service account credential utilized by the Hyperterse backend adapter must be restricted to minimal permissions. The database user must only possess SELECT, INSERT, or UPDATE rights on the specific tables required for operation, preventing lateral movement or database-wide enumeration if the exposed schema facilitates a secondary SQL injection vector.

Official Patches

HyperterseOfficial GitHub Security Advisory
HyperterseVersion 2.2.0 Release Notes

Fix Analysis (2)

Technical Appendix

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

Affected Systems

Hyperterse FrameworkHyperterse MCP ServerAI Agent Integrations using vulnerable Hyperterse backends

Affected Versions Detail

Product
Affected Versions
Fixed Version
Hyperterse
Hyperterse
>= 2.0.0, < 2.2.02.2.0
AttributeDetail
Vulnerability ClassCWE-433: Unparsed Raw Web Content Delivery
Attack VectorNetwork (MCP callTool via JSON RPC)
CVSS v3.1 Score6.5 (Medium)
Confidentiality ImpactLow (Database schema and queries)
Exploit StatusProof of Concept Available
Authentication RequiredNone

MITRE ATT&CK Mapping

T1592.002Gather Victim Host Information: Software
Reconnaissance
T1190Exploit Public-Facing Application
Initial Access
CWE-433
Unparsed Raw Web Content Delivery

Unparsed Raw Web Content Delivery

Vulnerability Timeline

Initial patch work and changelog updates implemented by maintainers
2026-03-02
Core logic fix committed (removal of statement field from JSON response)
2026-03-09
Search index hardening and scoring enhancements committed
2026-03-09
Official security advisory published (GHSA-92gp-jfgx-9qpv)
2026-03-12
CVE-2026-31841 assigned and published
2026-03-12

References & Sources

  • [1]GHSA-92gp-jfgx-9qpv
  • [2]Hyperterse v2.2.0 Release Notes
  • [3]Fix Commit: Direct Field Removal
  • [4]Fix Commit: Search Index Hardening
  • [5]CVE-2026-31841 Official Record

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 23 hours ago•CVE-2026-58197
8.8

CVE-2026-58197: Host Escape and Lateral Movement via Insecure Container Network Defaults in ToolHive

A high-severity access control vulnerability in ToolHive CLI before v0.30.1 and ToolHive Studio before v0.38.0 allows local containerized MCP servers to bypass network isolation. This enables malicious workloads to establish TCP/IP connections to administrative and control plane endpoints exposed on the host loopback interface.

Amit Schendel
Amit Schendel
7 views•8 min read
•about 24 hours ago•CVE-2026-63405
5.9

CVE-2026-63405: Insufficient Verification of Data Authenticity in AnyCable Pusher REST API

AnyCable is a real-time communication server. Prior to version 1.6.15, its Pusher-compatible REST API suffered from an authentication bypass vulnerability because it failed to verify that the request body matched the signature-validated body_md5 parameter. This allows attackers to perform replay attacks with modified body contents.

Amit Schendel
Amit Schendel
8 views•5 min read
•1 day ago•CVE-2026-64847
6.8

CVE-2026-64847: Indefinite Denial of Service via Undrained Stderr in AnyIO Process Pool Workers

A denial-of-service vulnerability exists in AnyIO prior to version 4.14.2. Standard error streams of process-pool workers are connected to an operating system pipe that is never drained by the parent process. This allows a worker to fill the pipe buffer and deadlock indefinitely.

Amit Schendel
Amit Schendel
7 views•6 min read
•1 day ago•CVE-2026-63349
7.0

CVE-2026-63349: Privilege Dropping Bypass and Denial of Service in AnyIO Subprocess Module

CVE-2026-63349 is a critical privilege-dropping bypass vulnerability in the AnyIO asynchronous framework (versions 4.14.0 and 4.14.1) on POSIX platforms. Due to a variable assignment typo, supplementary groups specified by the developer are not correctly propagated to the execution backend, resulting in subprocesses retaining the parent process's elevated supplementary group permissions.

Alon Barad
Alon Barad
10 views•5 min read
•1 day ago•CVE-2026-63406
5.9

CVE-2026-63406: Information Disclosure via Insecure Telemetry and Hardcoded Credentials in AnyCable-Go

CVE-2026-63406 is an information disclosure vulnerability in AnyCable-go prior to version 1.6.15. The built-in telemetry client is enabled by default with a hardcoded public authentication token ('secret'). This client digests highly sensitive configuration parameters and command-line arguments, including JWT secrets and RPC secrets, into a stable SHA-256 fingerprint. This fingerprint is sent over public networks, exposing those administrative secrets to offline dictionary and brute-force attacks if intercepted.

Alon Barad
Alon Barad
7 views•5 min read
•1 day ago•CVE-2026-84992
6.1

CVE-2026-84992: Cross-Site Scripting (XSS) via Fenced Code Block Parsing in md-editor-v3

CVE-2026-84992 is a Cross-Site Scripting (XSS) vulnerability affecting md-editor-v3 before version 6.5.4. It occurs because the fenced-code block language parser directly interpolates unescaped language metadata into unquoted HTML attributes inside the custom rendering callback. This bypasses the built-in XSSPlugin which runs during the parsing phase, before rendering.

Amit Schendel
Amit Schendel
9 views•6 min read