mcp-searxng's web_url_read tool fetches attacker-influenced URLs server-side, and the SSRF filter that blocks loopback, private, and cloud-metadata addresses only activates when the operator sets MCP_HTTP_HARDEN=true — a flag that is off out of the box, so a stock deployment has no internal-address filtering at all. Because the URL is typically supplied or steered by the LLM itself, an indirect prompt injection (a poisoned search result or fetched page) can redirect the agent to call this tool against http://169.254.169.254 or an internal admin service, and the response comes straight back into the model's context. There is no CISA KEV listing, no EPSS score, and no public exploit or Nuclei template yet — this is CVSS 6.5/medium with confidentiality-only impact, not a mass-exploited bug — but the exploit path is trivial to trigger once an attacker controls any content the agent retrieves. Any team running mcp-searxng as an MCP server for an LLM agent should upgrade to 1.2.1, or at minimum set MCP_HTTP_HARDEN=true today, and add network-level egress blocks on 169.254.169.254/16 and RFC1918 ranges from the host running the MCP server as defense in depth. This is a useful signal for any MCP tool audit generally: check whether security guards default to on or off, because 'off by default' quietly reintroduces SSRF into agent stacks that assume the tool is safe.
What is the risk?
CVSS 6.5 (AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N) — network-reachable, low complexity, no privileges required, but needs some form of user/agent interaction to trigger the fetch, and impact is confidentiality-only (no integrity or availability loss). No CISA KEV listing, no EPSS score published, and no public exploit code or Nuclei template exist, so opportunistic mass exploitation is unlikely today. The real-world risk is elevated by two factors independent of the CVSS score: the unsafe behavior (no SSRF filtering) is the *default* configuration, and the trigger vector (an LLM-controlled URL) is naturally exposed to indirect prompt injection in any agentic deployment. Overall: moderate risk, high ease of triggering in agent contexts where the tool is exposed to untrusted content.
How does the attack unfold?
What systems are affected?
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| mcp-searxng | npm | < 1.2.1 | 1.2.1 |
Do you use mcp-searxng? You're affected.
How severe is it?
What is the attack surface?
What should I do?
1 step-
Upgrade to mcp-searxng >= 1.2.1, which patches this issue. If upgrading isn't immediately possible, explicitly set MCP_HTTP_HARDEN=true in the server environment to enable assertUrlAllowed filtering (note this is a literal-hostname check with no DNS-rebinding or per-redirect re-validation, so treat it as a mitigation, not a complete fix). Add network-level egress controls on the host/container running the MCP server: block outbound requests to 169.254.169.254/16 (cloud metadata), 127.0.0.0/8, and RFC1918 private ranges unless explicitly required. Where supported, enforce IMDSv2 on cloud instances so metadata SSRF alone can't yield credentials. Detection: log and alert on web_url_read calls targeting private/link-local/loopback IPs, and monitor for anomalous outbound connections from the MCP server process.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-54688?
mcp-searxng's web_url_read tool fetches attacker-influenced URLs server-side, and the SSRF filter that blocks loopback, private, and cloud-metadata addresses only activates when the operator sets MCP_HTTP_HARDEN=true — a flag that is off out of the box, so a stock deployment has no internal-address filtering at all. Because the URL is typically supplied or steered by the LLM itself, an indirect prompt injection (a poisoned search result or fetched page) can redirect the agent to call this tool against http://169.254.169.254 or an internal admin service, and the response comes straight back into the model's context. There is no CISA KEV listing, no EPSS score, and no public exploit or Nuclei template yet — this is CVSS 6.5/medium with confidentiality-only impact, not a mass-exploited bug — but the exploit path is trivial to trigger once an attacker controls any content the agent retrieves. Any team running mcp-searxng as an MCP server for an LLM agent should upgrade to 1.2.1, or at minimum set MCP_HTTP_HARDEN=true today, and add network-level egress blocks on 169.254.169.254/16 and RFC1918 ranges from the host running the MCP server as defense in depth. This is a useful signal for any MCP tool audit generally: check whether security guards default to on or off, because 'off by default' quietly reintroduces SSRF into agent stacks that assume the tool is safe.
Is CVE-2026-54688 actively exploited?
No confirmed active exploitation of CVE-2026-54688 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-54688?
Upgrade to mcp-searxng >= 1.2.1, which patches this issue. If upgrading isn't immediately possible, explicitly set MCP_HTTP_HARDEN=true in the server environment to enable assertUrlAllowed filtering (note this is a literal-hostname check with no DNS-rebinding or per-redirect re-validation, so treat it as a mitigation, not a complete fix). Add network-level egress controls on the host/container running the MCP server: block outbound requests to 169.254.169.254/16 (cloud metadata), 127.0.0.0/8, and RFC1918 private ranges unless explicitly required. Where supported, enforce IMDSv2 on cloud instances so metadata SSRF alone can't yield credentials. Detection: log and alert on web_url_read calls targeting private/link-local/loopback IPs, and monitor for anomalous outbound connections from the MCP server process.
What systems are affected by CVE-2026-54688?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, MCP tool servers, cloud-hosted agent deployments, web browsing / retrieval tools.
What is the CVSS score for CVE-2026-54688?
CVE-2026-54688 has a CVSS v3.1 base score of 6.5 (MEDIUM).
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0051.001 Indirect AML.T0053 AI Agent Tool Invocation AML.T0075 Cloud Service Discovery AML.T0086 Exfiltration via AI Agent Tool Invocation Compliance Controls Affected
What are the technical details?
Original Advisory
Ref: https://github.com/ihor-sokoliuk/mcp-searxng/issues/87#issuecomment-4645453694 ### Summary The web_url_read tool fetches a caller-supplied URL server-side and converts it to markdown. An SSRF guard (assertUrlAllowed, which blocks private/loopback/metadata addresses) exists but runs only when MCP_HTTP_HARDEN=true, which is off by default. So in the default configuration there is no internal-address filtering, and an attacker who can influence the URL can make the server fetch internal services and cloud metadata and return their content. Confirmed on 1.1.0 (default config): web_url_read fetched a local internal sentinel and returned its content. ### Details dist/index.js (around lines 90-101): web_url_read calls fetchAndConvertToMarkdown on the caller URL. dist/url-reader.js (around lines 44-52): assertUrlAllowed performs the private-IP/loopback check, but only when the hardening flag is set; dist/http-security.js (around line 11) defaults MCP_HTTP_HARDEN to off. With the default config the check is skipped entirely. Even when enabled, the check is literal-hostname based with no DNS-rebinding or redirect re-check (the fetch follows redirects). file:// is rejected, so this is HTTP/HTTPS SSRF. ### PoC Re-validated on mcp-searxng 1.1.0 over MCP stdio in the default configuration (MCP_HTTP_HARDEN not set): ``` tools: searxng_web_search, web_url_read web_url_read({ url: "http://127.0.0.1:<port>/internal" }) -> server fetched the internal sentinel; SSRF: CONFIRMED ``` The server fetched the loopback sentinel and returned its content. With MCP_HTTP_HARDEN=true the same request is blocked (policy error), confirming the guard exists but ships off. The same reaches http://169.254.169.254/... on cloud hosts. ### Impact In the default configuration an attacker who can influence the URL (LLM-produced and steerable via prompt injection) can make the server fetch internal-only HTTP services and the cloud metadata endpoint, returning their contents into the model context for exfiltration. The protection that would prevent it is not enabled by default. ### Remediation Enable the internal-address filtering by default (fail safe): make assertUrlAllowed run unconditionally and require an explicit opt-out only for trusted environments. Strengthen the check to resolve the host and reject loopback, link-local/metadata (169.254.0.0/16), 0.0.0.0/8, and private ranges, and re-validate on every redirect hop (or pin to the validated IP).
Exploitation Scenario
An attacker plants content designed for indirect prompt injection — for example a search-result snippet or a webpage the agent is likely to retrieve via searxng_web_search — containing instructions that steer the LLM into calling web_url_read against http://169.254.169.254/latest/meta-data/iam/security-credentials/<role-name> or an internal-only admin endpoint like http://127.0.0.1:8080/admin. Because MCP_HTTP_HARDEN is off by default, the server fetches the URL with no SSRF filtering, converts the response to markdown, and returns it directly into the model's context window. The attacker then uses a second injected instruction (or simply observes the conversation if they have access) to get the model to echo or forward that content, exfiltrating cloud credentials or internal service data without ever needing direct network access to the victim's infrastructure.
Weaknesses (CWE)
CWE-918 — Server-Side Request Forgery (SSRF): The web server receives a URL or similar request from an upstream component and retrieves the contents of this URL, but it does not sufficiently ensure that the request is being sent to the expected destination.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N References
Timeline
Related Vulnerabilities
CVE-2026-34938 10.0 praisonaiagents: sandbox bypass enables full host RCE
Same attack type: Prompt Injection CVE-2026-33663 10.0 n8n: member role steals plaintext HTTP credentials
Same attack type: Data Leakage CVE-2023-3765 10.0 MLflow: path traversal allows arbitrary file read
Same attack type: Data Leakage CVE-2025-5120 10.0 smolagents: sandbox escape enables unauthenticated RCE
Same attack type: Data Leakage GHSA-wpqr-6v78-jr5g 10.0 Gemini CLI: RCE via malicious workspace in CI/CD
Same attack type: Prompt Injection