
Estudo técnico da vulnerabilidade CVE-2025-68613 no n8n, cobrindo versões afetadas, cenário de exploração em laboratório, análise ofensiva e defensiva e estratégias de mitigação.
n8n é uma plataforma de automação de fluxos de trabalho usada para integrar sistemas e serviços por meio de fluxos visuais e expressões JavaScript.
CVE-2025-68613 é uma vulnerabilidade crítica de Execução Remota de Código (RCE), com CVSS 9.9, que afeta várias versões do n8n. A falha ocorre no processamento de expressões JavaScript em fluxos de trabalho em versões vulneráveis que não são devidamente isoladas. Isso permite que usuários autenticados com permissões de edição executem código fora do comportamento esperado da aplicação.
Na prática, essa falha pode ser explorada para executar comandos no servidor onde o n8n está em execução, usando os próprios privilégios da aplicação. As versões afetadas variam de 0.211.0 até versões anteriores às correções aplicadas em 1.120.4, 1.121.1 e 1.122.0.
Este repositório documenta a CVE-2025-68613 tecnicamente, cobrindo o contexto da falha, versões afetadas, exploração e medidas de mitigação recomendadas.

Recomenda-se atualizar imediatamente para a versão 1.122.0 ou superior.
Para demonstrar a vulnerabilidade, as seguintes condições são necessárias:
A falha ocorre durante a criação e execução dos fluxos de trabalho, não antes da autenticação.
O primeiro passo é fazer login na interface web do n8n com um usuário válido.

Esta etapa confirma que o ataque não é anônimo. A vulnerabilidade exige um usuário autenticado.
Após o login, verifique se o usuário tem permissões para criar e editar fluxos de trabalho.

Isso é relevante porque apenas usuários com esse nível de acesso podem inserir expressões dinâmicas nos fluxos de trabalho.
Com o usuário autenticado, crie um novo fluxo de trabalho do zero.

Aqui começa o uso legítimo das funcionalidades do n8n que, em versões vulneráveis, pode ser explorado.
O primeiro nó adicionado ao fluxo de trabalho é o Manual Trigger.

O que este nó faz: Permite a execução manual do fluxo de trabalho, usado como ponto de partida do fluxo.
Neste cenário, ele serve apenas como ponto de entrada para a execução do fluxo de trabalho.
O segundo nó adicionado é o Edit Fields (Set).

O que este nó faz: Este nó permite criar, modificar ou sobrescrever campos de dados dentro do fluxo de trabalho. Ele aceita valores estáticos ou expressões JavaScript avaliadas no momento da execução.
É precisamente neste ponto que a vulnerabilidade se manifesta.
Dentro do campo de valor do nó Edit Fields (Set), insira uma expressão JavaScript envolvida por {{ }}, que é o formato usado pelo n8n para avaliar expressões dinâmicas.

Exemplo de payload:
{{ (function(){
return this.process.mainModule
.require('child_process')
.execSync('id')
.toString()
})() }}
(function(){ ... })(): Define uma função autoinvocável, permitindo encapsular toda a lógica e retornar um valor diretamente para a expressão do fluxo de trabalho.this.process: Acessa o objeto process interno do Node.js, que expõe informações e recursos do runtime.process.mainModule: Permite acessar o módulo principal da aplicação, possibilitando o carregamento de outros módulos internos do Node.js.require('child_process'): Módulo nativo do Node.js que permite criar novos processos no sistema operacional e executar comandos externos.execSync('id'): Executa um comando diretamente no sistema operacional onde o n8n está em execução, usando os privilégios do processo da aplicação..toString(): Converte a saída do comando executado em texto, permitindo que o resultado seja exibido na interface do n8n.O resultado exibido confirma que o comando foi executado no sistema operacional usando os privilégios do processo do n8n, caracterizando uma Execução Remota de Código (RCE).
| Status | Versão do n8n | Nota |
|---|
| ❌ Afetada | >= 0.211.0 | Introdução do mecanismo vulnerável |
| ❌ Afetada | < 1.120.4 | Vulnerável até o patch no branch 1.120 |
| ❌ Afetada | < 1.121.1 | Vulnerável até o patch no branch 1.121 |
| ❌ Afetada | < 1.122.0 | Vulnerável até o patch no branch 1.122 |
| ✅ Corrigida | 1.120.4 | Correção oficial aplicada |
| ✅ Corrigida | 1.121.1 | Correção oficial aplicada |
| ✅ Corrigida | >= 1.122.0 | Correção incorporada por padrão |