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



GHSA-HJWH-XVFW-QRWJ

GHSA-HJWH-XVFW-QRWJ: Credential Disclosure via Diagnostic Boundaries in mcp-searxng

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 20, 2026·6 min read·1 visit

Executive Summary (TL;DR)

mcp-searxng before 1.12.0 leaks plain-text SearXNG Basic Authentication credentials via standard error logs, MCP notifications, and JSON-RPC error outputs. Upgrading to 1.12.0 remediates the issue via a robust diagnostic sanitization layer.

A credential disclosure vulnerability in the mcp-searxng NPM package prior to version 1.12.0 allows attackers to recover plain-text SearXNG Basic Authentication credentials. The application exposes these credentials via console logs (stderr), MCP logging notifications, validation error messages, and JSON-RPC error responses. This occurs because the application lacks comprehensive sanitization across diagnostic boundaries when credentials are parsed from the SEARXNG_URL environment variable.

Vulnerability Overview

The mcp-searxng package is an implementation of the Model Context Protocol (MCP) designed to expose SearXNG private search capabilities to artificial intelligence assistants. In typical deployments, the server connects to a private SearXNG instance using credentials provided through the SEARXNG_URL environment variable. This configuration contains Basic Authentication credentials in plain-text format, which are parsed dynamically during system operations.

The application exposes a significant attack surface by failing to isolate diagnostic data across systemic boundaries. When errors or normal startup routines execute, the component forwards configuration parameters to stdout, stderr, and network communication channels. This behavior allows anyone with read permission on system streams or access to the MCP protocol messages to acquire active system credentials.

The core vulnerability belongs to the CWE-209 (Generation of Error Message Containing Sensitive Information) and CWE-532 (Insertion of Sensitive Information into Log File) classes. Exploitation allows local actors or connected remote clients to obtain full read-access to the underlying SearXNG search database by extracting administrative credentials. The lack of structured redaction guarantees that any diagnostic exception results in the immediate exposure of raw credentials.

Root Cause Analysis

The underlying flaw is located within the startup, logging, and exception aggregation mechanisms of mcp-searxng versions prior to 1.12.0. While a redaction utility named redactSearxngInstanceUrl() existed in src/searxng-instances.ts, the application failed to invoke this function systematically across diagnostic boundaries. This omission created multiple vectors where sensitive environment configurations containing raw authentication tokens bypassed protection layers.

The first vector occurs during initialization in src/index.ts where the system logs active search endpoints. The code queries getSearxngInstances() and directly maps the output arrays to a formatted string written to console.error. Because the URLs are output without sanitization, any administrative username and password values defined within the URI userinfo block are exposed in plain text within system logs.

The second vector involves protocol-level notification logging using the logMessage() helper inside src/index.ts. Once an MCP client completes the handshake, the server sends JSON-RPC telemetry notification messages containing the raw SEARXNG_URL value. Any authenticated client, regardless of administrative level, receives these messages automatically. Additionally, validation routines in src/searxng-instances.ts capture URL formatting exceptions and append the raw invalid value into the thrown error string, which is then serialized directly into JSON-RPC error responses.

Code Analysis

In vulnerable versions, the startup configuration is output to standard error streams using direct variable interpolation. The following code fragment from src/index.ts illustrates the unredacted logging path:

// Vulnerable startup initialization logs raw array contents to console.error
const searxngInstances = getSearxngInstances();
if (searxngInstances.length > 0) {
  console.error(`🌐 SearXNG URLs: ${searxngInstances.join("; ")}`);
}

This routine does not call any sanitization layers, ensuring that any user credentials stored inside the URI string are printed to the runtime logs.

The patched version resolves this exposure by implementing a centralized diagnostic sanitizer. In src/diagnostic-sanitizer.ts, the application implements sanitizeDiagnosticText() and sanitizeDiagnosticValue() to filter outbound data. During initialization, the application captures a snapshot of configured credentials and processes multiple potential representations, including percent-encoded, Base64-encoded, and plain-text forms.

// Patched startup logs utilize sanitizeDiagnosticText for boundary protection
const searxngInstances = getSearxngInstances();
if (searxngInstances.length > 0) {
  console.error(sanitizeDiagnosticText(`🌐 SearXNG URLs: ${searxngInstances.join("; ")}`));
}

The implementation uses regular expressions to strip the username and password authority parameters from HTTP and HTTPS URLs, replacing them with generic redacted values.

Evaluating the effectiveness of this patch shows a complete architecture change for diagnostic management. The sanitizer dynamically hooks error generation, ensuring that thrown objects run through sanitizeErrorForTransport() before being serialized into JSON-RPC payloads. The inclusion of complex encoding conversions (such as Base64 representation of username:password strings) prevents bypasses where credentials leak via HTTP Authorization header equivalents in raw debugging traces. The mitigation is complete because it controls all egress paths.

Exploitation & Attack Methodology

Exploitation of this vulnerability requires either local access to standard diagnostic streams or an active client connection to the MCP server. An attacker seeking to extract credentials locally must read the standard error (stderr) stream output by the Node.js process. In automated environments, this is achieved by reading container logs or inspecting shared journal files.

Alternatively, a client connected to the MCP daemon can retrieve credentials remotely by interacting with the JSON-RPC interface. Upon sending a standard initialize request, the server returns configuration details via automatic notifications/message payloads. Triggering validation rules is also effective; sending queries that violate target schemes forces the internal parser to throw validation errors that return the complete string containing the credentials.

The flow of the credential leak is illustrated below. The raw environment variables transit through the insecure logging boundary and validation wrappers, generating unredacted diagnostics:

Impact Assessment

The impact of this disclosure is high confidentiality loss for the associated SearXNG instance. Because SearXNG servers can be configured to protect sensitive indexes or private lookup endpoints, compromising these credentials allows attackers to execute searches, harvest information, and consume resources of the downstream target. The exposed credentials can also be reused if the target utilizes identical Basic Authentication tokens across other infrastructure nodes.

The CVSS v3.1 score is evaluated at 5.5, indicating Medium severity. The local attack vector metric (AV:L) reflects the standard deployment model where MCP servers communicate over standard input/output transport layers bound to the parent process. If the MCP server is configured to run over network transports (such as WebSockets or remote HTTP bridges), the exploitation vector expands to network-accessible scopes.

No active exploitation in the wild has been observed or reported in threat databases, and the issue is not listed in the CISA KEV catalog. However, the availability of public proof-of-concept steps increases the likelihood of opportunistic exploitation in misconfigured shared host environments or automated log collection servers.

Remediation & Mitigation Guidance

Remediation of this vulnerability requires immediate migration to mcp-searxng version 1.12.0 or higher. The upgraded package introduces the robust diagnostic sanitizer, which automatically redacts credentials from both stdout/stderr logs and outgoing JSON-RPC error frames. To apply the patch, execute npm install mcp-searxng@latest within the application environment.

In addition to upgrading the package, administrators must rotate the Basic Authentication credentials of the configured SearXNG search servers. Since older versions of the software wrote to standard logs, historical database indices and system aggregation streams may contain cached plaintext credentials. These files must be sanitized or purged to prevent backward-looking credential harvesting.

For downstream developers, configurations inside .mcp/server.json should be verified. The parameter SEARXNG_URL must have its isSecret property set to true to ensure MCP clients mask values in administrative portals. Applying these configurations blocks UI-level disclosure and enforces end-to-end credential containment.

Official Patches

GitHubRemediated Patch Release

Technical Appendix

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

Affected Systems

mcp-searxng NPM package

Affected Versions Detail

Product
Affected Versions
Fixed Version
mcp-searxng
ihor-sokoliuk
< 1.12.01.12.0
AttributeDetail
CWE IDCWE-209, CWE-532
Attack VectorLocal (AV:L) / Logical exposure via MCP clients
CVSS Score5.5 (Medium)
Exploit StatusProof of Concept (PoC) documented
Affected Versions< 1.12.0
Patched Version1.12.0
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1552.001Unsecured Credentials: Credentials in Files
Credential Access
T1213Data from Information Repositories
Collection
T1592Gather Victim Host Information
Reconnaissance
CWE-209
Generation of Error Message Containing Sensitive Information

The application contains an exposure of sensitive information via system logs and error payloads due to improper output sanitization.

Vulnerability Timeline

mcp-searxng version 1.11.0 is released, introducing authentication support
2026-07-06
mcp-searxng version 1.11.1 is released
2026-07-14
mcp-searxng version 1.12.0 is released, fixing the credential disclosure flaw
2026-07-25
GitHub Advisory GHSA-hjwh-xvfw-qrwj is published
2026-08-19

References & Sources

  • [1]GitHub Security Advisory GHSA-hjwh-xvfw-qrwj
  • [2]mcp-searxng Internal Security Advisory

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

•4 minutes ago•CVE-2026-61807
6.3

CVE-2026-61807: Stored DOM-Based Cross-Site Scripting in Snipe-IT

A Stored DOM-based Cross-Site Scripting (DOM XSS) vulnerability exists in Snipe-IT versions prior to 8.6.2. The vulnerability occurs when a stored manufacturer or supplier name is converted to CamelCase and rendered within the 'data-selected-count-id' attribute of a table. Client-side JavaScript retrieves this decoded attribute and performs unsafe string concatenation, passing it directly into jQuery's '.after()' method, enabling authenticated attackers to execute arbitrary JavaScript in the victim's session.

Alon Barad
Alon Barad
0 views•6 min read
•about 1 hour ago•CVE-2026-62673
8.2

CVE-2026-62673: Security Bypass in Grav CMS via Case-Sensitivity Mismatch

CVE-2026-62673 (also known as CVE-2026-62230 and GHSA-vwg3-w8w3-pc79) is a high-severity security bypass vulnerability in the Grav CMS. It permits unauthenticated remote attackers to circumvent directory and file access policies defined in Apache .htaccess. This flaw allows direct retrieval of sensitive configuration files, system-level credentials, and database equivalents from case-insensitive host filesystems.

Amit Schendel
Amit Schendel
1 views•6 min read
•about 4 hours ago•CVE-2026-61711
5.3

CVE-2026-61711: Sandbox Escape via Protobuf SecurityMode Enum Validation Bypass in Moby BuildKit

A detailed technical analysis of CVE-2026-61711, an input validation flaw in Moby BuildKit prior to version 0.31.1. The flaw allows unauthorized or custom frontends to construct build execution environments where Seccomp and AppArmor configurations are completely disabled by supplying an invalid protobuf enum index, resulting in an elevated kernel-level attack surface inside the build sandbox.

Amit Schendel
Amit Schendel
4 views•4 min read
•about 5 hours ago•CVE-2026-61712
2.3

CVE-2026-61712: Denial of Service via Unbounded Resource Allocation in moby/buildkit

moby/buildkit is susceptible to a denial-of-service vulnerability prior to version 0.31.1. When BuildKit processes user or group directives from untrusted build contexts or base images, it reads configuration databases such as /etc/passwd and /etc/group directly into memory without enforcing boundaries. An attacker can exploit this behavior by engineering malicious files that trigger host memory exhaustion or block daemon threads indefinitely.

Alon Barad
Alon Barad
2 views•7 min read
•about 6 hours ago•CVE-2026-59992
5.4

CVE-2026-59992: Broken Access Control and Path Traversal in Tina CMS Production Media Adapters

CVE-2026-59992 is a critical broken access control vulnerability in the first-party production media adapters of Tina CMS, including next-tinacms-s3, next-tinacms-dos, next-tinacms-azure, and next-tinacms-cloudinary. The issue allows authenticated editors to escape the configured mediaRoot directory containment, facilitating unauthorized file uploads, modifications, and deletions across the entire storage bucket or container.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 7 hours ago•CVE-2026-63123
6.5

CVE-2026-63123: Cross-Site Request Forgery leading to Cross-Origin Arbitrary File Write in @tinacms/cli

A Cross-Site Request Forgery (CSRF) vulnerability in the local development server of @tinacms/cli allowed malicious cross-origin pages to send state-changing HTTP requests. This issue permitted attackers to write arbitrary files into a developer's project directory or manipulate search and GraphQL indices without authorization.

Amit Schendel
Amit Schendel
5 views•4 min read