
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 visuali ed espressioni JavaScript.
CVE-2025-68613 è una vulnerabilità critica di Remote Code Execution (RCE), con CVSS 9.9, che interessa diverse versioni di n8n. La falla si verifica nell'elaborazione delle espressioni JavaScript nei flussi di lavoro nelle versioni vulnerabili che non sono adeguatamente isolate. Ciò consente a utenti autenticati con permessi di modifica di eseguire codice al di fuori del comportamento previsto dall'applicazione.
In pratica, questa falla può essere sfruttata per eseguire comandi sul server su 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 della falla, le versioni interessate, lo sfruttamento e le misure di mitigazione raccomandate.

| Stato | Versione n8n | Nota |
|---|---|---|
| ❌ Interessata | >= 0.211.0 | Introduzione del meccanismo vulnerabile |
| ❌ Interessata | < 1.120.4 | Vulnerabile fino alla patch nel branch 1.120 |
| ❌ Interessata | < 1.121.1 | Vulnerabile fino alla patch nel branch 1.121 |
| ❌ Interessata | < 1.122.0 | Vulnerabile fino alla patch nel branch 1.122 |
| ✅ Corretta | 1.120.4 | Correzione ufficiale applicata |
| ✅ Corretta | 1.121.1 | Correzione ufficiale applicata |
| ✅ Corretta | >= 1.122.0 | Correzione incorporata per impostazione predefinita |
Si raccomanda di aggiornare immediatamente alla versione 1.122.0 o superiore.
Per dimostrare la vulnerabilità, sono richieste le seguenti condizioni:
La falla si verifica durante la creazione e l'esecuzione dei flussi di lavoro, non prima dell'autenticazione.
Il primo passo è effettuare l'accesso all'interfaccia web di n8n con un utente valido.

Questo passaggio conferma che l'attacco non è anonimo. La vulnerabilità richiede un utente autenticato.
Dopo aver effettuato l'accesso, verificare che l'utente disponga dei 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 della funzionalità di n8n che, nelle versioni vulnerabili, può essere sfruttata.
Il primo nodo aggiunto al flusso di lavoro è il Manual Trigger.

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

Cosa fa questo nodo: Questo nodo consente di creare, modificare o sovrascrivere campi 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 valore del nodo Edit Fields (Set), inserire un'espressione JavaScript racchiusa tra {{ }}, 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 auto-invocante, consentendo l'incapsulamento di tutta la logica e restituendo un valore direttamente all'espressione del flusso di lavoro.this.process: Accede all'oggetto interno process 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 su cui è in esecuzione n8n, utilizzando i privilegi del processo dell'applicazione..toString(): Converte l'output del comando eseguito in testo, consentendo la visualizzazione del risultato nell'interfaccia di n8n.Il risultato visualizzato conferma che il comando è stato eseguito sul sistema operativo utilizzando i privilegi del processo n8n, caratterizzando una Remote Code Execution (RCE).