A vulnerabilidade CVE-2026-21858, apelidada de Ni8mare, é uma falha de gravidade máxima (CVSS 10,0) no n8n que permite a um atacante remoto e não autenticado assumir o controle completo de instâncias vulneráveis por meio de fluxos de formulário mal configurados. O problema explora uma confusão de Content-Type no mecanismo de webhooks e tratamento de arquivos do n8n, permitindo leitura arbitrária de arquivos no servidor, roubo de segredos, escalada para acesso administrativo e, por fim, execução remota de comandos via workflows.
Escopo, versões afetadas e relação com outras falhas
De acordo com a Cyera Research Labs, Ni8mare afeta todas as versões do n8n anteriores ou iguais à 1.65.0 e foi corrigida na 1.121.0, lançada em 18 de novembro de 2025; versões mais recentes incluem 1.123.10, 2.1.5, 2.2.4 e 2.3.0. Diferentemente de outras três falhas críticas recentes (CVE-2025-68613, CVE-2025-68668/N8scape e CVE-2026-21877), que exigem usuários autenticados com permissão para criar ou modificar workflows ou fazer upload de arquivos perigosos, a CVE-2026-21858 não requer qualquer credencial, o que eleva drasticamente o risco em instâncias expostas à internet.
Como a falha Ni8mare funciona
O fluxo de webhooks do n8n começa na função parseRequestBody(), que examina o cabeçalho Content-Type e escolhe entre dois parsers: parseFormData(), usado quando o conteúdo é “multipart/form-data”, e parseBody(), usado para todos os demais tipos. O parser de upload de arquivos, baseado no módulo Node.js formidable, decodifica o corpo da requisição e armazena o resultado em req.body.files, enquanto o parser “regular” grava os dados em req.body; webhooks de formulário só deveriam processar arquivos quando o Content-Type é multipart/form-data.
A vulnerabilidade surge porque uma função de manuseio de arquivos é chamada sem verificar previamente se o Content-Type é “multipart/form-data”. Em particular, a função de submissão de formulários formWebhook() chama copyBinaryFile() para atuar sobre req.body.files, permitindo que um atacante, ao enviar uma requisição com corpo construído manualmente, substitua completamente o objeto req.body.files e defina o campo filepath arbitrariamente. Em vez de copiar um arquivo enviado pelo usuário, o fluxo passa a copiar um arquivo local qualquer do sistema, e qualquer nó subsequente na workflow recebe o conteúdo desse arquivo interno.
Da leitura arbitrária ao RCE
Com essa primitiva de leitura arbitrária de arquivos, um atacante pode encadear etapas para escalar até RCE em cenários de uso típicos, como um site com interface de chat baseada em workflows de Form. Um caminho descrito pela Cyera envolve: usar a leitura arbitrária para carregar /home/node/.n8n/database.sqlite na base de conhecimento, extrair via chat o ID, e‑mail e hash de senha do administrador, depois ler /home/node/.n8n/config e obter a chave de criptografia, e então combinar esses dados para forjar um cookie de sessão válido e obter acesso administrativo à interface do n8n. Com privilégios de admin, o atacante pode criar um workflow com o nó Execute Command, obtendo execução remota de comandos no host e comprometendo totalmente a instância.
Importância do n8n como ponto único de falha
A Cyera ressalta que o “blast radius” de uma instância n8n comprometida é enorme, porque a plataforma centraliza segredos sensíveis como credenciais de API, tokens OAuth, conexões de banco de dados, chaves de armazenamento em nuvem e integrações com diversos sistemas internos. Em outras palavras, não se trata apenas de perder um servidor isolado: um n8n tomado dá ao invasor as chaves para um ecossistema inteiro de serviços, tornando a plataforma um ponto único de falha extremamente valioso para agentes de ameaça.
Mitigações e recomendações
Dado o impacto e o fato de ser explorável sem autenticação, a recomendação é atualizar o n8n para a versão 1.121.0 ou superior (idealmente para os releases mais recentes, como 1.123.10, 2.1.5, 2.2.4 ou 2.3.0) o mais rápido possível. Em paralelo, é aconselhável evitar expor instâncias n8n diretamente à internet, impor autenticação obrigatória para todos os formulários e restringir ou desabilitar webhooks e endpoints de Form públicos como medida temporária de contenção, especialmente em ambientes onde o patch ainda não pôde ser aplicado.






