
Technische Studie der CVE-2025-68613-Schwachstelle in n8n, einschließlich betroffener Versionen, Laborexplorationsszenario, offensiver und defensiver Analyse sowie Minderungsstrategien.
n8n ist eine Workflow-Automatisierungsplattform, die zur Integration von Systemen und Diensten über visuelle Flows und JavaScript-Ausdrücke verwendet wird.
CVE-2025-68613 ist eine kritische Remote-Code-Execution-(RCE)-Schwachstelle mit CVSS 9.9, die mehrere Versionen von n8n betrifft. Die Schwachstelle tritt bei der Verarbeitung von JavaScript-Ausdrücken in Workflows in verwundbaren Versionen auf, die nicht ordnungsgemäß isoliert sind. Dies ermöglicht authentifizierten Benutzern mit Bearbeitungsrechten, Code außerhalb des erwarteten Verhaltens der Anwendung auszuführen.
In der Praxis kann diese Schwachstelle ausgenutzt werden, um Befehle auf dem Server auszuführen, auf dem n8n läuft, und zwar mit den eigenen Privilegien der Anwendung. Betroffene Versionen reichen von 0.211.0 bis zu Versionen vor den in 1.120.4, 1.121.1 und 1.122.0 angewendeten Korrekturen.
Dieses Repository dokumentiert CVE-2025-68613 technisch und behandelt den Kontext der Schwachstelle, betroffene Versionen, die Ausnutzung und empfohlene Gegenmaßnahmen.

| Status | n8n-Version | Hinweis |
|---|---|---|
| ❌ Betroffen | >= 0.211.0 | Einführung des verwundbaren Mechanismus |
| ❌ Betroffen | < 1.120.4 | Verwundbar bis zum Patch im Branch 1.120 |
| ❌ Betroffen | < 1.121.1 | Verwundbar bis zum Patch im Branch 1.121 |
| ❌ Betroffen | < 1.122.0 | Verwundbar bis zum Patch im Branch 1.122 |
| ✅ Korrigiert | 1.120.4 | Offizieller Fix angewendet |
| ✅ Korrigiert | 1.121.1 | Offizieller Fix angewendet |
| ✅ Korrigiert | >= 1.122.0 | Fix standardmäßig enthalten |
Es wird empfohlen, sofort auf Version 1.122.0 oder höher zu aktualisieren.
Zur Demonstration der Schwachstelle sind folgende Bedingungen erforderlich:
Die Schwachstelle tritt während der Erstellung und Ausführung von Workflows auf, nicht vor der Authentifizierung.
Der erste Schritt besteht darin, sich mit einem gültigen Benutzer an der n8n-Weboberfläche anzumelden.

Dieser Schritt bestätigt, dass der Angriff nicht anonym ist. Die Schwachstelle erfordert einen authentifizierten Benutzer.
Nach der Anmeldung ist zu überprüfen, ob der Benutzer über Berechtigungen zum Erstellen und Bearbeiten von Workflows verfügt.

Dies ist relevant, da nur Benutzer mit dieser Zugriffsebene dynamische Ausdrücke in Workflows einfügen können.
Mit dem authentifizierten Benutzer einen neuen Workflow von Grund auf erstellen.

Hier beginnt die legitime Nutzung der n8n-Funktionalität, die in verwundbaren Versionen ausgenutzt werden kann.
Der erste zum Workflow hinzugefügte Node ist der Manual Trigger.

Was dieser Node bewirkt: Ermöglicht die manuelle Ausführung des Workflows und dient als Ausgangspunkt des Flows.
In diesem Szenario dient er lediglich als Einstiegspunkt für die Workflow-Ausführung.
Der zweite hinzugefügte Node ist Edit Fields (Set).

Was dieser Node bewirkt: Dieser Node ermöglicht das Erstellen, Ändern oder Überschreiben von Datenfeldern innerhalb des Workflows. Er akzeptiert statische Werte oder JavaScript-Ausdrücke, die zur Ausführungszeit ausgewertet werden.
Genau an diesem Punkt manifestiert sich die Schwachstelle.
Im Wertfeld des Nodes Edit Fields (Set) einen JavaScript-Ausdruck eingefügt, der von {{ }} umschlossen ist, dem von n8n verwendeten Format zur Auswertung dynamischer Ausdrücke.

Beispiel-Payload:
{{ (function(){
return this.process.mainModule
.require('child_process')
.execSync('id')
.toString()
})() }}
(function(){ ... })(): Definiert eine selbstaufrufende Funktion, die die Kapselung der gesamten Logik ermöglicht und einen Wert direkt an den Workflow-Ausdruck zurückgibt.this.process: Greift auf das interne process-Objekt von Node.js zu, das Laufzeitinformationen und -ressourcen bereitstellt.process.mainModule: Ermöglicht den Zugriff auf das Hauptmodul der Anwendung und damit das Laden anderer interner Node.js-Module.require('child_process'): Natives Node.js-Modul, das das Erstellen neuer Prozesse auf dem Betriebssystem und die Ausführung externer Befehle ermöglicht.execSync('id'): Führt einen Befehl direkt auf dem Betriebssystem aus, auf dem n8n läuft, und verwendet dabei die Prozessprivilegien der Anwendung..toString(): Konvertiert die Ausgabe des ausgeführten Befehls in Text, sodass das Ergebnis in der n8n-Oberfläche angezeigt werden kann.Das angezeigte Ergebnis bestätigt, dass der Befehl auf dem Betriebssystem mit den Prozessprivilegien von n8n ausgeführt wurde, was eine Remote Code Execution (RCE) darstellt.