
Studio tecnico della vulnerabilità CVE-2025-68613 in n8n, che copre le versioni interessate, lo scenario di esplorazione in laboratorio, l'analisi offensiva e difensiva e le strategie di mitigazione.
n8n è una piattaforma di automazione dei flussi di lavoro utilizzata per integrare sistemi e servizi tramite flussi visivi ed espressioni JavaScript.
CVE-2025-68613 è una vulnerabilità critica di Esecuzione Remota di Codice (RCE), con CVSS 9.9, che colpisce più versioni di n8n. Il difetto si verifica nell'elaborazione delle espressioni JavaScript nei flussi di lavoro nelle versioni vulnerabili che non sono adeguatamente isolate. Ciò consente agli utenti autenticati con permessi di modifica di eseguire codice al di fuori del comportamento previsto dall'applicazione.
In pratica, questo difetto può essere sfruttato per eseguire comandi sul server in cui è in esecuzione n8n, utilizzando i privilegi dell'applicazione stessa. Le versioni interessate vanno dalla 0.211.0 fino alle versioni precedenti alle correzioni applicate in 1.120.4, 1.121.1 e 1.122.0.
Questo repository documenta tecnicamente CVE-2025-68613, coprendo il contesto del difetto, le versioni interessate, lo sfruttamento e le misure di mitigazione consigliate.

Si consiglia di aggiornare immediatamente alla versione 1.122.0 o successiva.
Per dimostrare la vulnerabilità, sono richieste le seguenti condizioni:
Il difetto si verifica durante la creazione e l'esecuzione dei flussi di lavoro, non prima dell'autenticazione.
Il primo passaggio è accedere all'interfaccia web di n8n con un utente valido.

Questo passaggio conferma che l'attacco non è anonimo. La vulnerabilità richiede un utente autenticato.
Dopo l'accesso, verificare che l'utente abbia i permessi per creare e modificare flussi di lavoro.

Questo è rilevante perché solo gli utenti con questo livello di accesso possono inserire espressioni dinamiche nei flussi di lavoro.
Con l'utente autenticato, creare un nuovo flusso di lavoro da zero.

Qui inizia l'uso legittimo delle funzionalità di n8n che, nelle versioni vulnerabili, può essere sfruttato.
Il primo nodo aggiunto al flusso di lavoro è il Trigger Manuale.

Cosa fa questo nodo: Consente l'esecuzione manuale del flusso di lavoro, utilizzato come punto di partenza del flusso.
In questo scenario, funge solo da punto di ingresso per l'esecuzione del flusso di lavoro.
Il secondo nodo aggiunto è Edit Fields (Set).

Cosa fa questo nodo: Questo nodo consente di creare, modificare o sovrascrivere campi di dati all'interno del flusso di lavoro. Accetta valori statici o espressioni JavaScript valutate al momento dell'esecuzione.
È proprio in questo punto che si manifesta la vulnerabilità.
All'interno del campo del valore del nodo Edit Fields (Set), inserire un'espressione JavaScript racchiusa da {{ }}, che è il formato utilizzato da n8n per valutare le espressioni dinamiche.

Payload di esempio:
{{ (function(){
return this.process.mainModule
.require('child_process')
.execSync('id')
.toString()
})() }}
(function(){ ... })(): Definisce una funzione autoinvocante, consentendo l'incapsulamento di tutta la logica e restituendo un valore direttamente all'espressione del flusso di lavoro.this.process: Accede all'oggetto process interno di Node.js, che espone informazioni e risorse di runtime.process.mainModule: Consente l'accesso al modulo principale dell'applicazione, permettendo il caricamento di altri moduli interni di Node.js.require('child_process'): Modulo nativo di Node.js che consente di creare nuovi processi sul sistema operativo ed eseguire comandi esterni.execSync('id'): Esegue un comando direttamente sul sistema operativo in cui è in esecuzione n8n, utilizzando i privilegi del processo dell'applicazione..toString(): Converte l'output del comando eseguito in testo, consentendo di visualizzare il risultato nell'interfaccia di n8n.Il risultato visualizzato conferma che il comando è stato eseguito sul sistema operativo utilizzando i privilegi del processo n8n, caratterizzando un'Esecuzione Remota di Codice (RCE).
| Stato | Versione n8n | Nota |
|---|
| ❌ Affetta | >= 0.211.0 | Introduzione del meccanismo vulnerabile |
| ❌ Affetta | < 1.120.4 | Vulnerabile fino alla patch nel ramo 1.120 |
| ❌ Affetta | < 1.121.1 | Vulnerabile fino alla patch nel ramo 1.121 |
| ❌ Affetta | < 1.122.0 | Vulnerabile fino alla patch nel ramo 1.122 |
| ✅ Corretta | 1.120.4 | Correzione ufficiale applicata |
| ✅ Corretta | 1.121.1 | Correzione ufficiale applicata |
| ✅ Corretta | >= 1.122.0 | Correzione inclusa di default |